我的根分区有 LVM RAID 1(不是 mdadm RAID 1,而是 LVM2 RAID 1)。我想让我的系统在不使用根 LVM 分区的底层 PV 所在的任何 HDD 的情况下启动。
grub.cfg 中的内核启动行(由 GRUB2 自动生成)如下所示:
linux /kernel-genkernel-x86-3.11.7-hardened-r1-3 root=/dev/mapper/vg-root ro dolvm
当两个磁盘都启用时,它看起来很完美,并且系统是 HDD 容错运行时,也就是说,如果其中一个 HDD 在运行时发生故障,它仍可以正常工作。
但是,如果我尝试在不使用任何 HDD 的情况下启动,则会
Refusing activation of partial LV root. Use --partial to override.
在启动和内核崩溃期间。从一方面来看,这似乎是合理的,因为当其中一个 PV 缺失时,lvm 启动不是正常行为。但是,这对于启动服务器来说是绝对必要的。我能想到的潜在解决方法是在内核启动行中添加一些额外的选项。
您知道当硬盘无法工作时,如何让 LVM RAID 1 适用于根分区吗?
答案1
问题已得到解决LVM v.2.02.1082014年6月。
A退化LV 激活模式已添加到 LVM,这已成为默认激活模式。基本上,如果可能且不会丢失数据,它会激活 LV,即使 LV 不完整(例如没有一条腿的 RAID1 LVM 的情况)。
更详细的描述可以在这里找到:LVM:激活:添加“降级”激活模式。
答案2
我之前没有尝试过这个,而且我不确定这是否是最好的解决方案,但它应该可以让你开始行动...我强烈建议你至少浏览底部的来源以检查我在这里得到的内容... :)
基本上,您需要从救援媒体启动,重新扫描 PV、VG 和 LV。
lvm pvscan
lvm vgscan
lvm lvscan
然后,您应该能够强制激活 VG:
lvm vgchange -ay --partial VolGroup00
完成后,您可以从 VG 中删除丢失的镜像副本:
lvm vgreduce --removemissing --force VolGroup00
一旦完成后,您就可以重新启动进入非镜像配置。
一旦您恢复正常并且修复/更换了坏的驱动器,您将需要将它们重新添加到系统中,然后执行以下操作(假设 /dev/sdb 是发生故障的驱动器,并且您已经使用 fdisk 在其上创建了一个 LVM 分区作为 /dev/sdb1,并且 /dev/sda1 是好的镜像所在的位置):
pvcreate /dev/sdb1
lvm vgextend VolGroup00 /dev/sdb1
然后你需要使用以下命令重新创建每个 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
...
资料来源: