如何引导GRUB2,使其在不同的驱动器上安装“root”(无kvm开关的远程服务器)

简介:我在一个RAIDarrays上创build了一个根文件系统的副本(其上有一个磁盘),然后试图让系统从新复制的驱动器启动。

背景:

  • 2个相同大小的服务器(sda,sdb)
  • sdb不被使用
  • 我正在尝试将整个事情转换为raid1镜像
  • 当前活动分区:
    • sda1 – 启动
    • sda2 – 交换
    • sda3 – 根(挂载到“/”)

我不知道是否有可能做一个完整的raid1系统,可以启动任一驱动器,因为我没有kvm访问(我只能告诉他们通过troubleticket帮助我出了堵塞)

完成到目前为止:

  • 在sdb上创build分区以匹配sda
  • 创build新的raid1数组(1盘)
  • / dev / md3由1个磁盘组成:/ dev / sdb3
  • mount / 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 } 

所以,请注意“ root = / dev / sda3 ”部分。 我可以用“root = / dev / md3”replace它,然后重启?

假设文件系统直接位于/ dev / md3上(而不是分区或使用LVM),是的,设置root=/dev/md3就是你想要的。 你应该检查的事情:

  1. 重buildinitrd并检查它是否包含RAID支持(您可能需要哄骗它,因为当前root不在RAID上,通过将raid1添加到/etc/initramfs-tools/modules )。
  2. 确保已启用从降级arrays[0]启动(Ubuntu默认情况下禁用此function:在/etc/initramfs-tools/conf.d/mdadm设置BOOT_DEGRADED=true
  3. 复制GRUB条目并在GRUB中设置回退条目,以便在RAID磁盘无法引导时(希望)启动非RAID磁盘(将set fallback="2"行添加到/etc/grub.d/40_custom ,其中数字是从0开始计数的menuentry的数量)。
  4. 也可以使用grub-set-default --once而不是明确地设置默认值,以便重新引导计算机足以启动非RAID磁盘。

[0]:你的数组实际上可能不会被降级,但是你可能想要这个。

不幸的是,下面的mgorvensbuild议很可能导致无法启动的系统,/ dev中的设备可能与您当前的启动环境不匹配,您应该在其上设置根目录为您的RAID磁盘的UUID,而不是dynamic分配的/ dev条目。 幸运的是,虽然grub会自动处理所有这些,只需要这样做:

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

假设你看到一个包含你的RAID设备的菜单条目,那么通过执行以下步骤更新grub2:

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

这将以正确的方式更新你的grub启动菜单,你不想手动编辑grub.cfg文件,因为当grub更新时它很可能被覆盖。