Answers:
从一些帮助如何安装带有UEFI和RAID1 + LVM Ubuntu的服务器,RAID在Ubuntu 18.04成立,并支持RAID在Ubuntu 18.04桌面安装?以及如何在启动时摆脱“扫描btrfs文件系统”的问题?,我设法仅使用linux命令整理了一个有效的HOWTO。
btrfs启动脚本。Install Ubuntu Server。Partition disks步骤中,选择Manual。Configure the Logical Volume Manager。
Delete logical volume直到所有卷都被删除。Delete volume group直到所有卷组都已删除。Configure software RAID。
Delete MD device直到删除所有MD设备。Delete the partition。EFI System Partition。Physical Volume for RAID。Configure software RAID。Create MD device,键入RAID1,2个活动磁盘,0个备用磁盘,然后选择/dev/sda2和/dev/sdb2设备。Configure the Logical Volume Manager。vg在/dev/md0设备上创建卷组。swap 在16Groot 在35Gtmp 在10Gvar 在5Ghome 在200Gswap分区,选择Use as: swap。Use as: ext4与正确的安装点(/,/tmp,/var,/home,分别地)。Finish partitioning and write changes to disk。如果要在先前具有RAID配置的驱动器上重新安装,则上面的RAID创建步骤可能会失败,并且您将永远无法获得md设备。在这种情况下,您可能必须先创建一个Ubuntu Live USB记忆棒,启动该记忆棒,然后运行gparted 以清除所有分区表,然后再重新启动此HOWTO。
检查已安装哪个EFI分区。最有可能的/dev/sda1。
坐骑 grep启动
检查RAID状态。它很可能正在同步。
猫/ proc / mdstat
引导加载的EFI应该已安装在上/dev/sda1。由于该分区未通过RAID系统镜像,因此我们需要对其进行克隆。
sudo dd if=/dev/sda1 of=/dev/sdb1
可能无需执行此步骤,因为如果两个驱动器都死了,则系统应从(相同的)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引导项目的相同文件名,并且它们是引导顺序中的前两个。如果要尝试以物理方式删除或禁用任何驱动器以测试安装,则必须首先等待RAID同步完成!使用监视进度。cat /proc/mdstat但是,您可以在等待时执行以下步骤8。
如果一个驱动器发生故障(同步完成后),系统仍将引导。但是,引导顺序将花费大量时间查找btrfs文件系统。要消除不必要的等待,请运行
sudo apt-get purge btrfs-progs
这应该删除btrfs-progs,btrfs-tools和ubuntu-server。最后一个软件包只是一个meta软件包,因此,如果没有列出要删除的其他软件包,则可以。
运行sudo apt install ubuntu-desktop以安装桌面版本。在那之后,同步可能已经完成,您的系统已配置完毕,应该可以在磁盘故障后幸免!
grub-efi-amd64更新软件包后,EFI分区(安装在/boot/efi)上的文件可能会更改。在这种情况下,必须将更新手动克隆到镜像分区。幸运的是,您应该从更新管理器收到grub-efi-amd64即将更新的警告,因此您不必在每次更新后都进行检查。
如果更新后尚未重启,请使用
mount | grep boot
找出要挂载的EFI分区。该分区通常/dev/sdb1应用作克隆源。
创建安装点并安装两个分区:
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
如果/dev/sdb1是克隆源:
sudo dd if=/dev/sdb1 of=/dev/sda1
如果/dev/sda1是克隆源:
sudo dd if=/dev/sda1 of=/dev/sdb1
做完了!
如果要首先在虚拟机中进行尝试,则有一些警告:显然,在重新启动之间(而不是在关机-重新启动周期之间)会记住保存UEFI信息的NVRAM。在这种情况下,您可能会进入UEFI Shell控制台。以下命令应从/dev/sda1(FS1:用于/dev/sdb1)引导您进入计算机:
FS0:
\EFI\ubuntu\grubx64.efi
virtualbox中UEFI引导的最佳答案中的第一个解决方案-Ubuntu 12.04也可能会有所帮助。
/boot如果您尝试使用自动RAID安装路线,则坚持使用设备。
@NiclasBörlin的回答使我能够达到99%的效率,谢谢!
我还从以下答案中寻求帮助:
/boot分区位于XFS上。Ubuntu 18.04LTS随附的grub2显然无法解决此问题。尽管没有任何地方记录。我创建了一个单独的EXT-4 /boot分区。请注意,这仍然在RAID-1 LVM卷上,并且没有像EFI一样的单独分区!许多较早的答案都说这是不可能的,但现在看来。我最终得到蛴螬,但得到未知文件系统错误(例如,如何解决“的错误:未知文件系统的grub救援>)是给我的线索XFS上/boot作为一个没有去。/boot无法访问。从@NiclasBö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详细信息将第二个驱动器添加到启动链中。