EFI系统分区可以进行RAID吗?

我正在使用Ubuntu 64位系统,使用UEFI和GPT磁盘来设置一个HTPC。
EFI系统分区(分区类型0xEF00)是否可以作为RAID1阵列的一部分,使用mdadm命令?我希望磁盘末尾的元数据版本1.0可以实现这个功能。
另外,"用于引导加载程序安装的设备"应该设置为什么,或者这只适用于MBR磁盘吗?
5个回答

正如你所说,mdadm元数据版本1.0可以完成这项工作。
我已经成功配置了Gigabyte的GA-C1037UN-EU EFI能够引导的设置。 这个配置仅限于ESP分区的RAID1,但允许在其他分区使用任何RAID配置。 以两个驱动器上的RAID1为例。每个磁盘的分区方式如下:
sda (gpt)
--sda1 (512MB)
  mdadm array member with 1.0 metadata format
  boot and esp flags set
--sda2 (rest of disk)
  mdadm array member with 1.2 metadata format

首先,在每个驱动器上创建了sdX1分区的RAID,并用于ESP分区。其余驱动器的容量可以以任何方式使用,例如也可以用于RAID1。 让第一个RAID是/dev/md/efi,第二个是/dev/md/data/dev/md/efi不应使用任何分区标签,如MBR或GPT。 /dev/md/data稍后可以进行分区或用作LVM pv。例如:

/dev/md/efi
--fat32 fs, mounting to /boot/efi/
/dev/md/data
--/dev/md/data1
  linux swap partition
--/dev/md/data2
  ext4 root partition
  ... (other needed partitions)

元数据版本1.0具有一个简单的功能:超级块存储在RAID分区的末尾,因此BIOS可以检测到带有ESP和BOOT标志的普通FAT32分区。因此,没有任何阻止BIOS从该分区搜索EFI/BOOT/BOOTX64.EFI并从中引导的东西。

这种方法的主要限制是GRUB应配置为在可移动介质的路径中安装可引导的EFI文件,因为efibootmgr试图使BIOS直接从md设备而不是sdX启动。可以使用grub-install--removable标志来完成。

更新。存在兼容性问题。尝试在ASUS P8Z68-V PRO/GEN3主板上进行相同配置。无论我做什么系统都无法启动。


我也很好奇,如果你的BIOS写入其中一个分区会发生什么。 - sourcejedi
mdadm 0.90是一种支持较旧版本grub的RAID超级块格式。或许它适用于ASUS P8Z68主板。 - hrvoj3e
1我已经测试过了,只有使用MD元数据版本1.0才可能实现,因为ESP分区仍然保留在GPT中,而元数据存储在其后面。使用元数据版本2.0时,该分区将被合并到MD超级块中,因此固件无法检测到它。 - Kouros
我正在尝试在当前的Debian系统上使用三个磁盘进行复制。我已经使用debootstrap创建了系统,并且现在正在尝试在(arch-)chroot环境中执行grub-install命令。然而,无论我添加或更改什么命令行标志,我都只会得到“错误:找不到磁盘md127”的提示。有没有人知道如何正确调用grub-install以获得成功的结果? - undefined

经过多次尝试,我认为这就是答案:
EFI系统分区(通常挂载在/boot/efi/)并不保存很多文件,除非GRUB直接存储在那里而不是/boot/grub/。内容通常不会改变,因此无需对分区进行RAID。在不同磁盘上拥有多个分区副本还需要使用efibootmgr设置UEFI引导项;通常,GRUB会根据挂载的/boot/efi/分区来初始化这一项。
所以看起来既不需要,也不容易实现。

2但是假设你想要使用RAID1来增加安全性,以防一块硬盘损坏。那么,“而且不容易实现。”这句话是否意味着这是可能的呢? - zidarsk8
那些指南中提到的展示引导分区和EFI系统分区的内容怎么样? - CMCDragonkai
另请参阅:https://askubuntu.com/q/660023/50254 - Mikko Rantalainen

我认为简短的回答是:不,EFI系统分区(ESP)不能进行RAID。然而,如果你在RAID磁盘之间克隆ESP,并将两个分区都添加到EFI引导链中,你仍然可以获得类似RAID的优势。有关详细信息,请参阅这个20.04链接这个18.04链接,或者这个16.04链接

如果您对每个分区的/boot进行更改,例如添加新内核等,您会建议采取什么方式来同步它们呢? - CMCDragonkai
1你不需要这样做!请查看我在http://askubuntu.com/questions/660023/how-to-install-ubuntu-14-04-64-bit-with-a-dual-boot-raid-1-partition-on-an-uefi/660038的评论。 - Niclas Börlin

不,目前还不可能,大多数拥有UEFI的主板只能读取EFI的有限分区类型(例如FAT32),而RAID不是其中之一。

从技术上讲,如果将RAID超级块放在末尾(这是当您创建Linux RAID-1版本1.0格式的超级块时的情况),ESP可以被镜像。
在这样的设置中,由UEFI固件无法区分被RAID化的ESP和非RAID化的ESP。
然而,Ubuntu不支持这种模式,且Ubuntu的工具无法与这样的设置配合使用(与Fedora形成对比)。
然而,即使它们的内容不经常更改,拥有冗余和同步的ESP仍然很重要。写入ESP的软件包更新确实会发生,最新的是在下一次dist-upgrade中。此外,如果一个驱动器出现故障,您需要一个冗余的ESP仍然能够从根文件系统的另一侧引导,即当它在RAID-1上创建时。然后,它应该包含与Ubuntu系统的其余部分兼容的当前软件。

幸运的是,如今Ubuntu以其他方式支持冗余的ESP。这意味着每当系统写入ESP时,它们的grub软件包可以重新配置为始终更新第二个ESP: