我正在尝试构建一个带有 btrfs RAID5/6 根的 Arch Linux 系统。当我在卷的某个磁盘上安装 GRUB 时,它会在启动时打印如下消息:
error: no such device: [my btrfs volume uuid]
…然后把我转入恢复 shell。如果我输入ls (hdX)
(其中X
是卷的物理磁盘之一),它会打印一些错误文本,包括以下内容:
Unsupported raid flags 82
一些论坛帖子表明 GRUB 目前不支持这些类型的 btrfs 卷。因此,我的下一个想法是创建一个单独的 ext4 格式的启动驱动器。我从 Arch Live CD 开始,并执行以下操作:
$ mount /dev/sdb /mnt # one of the btrfs RAID5 disks
$ arch-chroot /mnt/root /bin/bash
$ mkfs.ext4 /dev/sdi # our new boot disk
$ mount /dev/sdi /mnt # /mnt inside the chroot
$ grub-install --target=i386-pc --root-directory=/mnt /dev/sdi
$ grub-mkconfig -o /mnt/boot/grub/grub.cfg
$ umount /mnt
$ exit # …the chroot
$ reboot # …and switch the boot drive in BIOS settings
我成功进入 GRUB,但是在菜单超时后收到以下消息:
error: no such device: [my btrfs volume uuid]
Loading Linux linux ...
error: hd6 cannot get C/H/S values.
Loading initial ramdisk ...
error: you need to load the kernel first.
Press any key to continue...
…然后我又回到了 GRUB 菜单。我试图找到两个问题的答案:
- 我在创建引导卷时做错了什么吗?
- 有没有其他更好的方法从 btrfs RAID 启动我的系统?
答案1
我家用服务器上的 Gentoo 从我像这样创建的单驱动器 Btrfs 启动(尽管自定义选项应该无关紧要,并且完整安装显然需要在这些相关行之间执行更多步骤):
mkfs.btrfs -f -s 4k -n 4k -O extref,skinny-metadata,no-holes /dev/sda
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
并且它具有以下 fstab 条目:
/dev/sda / btrfs noatime,autodefrag 0 0
/dev/sdb / btrfs noatime,autodefrag 0 0
用户数据存储在由 3x4Tb 驱动器(sdb、sdc、sdd)组成的 RAID5 Btrfs 文件系统上。
我认为当我想将系统根移动到大型 RAID5 文件系统时,我可能会同时遇到两个限制:
- GRUB2(截至 2.02_beta3)似乎不支持 Btrfs RAID5(我尝试在具有 20Gb 虚拟驱动程序的虚拟机中执行此操作,并得到与您相同的错误)
- EFI 启动需要 GPT 分区和 FAT16 或 FAT32 文件系统作为引导加载程序,而传统 BIOS 启动需要 <=2Tb 的 MBR 空间(我对此并不完全确定 [可能存在适用的解决方法],但我认为它适用于 >2Tb 的驱动程序/卷,即使我们没有实际的分区,因为从 MBR 的角度来看,我们驱动器上的整个 LBA 空间在技术上是一个基本分区,我认为我们在文件系统的“MBR 洞”中仍然有一个标准 MBR,以使 BIOS 加载 GRUB)。尽管如此,在上述测试失败后,我并没有尝试在 VM 中测试这一点。