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
详细信息将第二个驱动器添加到启动链中。