在 mdadm RAID1 上启动所需的 GRUB 模块

在 mdadm RAID1 上启动所需的 GRUB 模块

我有一个mdadm托管的 RAID1,上面有一个 EXT4 分区(其中有操作系统文件和 GRUB 文件/boot/grub),我想知道 GRUB 需要哪些模块和配置才能从它启动。

答案1

最低要求grub.cfg如下:

set timeout=1

set root='mduuid/ce16c757e4752e4fa9a2fd4935df1aef'

menuentry 'Arch Linux' {
 linux /boot/vmlinuz-linux root=UUID=05dddf23-1d9f-417e-b3f8-2281a328dc0b rw
 initrd /boot/initramfs-linux.img
}

是的,与 生成的长垃圾流有很大不同grub-mkconfig,并且正如您所看到的,此设置似乎不需要任何模块。

我的具体设置是 MBR 格式磁盘上的单个分区,在该分区上组装了 RAID1 阵列和该阵列上的 EXT4 分区。

root变量设置mduuid/xxxRAID阵列的UUID您可以通过在mdadm --examine /dev/sdX属于 RAID 阵列一部分的磁盘或分区上运行来获得它。这不是 RAID 之上的 EXT4 文件系统的 UUID,不要使用 报告的 UUID,lsblk因为它只会为您提供在那里不起作用的分区的 UUID。

您还可以使用创建 RAID 阵列时指定的标签root来设置该变量( )。对于指定根设备的其他方式,md/...mdadm ... -N "some label" ...查看文档

内核参数行上的 UUID 是文件系统的 UUID它位于 RAID 阵列的顶部 - 可以通过运行以下命令获得该阵列lsblk -o NAME,UUID

NAME                                      UUID
loop0                                     
└─loop0p2                                 ce16c757-e475-2e4f-a9a2-fd4935df1aef
  └─md127                                 05dddf23-1d9f-417e-b3f8-2281a328dc0b
loop1                                     
└─loop1p2                                 ce16c757-e475-2e4f-a9a2-fd4935df1aef
  └─md127                                 05dddf23-1d9f-417e-b3f8-2281a328dc0b

在我的例子中,它是与mdXXX设备节点相对应的。05dddf23-1d9f-417e-b3f8-2281a328dc0b请勿使用基础分区的 UUID -loopXp2在此示例中。


作为奖励,这里有一些可怕的 shell 脚本有点工作如果您想在 QEMU/KVM 虚拟机中试验 GRUB。

要创建一些原始磁盘,它们必须是“原始”才能安装在主机上,您不能使用 qcow2 或 vmdk :

qemu-img create -f raw driveX.img XXXG # name and size

要启动具有两个磁盘、一个 ISO(在本例中为 Archlinux,但它可以是任何东西)和基本网络访问的 VM:

/path/to/qemu-system-x86_64 -m 512 -cpu host -smp 2,cores=2,sockets=1 -machine q35,accel=kvm -balloon none -device ahci,id=ahci -drive if=none,file=drive1.img,format=raw,cache=none,aio=native,id=hdd1 -device ide-hd,bus=ahci.0,drive=hdd1 -drive if=none,file=drive2.img,format=raw,cache=none,aio=native,id=hdd2 -device ide-hd,bus=ahci.1,drive=hdd2 -drive if=none,file=arch.iso,format=raw,cache=none,aio=native,id=iso,snapshot=on -device ide-cd,bus=ahci.2,drive=iso -device pci-ohci,id=ohci -device usb-kbd,bus=ohci.0 -device usb-mouse,bus=ohci.0 -netdev user,id=net0 -device e1000-82545em,autonegotiation=on,netdev=net0 -realtime mlock=on

在主机上挂载 VM 分区的脚本,请确保在运行之前停止 QEMU,以避免损坏分区:

losetup -P -f drive1.img # create loopback device nodes for the virtual disks
losetup -P -f drive2.img

mdadm --assemble /dev/md/root /dev/loop0p1 /dev/loop1p1 # assemble the RAID
# some distributions will auto-detect and assemble them so it sometimes fails
# running this script a second time usually succeeds in mounting it anyway
# if it failed the first time - I don't have time to fix the real issue

mount "/dev/md/root" rootfs # mount the root FS of the VM in this directory

用于卸载的脚本,在启动虚拟机备份之前运行此脚本(为了安全起见多次运行):

umount rootfs # umount the FS

mdadm --stop /dev/md127 # sometimes the array appears under these names
mdadm --stop /dev/md126 # so we stop them as well just to be safe
mdadm --stop /dev/md/root # the correct name

losetup -D # detach all loop device nodes

相关内容