我会为同时拥有EFI和BIOS grub给出一个额外的点数/动机。
通过Grub2从USB驱动器启动Live SystemRescueCD.iso循环。
为什么?简单回答:它可以在很多电脑上启动,有些有UEFI,有些只有32位的旧BIOS等等。
真正复杂的动机是:尽可能使用先进的硬件(UEFI)。
实际生活中的使用示例:
- USB驱动器(以GPT模式格式化)有四个分区
- 第一个分区(可以在Windows 7及以上版本中看到)是NTFS格式,占用USB驱动器剩余大小的空间
- 第二个分区用于Grub2和SystemRescueCD.iso文件,至少需要1GiB(最好是2GiB,这样你可以同时携带两个版本的SystemRescueCD.iso,只是为了测试新版本以替换旧版本),我通常使用Ext4文件系统
- 第三个分区用于EFI(Windows称之为ESP),格式化为FAT32,至少需要512MiB(我见过一些电脑如果使用更小的容量,则不将USB驱动器显示为可启动介质)
- 第四个分区用于BIOS_Grub(无需格式化,但创建时要清除)
一件重要的事情:我见过一个8GiB的LG USB启动盘(我自己拥有的),如果分区不对齐到柱面,它将无法在物理UEFI PC上引导,但可以在其他UEFI PC和启用UEFI引导模式的VirtualBOX上看到...当按照MiB对齐进行分区时,它确实使用了所有空间,末尾没有接近1MiB未分区的空间,但是当按照柱面对齐时,最后一个不完整的MiB没有被使用...如果我考虑到这一点进行MiB分区(换句话说,我手动进行柱面对齐),它就能正常工作,但是我要说的是它仍然是柱面对齐(我手动操作而不是让分区工具为您完成)。
如何获得这样一个强大的USB恢复盘(它有两个技巧):
1. 将分区对齐到柱面(只需对齐到MiB更兼容)
2. 在同一个grub分区上执行grub-install --target=i386-pc,然后再执行grub-install --target=x86_64-efi,这样你只需要一个grub.cfg来支持两种引导模式
它的引导方式是:
- a) 从旧的BIOS引导,会加载MBR,然后从BIOS_grub分区加载Grub的Stage2,然后从Grub2分区加载core.img
- b) 兼容UEFI引导时,会从ESP分区加载.efi文件
- 如果存在于grub2分区上,则读取grub.cfg文件
- 然后显示Grub2菜单
- 然后我选择从loop SystemRescueCD.iso引导(带有dochace参数),我在grub.cfg上设置了两个选项,一个是32位,一个是64位(实际上有四个选项,因为我在其中两个上设置了dostartx参数以直接引导到GUI)。
- 引导后,我可以弹出USB驱动器(整个Live Linux都在ramdrive中,感谢docache参数),无需输入任何命令,U盘不会被挂载(再次感谢docache参数)。
使用这个U盘,我可以在旧的PC上引导(如果它们允许从USB引导),可以选择32位或64位(如果处理器支持扩展)。但是以BIOS模式引导。
用这个U盘,我还可以在32位和64位的新电脑上启动(如果允许从USB启动),但是以UEFI模式启动(啊,是的,它可以以UEFI模式启动,然后以32位或64位模式启动Linux Live SystemRescueCD)。
所以我有一个多合一的U盘恢复引导介质,能够在几乎所有的PC上启动,无论是现代的还是旧的(只需要支持USB启动),无论是32位还是64位,BIOS还是UEFI等等...而且我可以选择我想要运行的是32位还是64位。
而且更重要的是,我已经在一台拒绝安装64位Windows的PC上进行了测试(因为它是一颗旧的32位处理器),但是却能够运行64位的Linux Live(因为该处理器具备PAE功能)。
附注:NTFS等第一个分区用于存储可以与Windows 7及更高版本共享的数据(XP无法看到它,因为不支持GPT分区)...它必须是第一个分区,不需要位于磁盘的初始部分,可以放在任何位置,但必须作为分区表中的第一个条目存在。这是由于可恶的Windows模式将分区挂载在可移动设备上,它有特别编程的代码来避免访问除第一个分区以外的其他分区,因此您无法同时挂载其他分区。
针对Windows和USB分区的额外说明:如果您在分区表中交换分区条目,换句话说,将要访问的分区放在表中的第一个位置,Windows将允许您访问它(如果其格式被理解,如FAT32和NTFS直接访问,ext2则需要特殊驱动程序等),但只允许访问位于分区表的第一个条目上的分区...有一个工具(称为BootICEx86.exe)可以在Windows上完成这样的工作,甚至不需要拔下USB设备。
超级额外信息:还有一些闪存盘(我非常幸运拥有一个索尼16GiB),可以通过特殊工具进行位更改(我的是使用来自Lexar的工具),这样它们在Windows中就会被识别为USB硬盘而不是USB闪存盘。在更改后,所有的Windows都将允许您删除、创建和管理其上的分区,并且可以同时挂载多个分区,每个分区都有自己的盘符。
Linux用户不必担心这个问题,因为Linux将其视为可分区的块设备,并且不实现阻止挂载分区等功能,就像Windows那样。
哦,是的,最后这几段文字是写给微软员工们看的,以便他们的脸色变得沉重,我正在努力(我知道这是一个无法实现的目标)让他们从Windows中删除这样丑陋的代码,并让用户能够以原生方式在USB闪存盘上创建分区。