在带有 UEFI BIOS 的机器上安装带有 RAID 1 和 LVM 的 Ubuntu 18.04 桌面

Nic*_*lin 14 lvm raid uefi system-installation 18.04

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

Nic*_*lin 22

从一些帮助如何安装带有UEFI和RAID1 + LVM Ubuntu的服务器RAID在Ubuntu 18.04成立,并支持RAID在Ubuntu 18.04桌面安装?以及如何在启动时摆脱“扫描 btrfs 文件系统”?,我设法仅使用 linux 命令组合了一个有效的 HOWTO。

简而言之

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

详细

1.下载安装程序

2.手动分区安装

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

如果您在之前具有 RAID 配置的驱动器上重新安装,则上述 RAID 创建步骤可能会失败并且您永远无法获得md设备。在这种情况下,您可能需要创建一个 Ubuntu Live USB 记忆棒,启动它,运行gparted 以清除所有分区表,然后再重新启动本 HOWTO。

3. 检查系统

  • 检查安装了哪个 EFI 分区。最有可能/dev/sda1

    坐骑 | 启动

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

    猫 /proc/mdstat

4.克隆EFI分区

引导加载的 EFI 应该已安装在/dev/sda1. 由于该分区不是通过 RAID 系统镜像的,我们需要克隆它。

sudo dd if=/dev/sda1 of=/dev/sdb1
Run Code Online (Sandbox Code Playgroud)

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

这一步可能不是必需的,因为如果任一驱动器死机,系统应该从(相同的)EFI 分区启动。但是,确保我们可以从任一磁盘启动似乎是谨慎的。

  • 运行efibootmgr -v并注意ubuntu引导条目的文件名。在我的安装中它是\EFI\ubuntu\shimx64.efi.
  • 运行sudo efibootmgr -c -d /dev/sdb -p 1 -L "ubuntu2" -l \EFI\ubuntu\shimx64.efi。根据您的外壳,您可能必须转义反斜杠。
  • 验证和引导项的efibootmgr -v文件名是否相同,ubuntu并且ubuntu2它们是引导顺序中的前两个。
  • 现在,即使其中一个驱动器出现故障,系统也应该启动!

7. 等待

如果您想尝试物理移除或禁用任何驱动器来测试您的安装,您必须首先等待 RAID 同步完成!使用 监视进度cat /proc/mdstat但是,您可以在等待期间执行下面的第 8 步。

8. 移除 BTRFS

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

sudo apt-get purge btrfs-progs
Run Code Online (Sandbox Code Playgroud)

这应该删除btrfs-progs,btrfs-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
Run Code Online (Sandbox Code Playgroud)

找出挂载的 EFI 分区。该分区通常/dev/sdb1应用作克隆源。

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

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

sudo mkdir /tmp/sda1 /tmp/sdb1
sudo mount /dev/sda1 /tmp/sda1
sudo mount /dev/sdb1 /tmp/sdb1
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

比较时间戳

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

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

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

sudo umount /tmp/sda1 /tmp/sdb1
Run Code Online (Sandbox Code Playgroud)

10.3 克隆

如果/dev/sdb1是克隆源:

sudo dd if=/dev/sdb1 of=/dev/sda1
Run Code Online (Sandbox Code Playgroud)

如果/dev/sda1是克隆源:

sudo dd if=/dev/sda1 of=/dev/sdb1
Run Code Online (Sandbox Code Playgroud)

完毕!

11. 虚拟机问题

如果您想先在虚拟机中尝试此操作,有一些注意事项:显然,保存 UEFI 信息的 NVRAM 会在重新启动之间被记住,但不会在关闭-重新启动周期之间被记住。在这种情况下,您可能最终会进入 UEFI Shell 控制台。以下命令应该从/dev/sda1FS1:用于/dev/sdb1)引导您进入您的机器:

FS0:
\EFI\ubuntu\grubx64.efi
Run Code Online (Sandbox Code Playgroud)

在 virtualboxUEFI 启动的最佳答案中的第一个解决方案- Ubuntu 12.04也可能会有所帮助。

  • @soze,不幸的是我没有加密 Linux 分区的经验。我会在虚拟机中进行一些反复试验以找出答案。注意:我在上面添加了一个关于虚拟机陷阱的部分。 (2认同)