sudo mount /dev/mapper/vg0-home /target/home
sudo mount /dev/mapper/vg0-tmp /target/tmp
sudo mount /dev/mapper/vg0-var /target/var
sudo mount /dev/mapper/vg0-varlib /target/var/lib
接下来,绑定一些设备,准备chroot...
cd /target
sudo mount --bind /dev dev
sudo mount --bind /proc proc
sudo mount --bind /sys sys
经过几周的试验并在此链接的帮助下,我终于找到了一个可行的解决方案。以下序列是使用 Ubuntu 20.04.2.0 LTS 执行的。我也在虚拟机中成功完成了 21.04.0 的过程。(但是,请注意,Ubuntu 21.04 和一些较旧的 UEFI 系统存在问题。
简而言之
详细地
1. 下载安装程序并启动进入 Ubuntu Live
1.1 下载
1.2 启动 Ubuntu Live
Try Ubuntu
。2.设置mdadm和lvm
在下面的示例中,磁盘设备被称为
/dev/sda
和/dev/sdb
。如果您的磁盘被称为其他名称,例如/dev/nvme0n1
and/dev/sdb
,您应该相应地替换磁盘名称。您可以使用sudo lsblk
来查找磁盘的名称。2.0 安装ssh服务器
如果您不想键入以下所有命令,则可以安装希望通过 ssh 登录并剪切并粘贴命令。
安装
sudo apt install openssh-server
设置密码以启用外部登录
passwd
如果您在虚拟机中对此进行测试,您可能需要转发一个合适的端口。选择
Settings
、Network
、Advanced
、Port forwarding
和加号。输入,例如,3022
作为Host Port
和22
作为访客端口,然后按OK
。或者从您的主机系统的命令行(将 VMNAME 替换为您的虚拟机的名称):现在,您应该可以使用外部计算机登录到您的 Ubuntu Live 会话
或者,如果您在 上的虚拟机上进行测试
localhost
,以及您在上面设置的密码。
2.1 在物理磁盘上创建分区
将分区表归零
在每个驱动器上创建两个分区;一个用于 EFI,一个用于 RAID 设备。
为第一个驱动器上的 EFI 分区创建一个 FAT32 系统。(稍后将克隆到第二个驱动器。)
2.2 安装 mdadm 并创建 md 设备
安装
mdadm
创建 md 设备。忽略有关元数据的警告,因为该阵列不会用作引导设备。
检查 md 设备的状态。
在这种情况下,设备正在同步磁盘,这是正常的,可能会在下面的过程中继续在后台进行。
2.4 对md设备进行分区
/dev/md0p1
这会在设备上创建一个单独的分区/dev/md0
。UUID 字符串标识分区是 LVM 分区。2.3 创建LVM设备
在 md 设备上创建物理卷
在物理卷上创建卷组
在新卷组上创建逻辑卷(分区)。下面的尺寸和名称是我的选择。你可能会做出不同的决定。
现在,分区已准备好用于 Ubuntu 安装程序。
3.运行安装程序
Install Ubuntu 20.04.2.0 LTS
新计算机桌面上的图标。(不要通过任何 ssh 连接启动安装程序!)Installation type
页面上,选择Something else
。(这是重要的部分。)这将为您提供一个名为/dev/mapper/vg0-home
等的分区列表。/dev/mapper/vg0-
。选择Use as:
Ext4
,选中该Format the partition
框,然后选择适当的挂载点(/
forvg0-root
、/home
forvg0-home
等、/var/lib
forvg0-varlib
)。/dev/sda
为引导加载程序选择第一个设备。Install Now
并继续安装。Continue Testing
。在终端中,运行
lsblk
. 输出应该是这样的:如您所见,安装程序将已安装的系统根目录挂载到
/target
. 但是,未安装其他分区。更重要的mdadm
是,尚未安装系统的一部分。4.将mdadm添加到目标系统
4.1 chroot进入目标系统
首先,我们必须挂载未挂载的分区:
接下来,绑定一些设备,准备
chroot
......并
chroot
进入目标系统。4.2 更新目标系统
现在我们在目标系统内部。安装
mdadm
如果出现 dns 错误,请执行
并重复
您可以忽略任何有关管道泄漏的警告。
检查配置文件
/etc/mdadm/mdadm.conf
。它应该在结尾附近包含一条线,类似于删除
name=...
部分以使该行看起来像更新内核应在启动时加载的模块列表。
更新启动 ramdisk
最后退出chroot
5.克隆EFI分区
现在安装的目标系统就完成了。此外,通过 RAID 设备保护主分区免受单个磁盘故障的影响。但是,EFI 引导分区不受 RAID 保护。相反,我们将克隆它。
跑
请注意,FAT UUID 相同,但 GPT PARTUUID 不同。
6.将第二个磁盘的EFI分区插入引导链
最后,我们需要将第二个磁盘上的 EFI 分区插入到引导链中。为此,我们将使用
efibootmgr
.跑
并研究输出。应该有一条类似于
注意后面的路径
File
。跑/dev/sdb
在分区 1 上创建一个与该条目具有相同路径的新引导ubuntu
条目。重新运行并验证是否存在
ubuntu2
与以下路径相同的第二个条目ubuntu
:此外,请注意,每个条目的 UUID 字符串与上面相应的 PARTUUID 字符串相同。
7.重启
现在我们准备重新启动。检查同步过程是否已完成。
如果同步仍在进行中,应该可以重新启动。但是,我建议等到同步完成后再重新启动。
重新启动后,系统应该可以使用了!此外,如果任何一个磁盘发生故障,系统将使用健康磁盘中的 UEFI 分区并在
md0
设备处于降级模式时启动 ubuntu。8. grub-efi-amd64更新后更新EFI分区
更新软件包时
grub-efi-amd64
,EFI 分区(安装在/boot/efi
)上的文件可能会更改。在这种情况下,必须手动将更新克隆到镜像分区。幸运的是,您应该会收到grub-efi-amd64
即将更新的更新管理器的警告,因此您不必在每次更新后进行检查。8.1 查找克隆源,快捷方式
如果更新后没有重新启动,请使用
找出挂载的 EFI 分区。该分区通常
/dev/sdb1
应用作克隆源。8.2 找出克隆源,偏执方式
创建挂载点并挂载两个分区:
在每棵树中查找最新文件的时间戳
比较时间戳
应该打印
/dev/sdb1 is newest
(很可能)或/dev/sda1 is newest
. 该分区应用作克隆源。在克隆之前卸载分区以避免缓存/分区不一致。
8.3 克隆
如果
/dev/sdb1
是克隆源:如果
/dev/sda1
是克隆源:完毕!
9. 虚拟机陷阱
如果您想先在虚拟机中进行尝试,有一些注意事项:显然,保存 UEFI 信息的 NVRAM 在重启之间会被记住,但不会在关机-重启周期之间被记住。在这种情况下,您可能最终会进入 UEFI Shell 控制台。以下命令应该从
/dev/sda1
(FS1:
用于/dev/sdb1
)引导您进入您的机器:在 virtualbox中 UEFI 启动的最佳答案中的第一个解决方案- Ubuntu 12.04也可能会有所帮助。
道歉。我的反馈显然不清楚,所以又来了。问题是“是否有人有一个适用于 20.04 的进程,在 UEFI 机器的 RAID 1 之上使用 LVM?”
我的“答案”是步骤 1-7 中给出的说明既准确又合适——非常感谢——但我在 20.04 上遇到了困难,因为它不支持我现代主板的 XID 641 板载显卡。我尝试使用 21.10 桌面,完全没有问题。请注意,我事先在 BIOS 中将 SATA 从 RAID 切换到 AHCI,并在步骤 7 中等待同步完成,否则,这是一个轻松的过程。目标机器是 Ryzen 9 5950X,ASUS Crosshair VIII Hero 主板,2x8TB 光盘。