我目前正在处理由 RAID-5 设备备份的 Linux LVM 卷组上的多个磁盘故障md
。一个磁盘已完全取出,另一个磁盘显示有限数量的损坏扇区,这似乎是由于电源故障造成的。
问题是,一旦发生 I/O 错误,md
阵列就会关闭,因为它没有足够的设备来运行。如果md
只涉及一个,我可以mdadm --stop
关闭阵列,然后重新创建它以使所有设备再次处于活动状态。
不幸的是,该阵列是 LVM 卷组中的 PV,我似乎无法让内核释放它。vgchange -an
似乎没有做任何事情,只是喷出几个 I/O 错误。
我显然错过了一些东西,但如何以—插入最喜爱的神—我如何让 LVM 释放底层 PV没有重新启动服务器?
答案1
我想说的是,您的情况相当糟糕。如果您只是迫切希望以某种方式恢复部分数据,而不太关心 LVM(根据 的 IO 错误判断,其元数据可能已损坏vgchange -an
),我建议您使用低级别。请记住,LVM 只是内核设备映射器的包装器,因此您可以使用它dmsetup
来操作逻辑卷。dmsetup table
将为您提供当前活动逻辑磁盘的列表,因此最好备份其输出,以防您以后甚至无法访问 LVM。然后,您可以尝试停止要停止的设备,dmsetup remove
甚至dmsetup remove_all
。但请确保先卸载它们。
当然,将尽可能多的数据复制到安全的地方。
答案2
当vgchange -an
似乎没有做任何事情时(在 Ubuntu 系统上),阅读此错误报告后考虑将责任归咎于 udev 规则(我在 Google 中搜索“ dmsetup remove lvm vgchange
”):
https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081
解决方法如下(感谢 Martin):
sudo umount /mnt # asume the drive in question is mounted under /mnt sudo service udev stop sudo lvchange -a n <LV-name> sudo cryptsetup luksClose <LUKS-devicename> sudo service udev start