如何在基于UEFI的系统中为GPT格式的系统驱动器上的* buntu操作系统创建使用LVM的多重引导环境?

我使用LVM的原因是我重新安装,升级并且通常搞乱我的操作系统安装,以至于我发现LVM在移动,扩展,克隆和备份我的操作系统分区方面给了我极大的灵活性而没有相关的风险与其他分区方法。 但是,它确实会使您的操作系统多引导有时复杂且不可预测,尤其是在较新的硬件上,此过程会获得另一层复杂性。

我所说的是新的UEFI(而不是BIOS)主板,它允许您充分利用3TB +硬盘驱动器的全部潜力(从GPT格式化而不是MBR格式)。 由于每次在您的计算机上安装新的操作系统,它都会覆盖您之前安装的EFI引导程序(.efi)文件,并且最终会在您的EFI中出现一系列损坏的条目,因此事情变得非常复杂和混乱“BIOS”启动列表以及分散在您的分区上的大量冗余grub引导加载程序。 这在很多层面上都让我感到冒犯,尤其是在美学上。

注意:这是OP的答案。 我把它作为CW移到这里,所以它没有关闭。 如果mod看到这一点,请将OP的所有权重新表示为自我回答。

下面,我将详细介绍如何让这一切在某种程度上和谐地工作,并在一定程度上解决问题。

第一部分:安装。

请注意,如果您要在您的计算机上安装Windows 7(或8?),您可能需要先安装它,最好是安装在自己的硬盘上,否则您将无法将其安装在您的计算机上逻辑卷组。 这是因为Windows 7 GPT / EFI安装程序非常基础,不会让您在此处执行各种操作。 安装Windows后,您可以resize并重新分区,添加多引导安装所需的分区。 Windows创建的EFI系统分区始终可以重新用于Linux安装,使用下面详述的方法的变体。

首先 ,在执行任何其他操作之前,使用gparted(或类似工具)擦除预期的系统驱动器并将其初始化为GPT磁盘是有帮助的。 如果您对使用非图形分区器从头开始设置磁盘感到有些紧张,那么这绝对是值得的,并且可以通过标准的现场桌面USB或CD安装程序轻松完成。 不要在Windows中执行此操作。 我不确定这是绝对必要的,但这就是我所做的。 您也可以在此阶段为非LVM分区执行基本分区,因为它不会造成伤害,并为您提供适当的安装框架。

现在刻录安装CD / USB。 如果您使用的是Ubuntu Alternate Desktop ISO(推荐),那么您必须将其刻录到CD上,因为它无法通过USB记忆棒工作。 当用于LVM安装时,当它尝试开始使用aptitude / tasksel加载和安装软件时,它会因严重错误而停止,因此如果您知道什么对您有用,请使用CD!

  • Ubuntu Server在所有情况下都安装得非常好(AFAIK),但我发现如果我想在服务器上构建一个Ubuntu / Mythbuntu桌面系统,它会引入各种非预期的怪癖,然后需要花费时间进行整理。 所以坚持使用桌面,如果这就是你所追求的。

  • Quantal(12.10)在图形安装程序中有LVM作为选项(非常棒!)因此Alternate ISO已被废除。 但是,我发现手动分区界面不灵活,缺乏LVM选项,而且根本无法用于多重启动。 这可能是由于前面提到的USB问题,但说实话,我尝试过的Quantal系统遇到了很多问题,我很快放弃了,然后又回到了Precise(12.04.1)。

  • 另一个主要选项是使用Net-boot安装程序,我没有任何实际经验(除了我的Raspberry Pi),但我相信有基于文本和GUI(GTK)安装程序的mini ISO,可以燃烧和启动。 这些直接从存储库中提取大多数安装文件,并且可高度自定义。

接下来 ,您应该使用来自“BIOS”或启动菜单(通常是键盘上的[F8] – [F12]之一)的UEFI启动条目从CD或USB启动系统。

我将让您了解安装过程的预备知识,但是一旦进入分区部分,选择手动分区,然后创建(或修改,如果您已经创建了一些分区)这些分区:

  1. 单个分区,大小为200MB,FAT32,EFI系统分区,命名/标记为“EFI”,可启动,格式。

  2. 几个分区:大小256MB,EXT2,可启动,格式;

    • 您应该为它们代表的操作系统命名/标记它们,即“OS_01_Boot”…“OS_03_Boot”……等。

    • 首先将第一个安装为“/ boot”,将所有其他安装为“不使用”。

    • 为要安装的每个操作系统创建一个分区。

  3. 一个分区,占用驱动器的其余空间,作为LVM的卷。

    • 在刚刚分区的卷上配置LVM,为所有操作系统创建卷组,为其提供合适的名称和足够的空间。 我建议每个因素至少考虑40GB,具体取决于您为每个计划安装的类型。
  4. 创建一个与系统中物理RAM大小相同的逻辑卷,即8GB,将其命名为“Swap”,用作交换格式。

  5. 为卷组中的每个操作系统创建一个逻辑卷,按照上面的建议resize,并为每个操作系统分配一个名称,即“Ubuntu_12.04”等。

    • 将每个格式化为EXT4,随时命名/标记分区。

    • 首先将第一个安装为“/”(root),将所有其他安装为“不使用”。

而已! 现在,您的系统有一个交换,“/ boot”和“/”(root)分区,并为后续安装提供备件。 您现在可以将更改提交到分区表并继续安装的其余部分。

在安装下一个操作系统时,只需确保分别安装下一个“/ boot”和“/”(root)分区。 请确保将所有其他标记为“不使用”,包括您上次使用的标记。

第二部分:备份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

擦除以前或其他操作系统的EFI引导加载程序文件的任何操作系统安装程序都会严重损坏。 Ubuntu过去曾遇到过这个问题,但据推测它已经修复了12.04版本。 (我说“据说”,因为我已经看到了一些有关这些问题的报告,这些报告让我觉得这个漏洞可能仍然存在于少数系统中。)也就是说,在之前备份你的EFI系统分区(ESP)新操作系统安装是一项有用的保险政策。 文件级备份应该足够了,因为EFI不依赖于引导扇区中的代码。 (但它确实依赖于分区的GUID,因此如果某些东西删除了ESP并创建了一个新的,那么EFI的引导加载程序条目可能会停止工作。)

从广义上讲,对于您的配置类型,我建议创建一个ESP,就像您认为可能需要的多个/boot分区一样,以及一个大的LVM分区。 如果您希望将Linux发行版与其他操作系统一起安装,请创建三个或四个不同大小的LVM分区,然后将这些分区合并到一个卷组中; 这样,您可以从卷组中提取一个分区(逻辑卷)并将其专用于非Linux操作系统。 非LVM /boot分区使您可以选择使用不了解LVM的引导加载程序(即非GRUB2引导加载程序)。

安装新操作系统时,它可能会安装自己的引导加载程序作为默认值。 在像你这样的复杂设置中,大多数时候这可能是错误的。 要更正,有一个USB闪存驱动器或CD-R安装在其上的首选引导加载程序是有帮助的。 能够自动检测其他引导加载程序的东西,例如rEFIt或其派生的rEFInd,可能在这种情况下运行良好。 (请注意,rEFIt网站上的二进制文件仅适用于Mac; rEFInd是基于UEFI的PC的更安全选择。)或者或另外,启动EFI shell的方法可能会有所帮助,因为您可以移动文件,调整启动选项,并修复EFI shell中的许多问题。 许多EFI引导加载程序和引导管理器都可以启动EFI shell。 (请参阅此Arch Linux wiki以获取某些EFI shell的下载链接。)rEFIt和rEFInd CD映像都包含EFI shell。

您不必使用EFI来引导2 + TB磁盘; 你只需要使用GPT并在2Tb标记下创建一个1 MB的bios_grub分区。 如果您发现EFI存在问题,这可能对您更有效。