我有一台带有 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。
简而言之
- 下载备用服务器安装程序。
- 使用手动分区、EFI + RAID 和 RAID 分区上的 LVM 进行安装。
- 将 EFI 分区从已安装分区克隆到另一个驱动器。
- 将第二个 EFI 分区安装到 UEFI 启动链中。
- 为了避免驱动器损坏时在启动过程中长时间等待,请删除
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 volume group
直到所有卷组都被删除。
- 选择
- 如果存在任何 RAID 设备,请选择
Configure software RAID
。- 选择
Delete MD device
直到所有 MD 设备都被删除。
- 选择
- 通过选择并选择来删除物理驱动器上的每个分区
Delete the partition
。
- 如果您的驱动器上存在任何逻辑卷,请选择
- 创建物理分区
- 在每个驱动器上,在磁盘的开头创建一个 512MB 的分区(我见过其他人使用 128MB),用作:
EFI System Partition
。 - 在每个驱动器上,创建具有“最大”大小的第二个分区,用作:
Physical Volume for RAID
。
- 在每个驱动器上,在磁盘的开头创建一个 512MB 的分区(我见过其他人使用 128MB),用作:
- 设置 RAID
- 选择
Configure software RAID
。 - 选择
Create MD device
,输入RAID1
,2 个活动磁盘,0 个备用磁盘,然后选择/dev/sda2
和/dev/sdb2
设备。
- 选择
- 设置 LVM
- 选择
Configure the Logical Volume Manager
。 vg
在设备上创建卷组/dev/md0
。- 创建逻辑卷,例如
swap
16Groot
35Gtmp
10G 时var
5Ghome
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
。安装|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
文件名是否相同,以及它们是否是启动顺序中的前两个。ubuntu
ubuntu2
- 现在,即使任何一个驱动器发生故障,系统也应该启动!
7.等待
如果您想尝试物理移除或禁用任何驱动器来测试您的安装,您必须先等到 RAID 同步完成!使用 监控进度,cat /proc/mdstat
但是,您可以在等待时执行下面的步骤 8。
8. 删除 BTRFS
如果一个驱动器发生故障(同步完成后),系统仍将启动。但是,启动序列将花费大量时间寻找 btrfs 文件系统。要消除不必要的等待,请运行
sudo apt-get purge btrfs-progs
这应该会删除btrfs-progs
、btrfs-tools
和ubuntu-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% 的问题,谢谢!
我还从以下答案中获得了帮助:
以下是我搞砸事情的方式
- BIOS 处于“自动”模式,这允许 USB 密钥在非 UEFI 模式下启动。这导致 Grub 无法正确安装。我将模式切换为仅 UEFI,重新启动并删除所有逻辑卷、RAID 组和分区,然后重新开始。我进一步尝试在 EFI 分区上重新安装 grub,但这只会让事情变得更糟。
- 将
/boot
分区放在 XFS 上。Ubuntu 18.04LTS 附带的 grub2 显然无法处理这个问题。尽管没有任何地方记录这一点。我创建了一个单独的 EXT-4/boot
分区。请注意,这仍然在 RAID-1 LVM 卷上,而不是像 EFI 那样的单独分区!许多旧答案都说这是不可能的,但现在似乎可以了。我最终得到了 grub,但得到了未知的文件系统错误(例如。如何修复“错误:未知文件系统。grub rescue>) 这给了我一条线索:XFS/boot
无法运行。 - 在这期间的某个时候,我最终安装了 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
。我还能够使用详细信息将第二个驱动器添加到引导链中。sda1
sdb2
efibootmgr