我安装了支持 MDADM RAID 的 Ubuntu 18,启动盘为 (INTELhd0,gpt2-UUID)。我在具有 GPT 分区的磁盘上使用 bios 启动。第一个分区 (hd0,gpt1) 当然是 1MB grub-bios,第二个分区 (hd0,gpt2) 是启动分区,其中包含带有阵列配置模块的完整版 grub。第三个分区是 OS 根系统文件,位于 RAID1 中。为简单起见,所有启动分区都通过 rsync 手动克隆。
当一个驱动器发生故障时,我希望系统仍能启动。我使用了grub安装在其他磁盘(TOSHhd0,gpt2-UUID)上安装 grub,不幸的是,它使用了当前启动磁盘的配置,并指向grub_bios到原始 (INTELhd0,gpt2-UUID) 启动盘。如果主 INTEL-UUID 启动驱动器发生故障,并且从备用磁盘 (TOSH-UUID) 启动,grub_bios 会抱怨原始启动盘 (INTELhd0,gpt2-UUID) 包含完整 grub2 的缺失,并进入救援状态。输入设置前缀=(hd0,gpt2)/grub,然后insmod normal,正常启动就好了。
我如何告诉 grub-install 设置 bios_grub 映像来查找 (hd0,gpt2)/grub 而不是 INTELhd0,gpt2-UUID/grub?
root@testubu:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
├─sda1 8:1 0 1M 0 part #this bios_grub points to UUIDsda only
├─sda2 8:2 0 250M 0 part /boot #also /boot/grub
└─sda3 8:3 0 15G 0 part
└─md0 9:0 0 15G 0 raid1 /
sdb 8:16 0 111.8G 0 disk
├─sdb1 8:17 0 1M 0 part #this bios_grub points to UUIDsdb only
├─sdb2 8:18 0 250M 0 part #backup /boot directory and /boot/grub
└─sdb3 8:19 0 15G 0 part
└─md0 9:0 0 15G 0 raid1 /
grub.cfk 设置为使用标签来查找启动分区,因此我不需要指定分区号。fstab 使用 sda2 作为其 /boot 标识符,我可能应该将其更改为 LABEL=。
看来我可以手动启动每个磁盘一次,因此当我运行 grub-install /dev/sda 时,它会自动将其自己的磁盘 UUID 放入 grub-bios 映像中。这似乎是一种奇怪的做法。