我使用 LVM 的原因在于,我经常重新安装、升级和摆弄我的操作系统安装,我发现 LVM 为我提供了极大的灵活性,让我可以随意移动、扩展、克隆和备份我的操作系统分区,而没有其他分区方法带来的风险。然而,它有时会使多重启动操作系统变得有点复杂和不可预测,尤其是在较新的硬件上,这个过程会增加另一个复杂程度。
我所说的是新的 UEFI(而不是 BIOS)主板,它允许您充分利用 3TB 以上的硬盘(格式化为 GPT 而不是 MBR)并从中启动。事情会变得异常复杂和混乱,因为每次您在机器上安装新操作系统时,它都会覆盖您之前安装的 EFI 引导加载程序 (.efi) 文件,最终您会在 EFI“BIOS”引导列表中看到一系列损坏的条目,并且您的分区中会散落着大量几乎多余的 grub 引导加载程序。这在很多方面都让我感到不快,尤其是在美观方面。
答案1
注意:这是 OP 的回答。我将其移至此处作为 CW,这样它就不会被关闭。如果版主看到此内容,请将所有权重新归于 OP,作为自我回答。
下面,我将详细说明如何使这一切和谐地运作,并在一定程度上理清混乱局面。
第一部分:安装。
请注意,如果你要在计算机上安装 Windows 7(或 8?),则可能必须安装它第一的,最好放在它自己的硬盘上,并且您无法将其放在逻辑卷组中。这是因为 Windows 7 GPT/EFI 安装程序非常基础,不允许您执行您在此处执行的操作。在 Windows 安装后,您可以调整大小和重新分区,添加多引导安装所需的分区。Windows 创建的 EFI 系统分区始终可以重新用于 Linux 安装,使用下面详述的方法的变体。
首先,在执行任何其他操作之前,使用 gparted(或类似程序)擦除目标系统驱动器并将其初始化为 GPT 磁盘会有所帮助。如果您对使用非图形分区程序从头开始设置磁盘有点紧张,那么这绝对是值得的,并且可以通过标准实时桌面 USB 或 CD 安装程序轻松完成。不要在 Windows 中执行此操作。我不确定这是否绝对必要,但这就是我所做的。您也可以在此阶段对非 LVM 分区执行基本分区,因为它不会造成任何损害,并为您提供了正确的安装框架。
现在刻录安装 CD/USB。如果您使用的是 Ubuntu Alternate Desktop ISO(推荐),那么您必须将其刻录到 CD 上,因为它根本无法从 USB 棒上运行。当用于 LVM 安装时,它会在尝试使用 aptitude/tasksel 开始加载和安装软件时因严重错误而停止,因此如果您知道什么适合您,请使用 CD!
在所有情况下,Ubuntu Server 都可以通过 USB 完美安装(据我所知),但我发现如果我想在 Server 上构建 Ubuntu/Mythbuntu 桌面系统,它会引入各种意想不到的怪癖,然后需要花时间来解决。所以,如果您想要桌面系统,请坚持使用桌面系统。
Quantal (12.10) 在图形安装程序中将 LVM 作为选项(这很棒!),因此取消了备用 ISO。但是,我发现手动分区界面不够灵活,缺少 LVM 选项,而且根本无法进行多重引导。这可能是由于前面提到的 USB 问题,但说实话,我尝试的 Quantal 系统出现了太多问题,所以我很快就放弃了,回到了 Precise (12.04.1)。
另一个主要选项是使用 Net-boot 安装程序,我对此没有任何实际经验(除了在我的 Raspberry Pi 上),但我相信有带有基于文本和 GUI(GTK)安装程序的迷你 ISO,可以刻录并从中启动。它们直接从存储库中提取大多数安装文件,并且高度可定制。
下一个,您应该使用“BIOS”或启动菜单内的 UEFI 启动项从 CD 或 USB 启动您的系统(通常是键盘上的 [F8] - [F12] 之一)。
我会让你自己完成安装过程的准备工作,但是一旦你进入分区部分,请选择手动分区,然后创建(或者修改如果你已经创建了其中一些)这些分区:
一个大小为 200MB 的单个分区,FAT32,EFI 系统分区,命名/标记为“EFI”,可启动,格式。
几个分区:大小 256MB、EXT2、可启动、格式化;
您应该根据它们所代表的操作系统来命名/标记它们,例如“OS_01_Boot”...“OS_03_Boot”...等等。
首先将其中第一个挂载为“/boot”,并将其他所有挂载为“不使用”。
为您要安装的每个操作系统创建一个分区。
一个分区占用驱动器的剩余空间,作为 LVM 的卷。
- 在刚刚分区的卷上配置 LVM,为所有操作系统创建一个卷组,为其指定一个合适的名称,并为所有操作系统留出足够的空间。我建议为每个操作系统至少留出 40GB 的空间,具体取决于您为每个操作系统计划的安装类型。
创建一个与系统中的物理 RAM 大小相同的逻辑卷,即 8GB,将其命名为“Swap”,用作交换,格式化。
为卷组内的每个操作系统创建一个逻辑卷,按照上面的建议调整其大小,并为每个操作系统指定一个名称,例如“Ubuntu_12.04”等。
将每个分区格式化为 EXT4,并对分区进行命名/标记。
首先将其中第一个挂载为“/”(根),并将其他所有挂载为“不使用”。
就是这样!现在,您已为系统获得了交换分区、“/boot”和“/”(根)分区,并为后续安装提供了备用分区。您现在可以将更改提交到分区表并继续安装的其余部分。
在安装下一个操作系统时,只需确保分别安装下一个“/boot”和“/”(根)分区。请确保将所有其他分区标记为“不使用”,包括上次使用的分区。
第二部分:备份UEFI启动文件。
启动到新操作系统后,您必须备份 UEFI 引导加载程序以供日后使用,并确保下次安装时不会被覆盖。您可以在“/boot/efi/EFI”中找到它,它位于自己的文件夹中,通常名为“ubuntu”。该文件的名称类似于“grubx64.efi”,具体取决于您的 PC 架构;因此,对于我的机器,该文件的名称为“/boot/efi/EFI/ubuntu/grubx64.efi”。
就我而言,为了备份它,我通过控制台复制了它,如下所示:
sudo cp -r /boot/efi/EFI/ubuntu /boot/efi/EFI/Ubuntu_12.04.1
为了以防万一,绝对值得在您的主文件夹或其他安全的地方进行进一步复制:
cp -r /boot/efi/EFI/ubuntu /home/user/Ubuntu_12.04.1
完成此操作后,您可以安全地安装下一个操作系统(按照上述建议),它很可能会覆盖原始文件和文件夹,并使自己成为“BIOS”中的默认 UEFI 启动项。重复此过程并根据需要多次,为每个文件夹赋予不同但具有代表性的名称:
sudo cp -r /boot/efi/EFI/ubuntu /boot/efi/EFI/Server_12.04.1
cp -r /boot/efi/EFI/ubuntu /home/user/Server_12.04.1
第三部分:修改 UEFI“BIOS”中的 UEFI 条目。
在终端输入:
sudo efibootmgr
你应该得到如下输出:
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0006,0007,0005
Boot0000* ubuntu
Boot0005* Hard Drive
Boot0006* UEFI: MATSHITABD-MLT UJ240AS
Boot0007* CD/DVD Drive
其实,它的含义非常明显。它应该与 BIOS 启动列表中显示的内容一致。
阅读:
man efibootmgr
查看命令的作用,然后修改下面的示例命令以添加和删除启动项。
第一的,删除“Boot0000* ubuntu”行:
sudo efibootmgr -b 0000 -B
输出:
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0006,0007,0005
Boot0005* Hard Drive
Boot0006* UEFI: MATSHITABD-MLT UJ240AS
Boot0007* CD/DVD Drive
然后我们将为三个操作系统添加一些条目。
操作系统 #1:
sudo efibootmgr -c -g -d /dev/sda -p 1 -w -L "Ubuntu 12.04.1" -l \\EFI\\Ubuntu_12.04.1\\grubx64.efi
输出:
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0006,0007,0005
Boot0005* Hard Drive
Boot0006* UEFI: MATSHITABD-MLT UJ240AS
Boot0007* CD/DVD Drive
Boot0000* Ubuntu 12.04.1
操作系统 #2:
sudo efibootmgr -c -g -d /dev/sda -p 1 -w -L "Ubuntu Server 12.04.1" -l \\EFI\\Server_12.04.1\\grubx64.efi
输出:
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0001,0000,0006,0007,0005
Boot0000* Ubuntu 12.04.1
Boot0005* Hard Drive
Boot0006* UEFI: MATSHITABD-MLT UJ240AS
Boot0007* CD/DVD Drive
Boot0001* Ubuntu Server 12.04.1
操作系统 #3:
sudo efibootmgr -c -g -d /dev/sda -p 1 -w -L "Mythbuntu 12.04.1" -l \\EFI\\Mythbuntu_12.04.1\\grubx64.efi
输出:
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0002,0001,0000,0006,0007,0005
Boot0000* Ubuntu 12.04.1
Boot0001* Ubuntu Server 12.04.1
Boot0005* Hard Drive
Boot0006* UEFI: MATSHITABD-MLT UJ240AS
Boot0007* CD/DVD Drive
Boot0002* Mythbuntu 12.04.1
到更改启动顺序:
sudo efibootmgr -o 0000,0001,0002,0006,0007,0005
输出:
BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0001,0002,0006,0007,0005
Boot0000* Ubuntu 12.04.1
Boot0001* Ubuntu Server 12.04.1
Boot0002* Mythbuntu 12.04.1
Boot0005* Hard Drive
Boot0006* UEFI: MATSHITABD-MLT UJ240AS
Boot0007* CD/DVD Drive
完毕!
其中涉及一些非常奇怪的语法,尤其是文件路径,但如果您有一个好的指南(我希望是这个),它就非常简单了。
谢谢阅读。 :)
https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#efibootmgr
答案2
任何删除以前或其他操作系统的 EFI 引导加载程序文件的操作系统安装程序都是严重损坏的。Ubuntu 过去曾出现过这个问题,但据说在 12.04 版中已经修复。(我说“据说”是因为我见过几份关于此类问题的报告,这让我认为这个错误可能仍然存在于少数系统中。)话虽如此,在安装新操作系统之前备份 EFI 系统分区 (ESP) 是一种有用的保险策略。文件级备份应该足够了,因为 EFI 不依赖于隐藏在引导扇区中的代码。(它做但是依赖于分区的 GUID,因此如果有东西删除了 ESP 并创建了一个新的,EFI 的引导加载程序条目可能会停止工作。)
总体而言,对于您的配置类型,我建议创建一个 ESP、/boot
您认为可能需要的尽可能多的分区以及一个大的 LVM 分区。如果您希望将 Linux 发行版与其他操作系统一起安装,请创建三个或四个大小不同的 LVM 分区,然后将它们合并到一个卷组中;这样,您就可以从卷组中拉出一个分区(逻辑卷)并将其专用于非 Linux 操作系统。非 LVM 分区/boot
让您可以选择使用不理解 LVM 的引导加载程序(即非 GRUB2 引导加载程序)。
当您安装新操作系统时,它可能会将自己的引导加载程序安装为默认引导加载程序。在像您这样的复杂设置中,大多数情况下这可能是错误的做法。为了纠正这一点,最好有一个安装了您首选引导加载程序的 USB 闪存驱动器或 CD-R。可以自动检测其他引导加载程序的东西,例如改装或其衍生物rEFInd,在这种情况下,它很可能运行良好。(请注意,rEFIt 网站上的二进制文件仅适用于 Mac;对于基于 UEFI 的 PC,rEFInd 是更安全的选择。)或者,启动 EFI shell 的方法可能会有所帮助,因为您可以从 EFI shell 移动文件、调整启动选项并修复许多问题。许多 EFI 引导加载程序和引导管理器都可以启动 EFI shell。(请参阅这个 Arch Linux wiki以获取一些 EFI shell 的下载链接。)rEFIt 和 rEFInd CD 映像都包含 EFI shell。
答案3
您不必使用 EFI 来启动 2+TB 磁盘;您只需使用 GPT 并在 2Tb 标记以下创建一个 1 MB bios_grub 分区。如果您发现 EFI 有问题,这可能更适合您。