如何启动 GRUB2 以便它将“根”安装在不同的驱动器上(没有 KVM 交换机的远程服务器)

如何启动 GRUB2 以便它将“根”安装在不同的驱动器上(没有 KVM 交换机的远程服务器)

概括: 我在 RAID 阵列(上面有一个磁盘)上创建了根文件系统的副本,并尝试让系统从新复制的驱动器启动。

背景:

  • 服务器中有 2 个大小相同的磁盘 (sda、sdb)
  • sdb 未被使用
  • 我尝试将整个系统转换为 RAID1 镜像
  • 当前活动分区:
    • sda1-启动
    • sda2——交换
    • sda3 - 根(挂载到“/”)

我不确定是否有可能使完整的 RAID1 系统能够从任何驱动器启动,因为我没有 KVM 访问权限(我只能告诉他们通过故障单来帮助我摆脱困境)

迄今已完成的工作:

  • 在 sdb 上创建分区以匹配 sda
  • 创建新的 raid1 阵列(包含 1 个磁盘)
  • /dev/md3 由 1 个磁盘组成:/dev/sdb3
  • 已挂载 /dev/md3 /mnt/md3
  • cp -ax / /mnt/md3
  • 所以现在我在 / 和 /dev/md3 上有匹配的数据副本

我可以只编辑 GRUB2 来将 /dev/md3 设为根目录吗?一切都应该没问题,对吧?

我需要绝对确定,因为我没有 KVM 访问权限。我查看了 /boot/grub/grub.cfg,看到了以下条目:

menuentry 'Ubuntu, with Linux 2.6.32-28-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,1)'
    search --no-floppy --fs-uuid --set 18de6bbd-e46d-4f89-a2c9-fa2e7fa718b7
    linux   /vmlinuz-2.6.32-28-generic-pae root=/dev/sda3 ro   
    initrd  /initrd.img-2.6.32-28-generic-pae
}

因此,请注意“根= / dev / sda3“部分。我可以将其替换为“root=/dev/md3”,然后重新启动吗?

答案1

假设文件系统直接位于 /dev/md3 上(并且您没有对其进行分区或使用 LVM),是的,设置root=/dev/md3就是您想要的。但您应该检查以下事项:

  1. 重建 initrd 并检查它是否包含 RAID 支持(由于当前根不在 RAID 上,您可能需要通过添加到raid1来诱导它/etc/initramfs-tools/modules)。
  2. 确保已启用从降级阵列 [0] 启动(Ubuntu 默认禁用此功能:BOOT_DEGRADED=true在 中设置/etc/initramfs-tools/conf.d/mdadm
  3. 复制 GRUB 条目并设置倒退GRUB 中的条目,以便它(希望)在 RAID 磁盘无法启动时启动非 RAID 磁盘(set fallback="2"在 添加一行/etc/grub.d/40_custom,其中的数字是从 0 开始数的菜单项编号)。
  4. 也可能使用grub-set-default --once而不是明确设置默认值,以便重新启动机器就足以启动非 RAID 磁盘。

[0]:您的阵列实际上可能并未降级,但您可能还是想要这样做。

答案2

不幸的是,遵循 mgorvens 的建议很可能会导致系统无法启动,/dev 中的设备可能与您当前的启动环境不匹配,除此之外,您还应将 root 设置为 raid 磁盘的 UUID,而不是动态分配的 /dev 条目。幸运的是,grub 会自动为您处理所有这些问题,只需执行以下操作:

sh -c /etc/grub.d/30_os-prober

假设您看到包含 raid 设备的菜单项,然后通过执行以下操作来更新 grub2:

grub2-mkconfig > /boot/grub2/grub.cfg

这将以正确的方式更新您的 grub 启动菜单,无论如何您都不想手动编辑该 grub.cfg 文件,因为它很可能会在 grub 更新时被覆盖。

相关内容