概括: 我在 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
就是您想要的。但您应该检查以下事项:
- 重建 initrd 并检查它是否包含 RAID 支持(由于当前根不在 RAID 上,您可能需要通过添加到
raid1
来诱导它/etc/initramfs-tools/modules
)。 - 确保已启用从降级阵列 [0] 启动(Ubuntu 默认禁用此功能:
BOOT_DEGRADED=true
在 中设置/etc/initramfs-tools/conf.d/mdadm
) - 复制 GRUB 条目并设置倒退GRUB 中的条目,以便它(希望)在 RAID 磁盘无法启动时启动非 RAID 磁盘(
set fallback="2"
在 添加一行/etc/grub.d/40_custom
,其中的数字是从 0 开始数的菜单项编号)。 - 也可能使用
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 更新时被覆盖。