在 mdadm RAID1 上引導所需的 GRUB 模組
我有一個
mdadm
-managed RAID1,上面有一個 EXT4 分區(其中包含 OS 文件和 GRUB 的文件/boot/grub
),我想知道 GRUB 需要哪些模組和哪些配置才能從它啟動。
最低要求
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
變數設置為RAID 陣列mduuid/xxx
的UUID,您可以通過mdadm --examine /dev/sdX
在作為 RAID 陣列一部分的磁碟或分區上執行來獲得該 UUID。這不是 RAID 頂部的 EXT4 文件系統的 UUID,不要使用報告的 UUID,lsblk
因為它只會為您提供無法在該處工作的分區的 UUID。您還可以使用創建時指定的 RAID 陣列標籤將
root
變數設置為 ( )。有關指定根設備的其他方法,請查看文件。md/...``mdadm ... -N "some label" ...
核心參數行上的 UUID 是位於 RAID 陣列頂部的文件系統的 UUID - 可以通過執行以下命令獲得
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
在這個例子中。作為獎勵,如果你想在 QEMU/KVM 虛擬機中試驗 GRUB ,這裡有一些可怕的 shell 腳本可以工作。
要創建一些原始磁碟,它們必須是“原始”才能在主機上掛載,您不能使用 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
要解除安裝的腳本,在啟動 VM 備份之前執行它(為了安全起見多次執行):
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