在具有UEFI BIOS的计算机上安装具有RAID 1和LVM的Ubuntu 18.04桌面


11

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

Answers:


18

从一些帮助如何安装带有UEFI和RAID1 + LVM Ubuntu的服务器RAID在Ubuntu 18.04成立,并支持RAID在Ubuntu 18.04桌面安装?以及如何在启动时摆脱“扫描btrfs文件系统”的问题?,我设法仅使用linux命令整理了一个有效的HOWTO。

简而言之

  1. 下载备用服务器安装程序。
  2. 在RAID分区上安装手动分区,EFI + 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
    • 在每个驱动器上,创建一个最大大小为“ max”的第二个分区,用作: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设备上创建卷组。
    • 创建逻辑卷,例如
      • swap 在16G
      • root 在35G
      • tmp 在10G
      • var 在5G
      • home 在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启动

  • 检查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。根据您的外壳,可能必须转义反斜杠。
  • 验证efibootmgr -v您是否具有ubuntuubuntu2引导项目的相同文件名,并且它们是引导顺序中的前两个。
  • 现在,即使任何一个驱动器出现故障,系统也应启动!

7.等一下

如果要尝试以物理方式删除或禁用任何驱动器以测试安装,则必须首先等待RAID同步完成!使用监视进度。cat /proc/mdstat但是,您可以在等待时执行以下步骤8。

8.删除BTRFS

如果一个驱动器发生故障(同步完成后),系统仍将引导。但是,引导顺序将花费大量时间查找btrfs文件系统。要消除不必要的等待,请运行

sudo apt-get purge btrfs-progs

这应该删除btrfs-progsbtrfs-toolsubuntu-server。最后一个软件包只是一个meta软件包,因此,如果没有列出要删除的其他软件包,则可以。

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/sda1FS1:用于/dev/sdb1)引导您进入计算机:

FS0:
\EFI\ubuntu\grubx64.efi

virtualboxUEFI引导的最佳答案中的第一个解决方案-Ubuntu 12.04也可能会有所帮助。


对于加密的镜像集/ RAID 1,如何使用LUKS避免两次加密(例如,LUKS位于mdadm下,因此IO发生两次,但是加密本身只发生一次,因此在某些设置下实际上不会发生,例如建议用于ZFS的设备,其中将卷加密两次,每个设备加密一次,从而有效地提高了加密方面的成本。我无法找到有关此设置的最新说明。
soze

2
@soze,很不幸,我没有使用加密的Linux分区的经验。我会在虚拟机中进行一些反复试验以找出答案。注意:我在上面添加了有关虚拟机陷阱的部分。
NiclasBörlin18年

感谢@NiclasBörlin!我正在努力创建RAID和LVM下的启动分区,您的回答很明确。非常感谢!
Gui Ambros

天啊!真好!
堆蛙

随着替代安装程序的消失,这似乎不再适用于Focal Fossa。Focal的安装程序没有提到的分区选项,/boot如果您尝试使用自动RAID安装路线,则坚持使用设备。
周六

3

RAID-1 + XFS + UEFI

@NiclasBörlin的回答使我能够达到99%的效率,谢谢!

我还从以下答案中寻求帮助:

这是我弄乱事情的方法

  1. 将BIOS设置为“自动”模式,这可以使USB-Key不在UEFI模式下启动。这导致无法正确安装Grub。我将模式切换为仅UEFI,重新启动并删除了所有逻辑卷,RAID组和分区,然后重新开始。我进一步尝试在EFI分区上重新安装grub,这只会使情况变得更糟。
  2. 使/boot分区位于XFS上。Ubuntu 18.04LTS随附的grub2显然无法解决此问题。尽管没有任何地方记录。我创建了一个单独的EXT-4 /boot分区。请注意,这仍然在RAID-1 LVM卷上,并且没有像EFI一样的单独分区!许多较早的答案都说这是不可能的,但现在看来。我最终得到蛴螬,但得到未知文件系统错误(例如,如何解决“的错误:未知文件系统的grub救援>)是给我的线索XFS上/boot作为一个没有去。
  3. 在那中间的某个地方,我最终安装了grub,但是出现了一个空白的grub提示符,没有grub菜单。(例如https://help.ubuntu.com/community/Grub2/Troubleshooting#Specific_Troubleshooting)。这是由于/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详细信息将第二个驱动器添加到启动链中。


非常有帮助!我一直在使用Ubuntu Server 18.04 + UEFI + RAID1 + LVM遇到相同的问题。遵循您的分区方案对我有很大帮助。谢谢!
卢卡斯·艾玛瑞托
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.