Linux软件RAID1:如何在(物理)删除/ dev / sda后启动? (LVM,mdadm,Grub2)

用Debian 6.0 / squeeze设置的服务器。 在挤压安装过程中,我将两个500GB SATA磁盘(/ dev / sda和/ dev / sdb)configuration为RAID1(使用mdadmpipe理)。 RAID保留500 GB的LVM卷组(vg0)。 在卷组中,有一个逻辑卷(lv0)。 vg0-lv0使用extfs3格式化,并作为根分区挂载(没有专用/启动分区)。 系统使用GRUB2启动。

在正常使用情况下,系统启动正常。

另外,当我尝试并closures第二个SATA驱动器(/ dev / sdb)后,系统没有问题,重新连接驱动器后,我能够 – 将/ dev / sdb1添加到RAIDarrays。

但是:删除第一个SATA驱动器(/ dev / sda)之后,系统将不再启动! 一个GRUB欢迎消息显示一秒钟,然后系统重新启动。

我试图在/ dev / sdb(“grub-install / dev / sdb”)上手动安装GRUB2,但这并没有帮助。

当第一个磁盘被移除时,显然挤压不能设置GRUB2从第二个磁盘启动,这似乎是运行这种软件RAID1时相当重要的特性,不是吗?

目前,我失去了这是GRUB2,LVM还是RAID设置的问题。 任何提示?

您需要将GRUB安装到两个驱动器的MBR中,并且您需要以GRUB将每个磁盘视为系统中的第一个磁盘的方式执行此操作。

GRUB使用自己的枚举来获取Linux内核提供的磁盘。 您可以使用grub shell中的“设备”行来更改它认为是第一个磁盘(hd0)的设备,如下所示:

 device (hd0) /dev/sdb 

这告诉grub,对于后面的所有命令,将/ dev / sdb视为磁盘hd0。 从这里你可以手动完成安装:

 device (hd0) /dev/sdb root (hd0,0) setup (hd0) 

这将在您认为是hd0的磁盘的第一个分区上设置GRUB,您刚刚将其设置为/ dev / sdb。

我对/ dev / sda和/ dev / sdb都这样做,只是为了确保。

编辑补充说:我总是发现Gentoo Wiki方便,直到我经常做到这一点足以将其提交到内存。

你有没有考虑安装第三个驱动器作为启动驱动器? 我看到raid 1 lvm setup(在CentOS上)无法启动第二个驱动器。 我认为问题源于grub无法处理本地lvm分区,虽然我不完全确定。

无论如何,这是我的答案:安装第三个小驱动器仅用于引导系统的目的。 哎呀,我敢打赌,你甚至可以变聪明,用一些小闪光灯或SSD设备。

当被告知安装到MD设备时,Grub应该能够识别RAID1设置并安装到所有从属磁盘。

事实上,它应该工作。 这似乎是grub-install如何与GRUB 1.99和2.02一起使用。

以任何方式sda + sdb RAID1持有您的启动分区,核心很可能被UUID引用。 检查我的链接的问题 ,看看是否是。 换句话说,如果grub-install --debug显示--prefix=(md0)/boot/grub/类似的东西,如果先find另一个RAIDarrays,这可能会导致grub rescue>提示符,在这里观察到的崩溃。 如果它使用--prefix=(mduuid/ ,它应该find它。

所以如果你grub-install /dev/sda; grub-install /dev/sdb grub-install /dev/sda; grub-install /dev/sdb ,如果你删除了其中一个驱动器,那么不要紧:只要BIOS能够从其中一个驱动器加载MBR,它就会通过searchfindRAID UUID和LV。 但是,MBR不是镜像的。 因此请将安装程序依次指向所有组件。

所有这一切都在理论上….


我对这个古老的问题感兴趣的是Welcome to GRUB! 横幅显示,然后服务器重新启动,因为我有类似的症状 ,可能是由BIOS无法读取4K /扇区驱动器。 我不知道提问者是否find了解决scheme。

这里的逻辑是在kernel.img中find欢迎消息,所以核心的至less一部分必须加载。 然而,根据(可能过时的)手册 ,第二个扇区读取使用一个块列表将所有其余的图像加载到内存中。 如果阻止列表被损坏(或者由于扇区大小或其他原因而导致LBA偏移计算错误),则可能会发生崩溃,重新启动或挂起。