使用UEFI BIOS在具有RAID 1和LVM的计算机上安装带有RAID 1和LVM的Ubuntu 18.04桌面

我有一台带有UEFI BIOS的机器。 我想安装带有RAID 1(和LVM)的桌面版Ubuntu 18.04,这样即使其中一个驱动器出现故障,我的系统也会继续工作。 我还没有找到如何做到这一点的HOWTO。 桌面安装程序不支持RAID。 这个问题的答案几乎可行,但需要一些GRUB shell /救援USB磁盘和UEFI设置魔术。 是否有人知道一个没有神奇部分的程序?

在如何使用UEFI和RAID1 + LVM安装Ubuntu服务器的帮助下, 在Ubuntu 18.04中设置 RAID,在Ubuntu 18.04 Desktop安装程序中使用RAID支持? 以及如何在启动时摆脱“扫描btrfs文件系统”? ,我设法只使用linux命令组合一个工作HOWTO。

简而言之

  1. 下载备用服务器安装程序。
  2. 在RAID分区上使用手动分区,EFI + RAID和LVM进行安装。
  3. 从已安装的分区克隆EFI分区到另一个驱动器。
  4. 将第二个EFI分区安装到UEFI引导链中。
  5. 为避免在驱动器中断期间等待很长时间,请删除btrfs引导脚本。

详细地

1.下载安装程序

  • 从http://cdimage.ubuntu.com/ubuntu/releases/bionic/release/下载备用服务器安装程序
  • 创建可引导CD或USB并从中引导新计算机。
  • 选择“ Install Ubuntu Server

2.使用手动分区进行安装

  • 在安装过程中,在“ Partition disks步骤中,选择“ Manual
  • 如果磁盘包含任何分区,请将其删除。
    • 如果驱动器上存在任何逻辑卷,请选择“ Configure the Logical Volume Manager
      • 选择“ Delete logical volume直到Delete logical volume所有卷。
      • 选择“ Delete volume group直到Delete volume group所有卷组。
    • 如果存在任何RAID设备,请选择Configure software RAID
      • 选择“ Delete MD device直到Delete MD device所有MD设备。
    • 通过选择物理驱动器并选择Delete the partitionDelete the partition物理驱动器上的每个Delete the partition
  • 创建物理分区
    • 在每个驱动器上,在磁盘的开头创建一个512MB的分区(我见过其他人使用128MB),用作: EFI System Partition
    • 在每个驱动器上,创建第二个分区,其大小为“max”,用作: Physical Volume for RAID
  • 设置RAID
    • 选择Configure software RAID
    • 选择Create MD device ,键入RAID1个活动磁盘,0个备用磁盘,然后选择/dev/sda2/dev/sdb2设备。
  • 设置LVM
    • 选择“ Configure the Logical Volume Manager
    • /dev/md0设备上创建卷组vg
    • 创建逻辑卷,例如
      • swap 16G
      • root在35G
      • tmp在10G
      • var在5G
      • 200G的home
  • 设置如何使用逻辑分区
    • 对于swap分区,请选择“ Use as: swap
    • 对于其他分区,请选择Use as: ext4并使用正确的挂载点( //tmp/var/home )。
  • 选择“ Finish partitioning and write changes to disk
  • 允许安装程序完成并重新启动。

3.检查系统

  • 检查已安装的EFI分区。 最有可能是/dev/sda1

    mount | grep启动

  • 检查RAID状态。 最有可能是同步。

    cat / proc / mdstat

4.克隆EFI分区

应该已经在/dev/sda1上安装了EFI bootloaded。 由于该分区未通过RAID系统镜像,我们需要克隆它。

 sudo dd if=/dev/sda1 of=/dev/sdb1 

5.将第二个驱动器插入引导链

此步骤可能不是必需的,因为如果任一驱动器死亡,系统应从(相同的)EFI分区引导。 但是,确保我们可以从任一磁盘启动似乎是明智的。

  • 运行efibootmgr -v并注意ubuntu引导条目的文件名。 在我的安装上它是\EFI\ubuntu\shimx64.efi
  • 运行sudo efibootmgr -c -d /dev/sdb -p 1 -L "ubuntu2" -l \EFI\ubuntu\shimx64.efi
  • 现在,即使其中一个驱动器发生故障,系统也应该启动!

等等

如果要尝试删除/禁用任何驱动器,必须先等待RAID同步完成! 使用cat /proc/mdstat监视进度但是,您可以在等待时执行下面的步骤8。

8.删除BTRFS

如果一个驱动器发生故障(同步完成后),系统仍将启动。 但是,引导序列将花费大量时间来查找btrfs文件系统。 要删除不必要的等待,请运行

 sudo apt-get purge btrfs-progs 

这应该删除btrfs-progsbtrfs-toolsubuntu-server 。 最后一个包只是一个元包,所以如果没有列出要删除的包,你应该没问题。

9.安装桌面版

运行sudo apt install ubuntu-desktop安装桌面版。 之后,可能已完成同步并且您的系统已配置并且应该在磁盘故障后继续存在!

10.在grub-efi-amd64更新后更新EFI分区

当更新包grub-efi-amd64 ,EFI分区上的文件(安装在/boot/efi )可能会更改。 在这种情况下,必须手动将更新克隆到镜像分区。 幸运的是,您应该从更新管理器收到grub-efi-amd64即将更新的警告,因此您不必在每次更新后进行检查。

10.1找出克隆源,快速方法

如果您在更新后没有重新启动,请使用

 mount | grep boot 

找出安装了哪个EFI分区。 该分区(通常为/dev/sdb1 )应该用作克隆源。

10.2找出克隆源,偏执的方式

创建挂载点并挂载两个分区:

 sudo mkdir /tmp/sda1 /tmp/sdb1 sudo mount /dev/sda1 /tmp/sda1 sudo mount /dev/sdb1 /tmp/sdb1 

查找每棵树中最新文件的时间戳

 sudo find /tmp/sda1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sda1 sudo find /tmp/sdb1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sdb1 

比较时间戳

 cat /tmp/newest.sd* | sort | tail -n 1 | perl -ne 'm,/tmp/(sd[ab]1)/, && print "/dev/$1 is newest.\n"' 

应该打印/dev/sdb1 is newest (最有可能)还是/dev/sda1 is newest 。 该分区应该用作克隆源。

在克隆之前卸载分区以避免缓存/分区不一致。

 sudo umount /tmp/sda1 /tmp/sdb1 

10.3克隆

如果/dev/sdb1是克隆源:

 sudo dd if=/dev/sdb1 of=/dev/sda1 

如果/dev/sda1是克隆源:

 sudo dd if=/dev/sda1 of=/dev/sdb1 

完成!

11.虚拟机陷阱

如果您想首先在虚拟机中尝试这一点,那么有一些注意事项:显然,保留UEFI信息的NVRAM会在重新启动之间记住,但不会在关机重启周期之间记住。 在这种情况下,您最终可能会进入UEFI Shell控制台。 以下命令应该从/dev/sda1引导您进入您的机器(使用FS1: for /dev/sdb1 ):

 FS0: \EFI\ubuntu\grubx64.efi 

UEFI在虚拟机中启动的最佳答案中的第一个解决方案–Ubuntu 12.04也可能有所帮助。