简而言之

简而言之

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

答案1

在以下帮助下如何使用 UEFI 和 RAID1 + LVM 安装 Ubuntu 服务器在 Ubuntu 18.04 中设置 RAID, 和Ubuntu 18.04 桌面安装程序是否支持 RAID?如何摆脱启动时的“扫描 btrfs 文件系统”?,我设法仅使用 Linux 命令编写了一个可行的 HOWTO。

简而言之

  1. 下载备用服务器安装程序。
  2. 使用手动分区、EFI + RAID 和 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
    • 创建逻辑卷,例如
      • swap16G
      • root35G
      • tmp10G 时
      • var5G
      • home200G
  • 设置如何使用逻辑分区
    • 对于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

    安装|grep boot

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

    猫/proc/mdstat

4. 克隆 EFI 分区

EFI 引导程序应该已安装在 上/dev/sda1。由于该分区未通过 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。根据您的 shell,您可能必须转义反斜杠。
  • 验证和启动项的efibootmgr -v文件名是否相同,以及它们是否是启动顺序中的前两个。ubuntuubuntu2
  • 现在,即使任何一个驱动器发生故障,系统也应该启动!

7.等待

如果您想尝试物理移除或禁用任何驱动器来测试您的安装,您必须先等到 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:/dev/sdb1

FS0:
\EFI\ubuntu\grubx64.efi

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

答案2

RAID-1 + XFS + UEFI

通过@Niclas Börlin 的回答我已经解决了 99% 的问题,谢谢!

我还从以下答案中获得了帮助:

以下是我搞砸事情的方式

  1. BIOS 处于“自动”模式,这允许 USB 密钥在非 UEFI 模式下启动。这导致 Grub 无法正确安装。我将模式切换为仅 UEFI,重新启动并删除所有逻辑卷、RAID 组和分区,然后重新开始。我进一步尝试在 EFI 分区上重新安装 grub,但这只会让事情变得更糟。
  2. /boot分区放在 XFS 上。Ubuntu 18.04LTS 附带的 grub2 显然无法处理这个问题。尽管没有任何地方记录这一点。我创建了一个单独的 EXT-4/boot分区。请注意,这仍然在 RAID-1 LVM 卷上,而不是像 EFI 那样的单独分区!许多旧答案都说这是不可能的,但现在似乎可以了。我最终得到了 grub,但得到了未知的文件系统错误(例如。如何修复“错误:未知文件系统。grub rescue>) 这给了我一条线索:XFS/boot无法运行。
  3. 在这期间的某个时候,我最终安装了 grub,但是 grub 提示符是空白的,没有 grub 菜单。(例如。https://help.ubuntu.com/community/Grub2/Troubleshooting#Specific_Troubleshooting)。这是因为/boot无法访问。

对我有用的

从@Niclas Börlin 的回答开始并改变一些小事情。

分区表

我倾向于一个大/分区,所以这反映了我的选择。主要的变化是使用 EXT4/boot分区而不是 XFS 分区。

sda/
          GPT     1M (auto-added)
   sda1 - EFI - 512M
   sda2 - MD0 - 3.5G

sdb/
          GPT     1M (auto-added)
   sdb1 - EFI - 512M
   sdb2 - MD0 - 3.5G

md0/
   vg/
     boot - 1G   - EXT4 /boot
     swap - 16G  - SWAP 
     root - rest - XFS  /

安装完成后,我能够按照其他答案中的详细信息查看内容dd。我还能够使用详细信息将第二个驱动器添加到引导链中。sda1sdb2efibootmgr

相关内容