赞
踩
多台计算机安装了不同的系统(Windows, Linux, MacOS), 如果要对系统进行重装或者维护, 每一次都是重新制作启动和维护移动存储设备, 为了节省时间, 考虑制作一个即可启动和维护Windows的也可以启动和安装Linux的多启动移动存储设备. 现代的电脑主板上面的固件(BIOS)可以支持Legacy BIOS启动也可以支持UEFI启动, 下面我们指的是Legacy BIOS, 当然最后也说明了一下制作UEFI启动盘.
这里面使用移动U盘和移动硬盘都测试实践没有问题. 以下是过程.
如果你想制作一个和我这个一样的多系统启动维护移动设备,那么可以看最后的总结部分, 通过几个步骤完成, 所有的文件我都会上传.
多系统启动的移动存储设备可以完成但是不限于下面这些功能
因为个人习惯用Linux, 这里用的是Ubuntu 14.04.4 X64, 如果使用Windows, 那么也可以使用grub2 windows版本来制作, 如果是其他Linux Distribution, 那么只要安装了Grub2也可以完成制作.
下面设备是我用的,测试的设备, 具体中, 只要有一个4GB甚至2GB的U盘即可, 如果期望装入很多系统, 那么就需要size大些:
在Ubuntu 14.04下面安装grub2到移动硬盘或者U盘非常容易, 先确定自己的移动存储设备的节点, 例如下面是我的移动硬盘的设备节点以及分区:
然后具体的设备与分区信息如下:
$ sudo fdisk -l /dev/sde
Disk /dev/sde: 500.1 GB, 500107862016 bytes
64 heads, 32 sectors/track, 476940 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf0b1ebb0
Device Boot Start End Blocks Id System
/dev/sde1 * 871911424 976771071 52429824 7 HPFS/NTFS/exFAT
/dev/sde2 16166 871910464 435947149+ f W95 Ext'd (LBA)
/dev/sde5 16198 419762384 209873093+ 7 HPFS/NTFS/exFAT
/dev/sde6 419762448 696257099 138247326 7 HPFS/NTFS/exFAT
/dev/sde7 696257163 871910464 87826651 7 HPFS/NTFS/exFAT
Partition table entries are not in disk order

可以看到sde1为"活动"分区, 即Boot分区, 然后mount信息如下:
$ mount | grep sde1
/dev/sde1 on /media/hexiongjun/PE type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)
驱动好这些信息后, 我们使用下面命令安装:
sudo grub-install --boot-directory=/media/hexiongjun/PE/grub2 --removable /dev/sde
注意--boot-directory为grub存放的路径, 这个是放在了设备的这个分区的grub2目录下面, 最后一个参数是设备节点路径, 不是分区路径.
如果没有错误,那么会提示:
$ sudo grub-install --boot-directory=/media/hexiongjun/PE/grub2 --removable /dev/sde
Installing for i386-pc platform.
Installation finished. No error reported.
至此, 我们就安装好了grub2到这个移动硬盘中了.
完成了grub2的安装之后,我们需要配置grub2,让其知道该加载什么文件, 当然, 也可以不配置, 然后启动后直接全部手动输入来引导也是可以的.
配置文件放在:
/media/hexiongjun/PE/grub2/grub/grub.cfg
这个其实配置了启动的菜单, 这里面我们的内容如下:
set timeout=10
set default=0
menuentry "Ubuntu 14.04.4 X64 Live ISO" {
loopback loop /ubuntu-14.04.4-desktop-amd64.iso
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.4-desktop-amd64.iso splash --
initrd (loop)/casper/initrd.lz
}
menuentry "Windows 10PE x64 ISO" {
set root='(hd0,msdos1)'
set g4d_dir="/Grub4dos/"
set cfgfile="find --set-root /PE/ConcisePE_Win10x64.iso;map --mem /PE/ConcisePE_Win10x64.iso (0xff);map --hook;chainloader (0xff);boot"
linux $g4d_dir/grub.exe --config-file=$cfgfile
}
menuentry "WindowsPE UQi ISO" {
set root='(hd0,msdos1)'
set g4d_dir="/Grub4dos/"
set cfgfile="find --set-root /PE/UQi_USBsys_2017.iso;map --mem /PE/UQi_USBsys_2017.iso (0xff);map --hook;chainloader (0xff);boot"
linux $g4d_dir/grub.exe --config-file=$cfgfile
}
menuentry "AcronisTrueImage2017" {
set root='(hd0,msdos1)'
set g4d_dir="/Grub4dos/"
set cfgfile="find --set-root /PE/AcronisTrueImage2017_NG.iso;map --mem /PE/AcronisTrueImage2017_NG.iso (0xff);map --hook;chainloader (0xff);boot"
linux $g4d_dir/grub.exe --config-file=$cfgfile
}
menuentry "Porteus 3.2 ISO" {
set isofile=/PE/Porteus-3.2-i586-20170206.iso
search --set -f $isofile
loopback loop $isofile
linux (loop)/porteus/vmlinuz from=$isofile
initrd (loop)/porteus/initrd.xz
}

这里共有五项启动项目, 分别为2个Linux, 3个PE相关的WindowsOS, 其中PE ISO的启动用到了grub4dos, 本身grub2也可以引导ISO,但是我测试发现使用memdisk的方式在某些机器上面会有问题, 因此干脆直接就用grub4dos吧.
2017/03/06更新 添加Android X86的启动引导:
menuentry "Android-x86 Live" {
loopback loop /android_x86.iso
linux (loop)/kernel boot=casper iso-scan/filename=/android_x86.iso root=/dev/ram0 androidboot.hardware=android_x86 video=-16 quiet SRC= DATA=
initrd (loop)/initrd.img
}
因为用到了grub4dos, 而grub4dos也是bootloader, 因此其实就是grub2--> grub4dos --> PE, 因此我们需要将grub4dos的文件(点击即可下载)放到硬盘中:
$ ls /media/hexiongjun/PE/Grub4dos/
back.jpg font6500.gz grldr grldr4.mbr grldr.mbr grub.exe ipxegrldr menu.lst menu_out.lst message 说明
这个Grub4dos, 我已经上传, 可以到这里面下载, 如果你需要的话, 下载后解压到移动设备的启动分区即可.
grub.cfg加载的文件
这里面我们全部都是iso文件, 一些位于PE目录下, ubuntu位于设备分区根目录下面:
$ ls /media/hexiongjun/PE/ubuntu-14.04.4-desktop-amd64.iso
/media/hexiongjun/PE/ubuntu-14.04.4-desktop-amd64.iso
$ ls /media/hexiongjun/PE/PE/
AcronisTrueImage2017_NG.iso ConcisePE_Win10x64.iso Porteus-3.2-i586-20170206.iso UQi_USBsys_2017.iso
直接编辑grub.cfg后是不会生效的,我们还需要使用update-grub2或者grub-mkconfig来使更新了的配置生效, 但是这里我们使用和前面update install一样的命令来更新, 即重新运行前面的命令即可完成更新:
sudo grub-install --boot-directory=/media/hexiongjun/PE/grub2 --removable /dev/sde
Installing for i386-pc platform.
Installation finished. No error reported.
因为实机开机关机慢, 在Linux下面我们直接使用qemu来测试, 例如:
sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 3072 -hda /dev/sde
最后的是设备节点作为hard disk, 中间还有一个-m 3072, 指的是specify memory 3GB, 如果太小,那么grub4dos在加载iso文件到内存的时候会出错.
如果是使用memdisk来加载的话,也会出现问题, 例如下面的加载会出现out of memory:
如果我们选择启动WinPE,那么grub4dos就会加载ISO到memory:
加载完成后, 就可以选择启动, 例如下面是启动了ATI的image:
下面是Porteus Linux:
如果要添加一个ISO, 那么我们可以再添加一个menuentry, 然后再次grub2-install即可. 那么下面说明一下menuentry的内容与语法:
menuentry "Ubuntu 14.04.4 X64 Live ISO" {
loopback loop /ubuntu-14.04.4-desktop-amd64.iso
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.4-desktop-amd64.iso splash --
initrd (loop)/casper/initrd.lz
}
linux: 变量指定要启动的linux kernel, 但是也可以是其他的可以执行的文件, 例如前面提到的grub4dos的grub.exe.
initrd: 即initrd 最小系统, 具体可以看我以前的PPT分享讲解的initramfs与initrd的区别. 可以没有.
linux后还需要指定boot parameters, 即相当于u-boot中的bootargs, 传入到Linux kernel中的cmdline.
也可以指定对应要运行的程序自定义的参数, 例如--config.
前面我们看到了loop为一个block loopback设备, 后面的linux与initrd都是从这里面来指定的, 设备文件使用()来表示.
使用ls来查看所有文件, 使用ls带设备来查看某个设备分区:
同时从前面也可以看到, 如果我们需要查看某个设备的UUID是可以通过这个ls来获取的
下面是使用ls来查看文件:
如何查看某个命令的帮助
要么在线看
https://www.gnu.org/software/grub/manual/grub.html#SEC_Contents
有的命令有-h选项
如果期望查看grub2的文档,那么可以参考下面这个文档, 非常详细, 包含安装定制与使用:
menuentry "Ubuntu 14.04.4 X64 Live ISO" {
loopback loop /ubuntu-14.04.4-desktop-amd64.iso
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.4-desktop-amd64.iso splash --
initrd (loop)/casper/initrd.lz
}
UEFI需要FAT32 FS, 因此使用我们的U盘为例, 如果你有一个WPE ISO支持UEFI启动,那么直接mount ISO, 然后讲里面的内容拷贝到这个FAT32启动分区即可. 例如前面的Concise即支持.
grub2的install中有一个UEFI的对应选项, man手册可以找得到.
具体可以参考这篇文章中的示例
或者通过man grub-install , 然后search efi看到对应的选项.
网上都是参考这篇文章的说法, 使用memdisk来启动WinPE ISO,但是实际上是可能出现问题的. 尤其是Size较大的Windows 8 PE或者Windows 10 PE.
如果你的WinPE ISO比较大,那么不要使用memdisk的方式来启动, 否则会出现下面这个问题:
就算在Qemu中没有问题, 但是在某些实机上面却会出现问题, 使用grub4dos没有这个问题
可能会出现类似下面这种情况, 其实Windows是启动了, 但是因为qemu的问题, 导致无法正常启动:
这个是因为使用了Qemu qvm的缘故.
对此, 我们可以换成VirtualBox来测试, 具体参考: How to Boot From a USB Flash Drive in VirtualBox
修改与安装bootloader的工具, 包括Legacy BIOS与UEFI, 可以安装不同的Bootloader, 例如Grub4Dos, grub2, MBR等等, 参考: http://wuyou.net/forum.php?mod=viewthread&tid=375848&extra=page%3D1
用来快速制作多系统启动U盘,但是需要Format 分区.
与Easy2Boot类似.
添加ISO的WinPE镜像启动项
参考下面这个GIF动画, 来源于恋梦PE, 用的是EasyBCD, 这个适用于系统安装完成后, 添加一个PE系统从而方便维护:
How to Create a EFI/UEFI GRUB2 Multiboot USB drive to boot ISO images
Grub4dos参考下载链接中的说明里面的chm
下面说一下如何制作和测试, 以及使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。