引导管理程序
对于 EFI 系统来说,系统的引导文件会安装到 ESP。Windows 会在 ESP 建立 EFI 目录并把引导文件复制到这里。Linux 则有多种选择方案,我一般选择 Grub2,也使用过 rEFIt。
而对于非 EFI 系统,主引导记录(MBR)我一般会使用 GRUB4DOS 或 NT6.X MBR,并把 GRUB4DOS (包括 grub.mbr, grub.exe, grldr, menu.lst)安装到 ESP,并且,附加上 SISO 模块(可以在无忧论坛里找到它)。还可以从 Win 8.1 复制 bootmgr 及 boot 目录到 ESP,并使用 BOOTICE 来管理 MBR 和 BCD。
不管系统是否是 EFI 的,我一般都会在 ESP 里安装 GRUB4DOS。GRUB4DOS 并不支持 EFI,但没关系,我们可以借用 GRUB 2 EFI 来引导 GRUB4DOS,给 GRUB 2 加个菜单就可以了,类似这样:
menuentry "GRUB4DOS" {
insmod part_msdos
insmod fat
set root=(hd0,1)
linux /grub.exe
}
以后我打算尝试下Clover,这样,不管是否是 EFI 系统,我都可以用同样一个引导管理程序。
在 ESP 里安装非日常用操作系统
当然,你不会想在 ESP 里安装日常所用的操作系统,我们可以挑选那些小巧便携的一些操作系统放到 ESP 里以备不时之需。许多系统可以借助某些引导管理程序以 ISO 镜像的方式直接启动,比如,SliTaz Linux, Ubuntu 等,很多 Win PE 系统也可借由 GRUB4DOS 从 ISO 直接启动。
GRUB 2 可以使用 loopback 模块启动一些 ISO 镜像,假设 ESP 是第一块硬盘的第一个分区,下面是一些 Grub 2 的菜单例子:
### GRUB 2 菜单文件: /boot/grub/grub.cfg
menuentry "Ubuntu Live" {
set ISO=/OS/Ubuntu/ubuntu.iso
loopback loop (hd0,1)$ISO
### 如果是32位的Ubuntu,应将下面的 vmlinuz.efi 改为 vmlinuz
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$ISO noprompt noeject
initrd (loop)/casper/initrd.lz
}
menuentry "SliTaz" {
set ISO=/OS/SliTaz/slitaz-cooking.iso
loopback loop (hd0,1)$ISO
linux (loop)/boot/bzImage root=/dev/null
initrd (loop)/boot/rootfs.gz
}
menuentry "Fedora Live" {
set ISO=/OS/Fedora/fedora.iso
loopback loop (hd0,1)$ISO
linux (loop)/EFI/boot/vmlinuz0 root=live:$ISO rootfstype=auto ro liveimg quiet rhgb rd.luks=0 rd.md=0
initrd (loop)/EFI/boot/initrd0.img
}
menuentry "Knoppix Live ISO" {
set ISO=/OS/Knoppix/knoppix.iso
loopback loop (hd0,1)$ISO
linux (loop)/boot/isolinux/linux bootfrom=/dev/sda1$ISO acpi=off keyboard=us language-us
initrd (loop)/boot/isolinux/minirt.gz
}
相对来说,我对 GRUB4DOS 更熟悉一些,而且 GRUB4DOS 可以启动更多种类的镜像文件。如果你的系统是 EFI 启动的,你可以安装 GRUB 2 EFI 并借由它来引导 GRUB4DOS,前面已经说过。GRUB4DOS 的菜单文件是 menu.lst,以下是一些例子:
iftitle [find --set-root --devices=h /bootmgr && call set R=%@root^%] BOOTMGR of Windows VISTA/WIN7/WIN2008 on %R%
chainloader %bootmgr%/bootmgr
iftitle [find --set-root --devices=h /OS/Ubuntu/ubuntu.iso && call set R=%@root^%] Ubuntu LiveCD
set F=/OS/Ubuntu/ubuntu.iso
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
kernel (0xff)/casper/vmlinuz boot=casper iso-scan/filename=%F% ro quiet splash
initrd (0xff)/casper/initrd.lz
title SliTaz ISO
set F=/OS/SliTaz/slitaz.iso
find --set-root --ignore-floppies --ignore-cd %F%
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
chainloader (0xff)
title Win8.1 RamOS
set F=/OS/Win8/usm8.1ramos.iso
find --set-root --ignore-floppies --ignore-cd %F%
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
chainloader (0xff)
title 0PE LiveISO
set F=/OS/0PE/0PE.iso
find --set-root --ignore-floppies --ignore-cd %F%
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
chainloader (0xff)
更高级点,还可以利用 Win7 以上版本的差分 VHD 及 GRUB4DOS 的 dd 命令做一键恢复。