当任何基础PV缺失时,系统不会从根LVM RAID1分区引导

我的根分区有LVM RAID 1(不是mdadm RAID 1,但是正好是LVM2 RAID 1)。 我想让我的系统启动,而没有根LVM分区的底层PV所在的硬盘。

grub.cfg中的内核启动行(由GRUB2自动生成)如下所示:

linux /kernel-genkernel-x86-3.11.7-hardened-r1-3 root=/dev/mapper/vg-root ro dolvm 

它看起来完全与两个磁盘启用,并且系统是HDD容错运行时间,即它可以正常工作,如果两个硬盘在运行期间停机。

但是,如果我尝试启动没有HDD之一,我越来越

 Refusing activation of partial LV root. Use --partial to override. 

在启动和内核恐慌。 从一方面来看似乎是合理的,因为当一个PV不在时,启动lvm不是一种正常的行为。 但是,为了启动服务器,这是绝对必要的。 我能想到的潜在的解决方法是添加一些额外的选项内核发射线。

您知道如何使硬盘驱动器无法工作时,使LVM RAID 1可用于根分区吗?

我以前没有尝试过,我不确定这是最好的解决scheme,但它应该会让你起来,去…我强烈build议你至less浏览底部的来源,以便理智检查我是什么已经到了… 🙂

基本上,您需要启动应急媒体,重新扫描PV,VG和LV。

 lvm pvscan lvm vgscan lvm lvscan 

那么,你应该能够强制VG激活:

 lvm vgchange -ay --partial VolGroup00 

完成之后,您可以从VG中删除丢失的镜像副本:

 lvm vgreduce --removemissing --force VolGroup00 

一旦完成,你应该很好地重新启动到非镜像configuration。

一旦你恢复和快乐,你已经修复/更换坏驱动器,你需要把它们添加回系统,然后做下面的事情(假设/ dev / sdb是驱动器发生故障,并使用fdisk作为/ dev / sdb1创build了一个LVM分区,并且/ dev / sda1是好镜像所在的位置):

 pvcreate /dev/sdb1 lvm vgextend VolGroup00 /dev/sdb1 

然后,你需要重新创build每个LV镜像:

 lvm lvconvert -m 1 /dev/VolGroup00/usr /dev/sda1 /dev/sdb1 lvm lvconvert -m 1 /dev/VolGroup00/var /dev/sda1 /dev/sdb1 lvm lvconvert -m 1 /dev/VolGroup00/root /dev/sda1 /dev/sdb1 ... 

资料来源:

2014年6月, LVM 2.02.108版本解决了这个问题。

LVM已经添加了一个降级的 LV激活模式,LVM成为默认的激活模式。 基本上,如果在没有数据丢失的情况下可以激活LV,但是即使LV不完整(就像RAID1 LVM没有一条腿的情况)。

更详细的描述可以在这里find: LVM:激活:添加“降级”激活模式 。