我有一个带有 3 个 pv 的 VG。该 VG 有一个使用所有三个 PV 的 LV。然后一个 PV(hdd)坏了。我想尝试恢复我能恢复的一切。所以我需要做的第一件事就是从 LV/VG 中删除丢失的 PV。按照我在谷歌上找到的说明,我使用 vgreduce 删除了那个 PV。但是,据我所知,这也删除了 LV。我现在正尝试恢复原始配置,即 vgreduce 之前的配置,以改用 vgchange。我使用的是 vgcfgrestore -f ,其中存档文件是在 vgreduce 之前创建的。但我一直收到“无法恢复带有 1 个标记为丢失的 PV 的卷组 VGR”。
LV 可以恢复吗?如果可以,如何恢复?
非常感谢您的帮助。
短暂性脑缺血发作
肯
答案1
Linux LVM 默认不会删除带有 LV 的 PV。它需要所有扩展区才能使 LV 具有良好的完整性。 vgreduce --force
虽然可能会删除 LV,但它会禁用多项安全检查。非常在使用选项时要具体而谨慎。记录您的终端会话。
规划恢复。查找此数据的任何现有备份。估计它对组织的价值,以及重新创建需要多长时间。如果没有备份,请考虑从专业数据恢复服务处获取估算。
尝试将故障驱动器镜像到大小相同的好驱动器上。如果自己做,可以使用容错工具,例如dd_rescue
。请注意,在某些情况下,如果介质尚未损坏,继续使用可能会进一步损坏介质。数据恢复服务可能能够对其进行手术,以尝试恢复数据。
如果您设法对其进行映像,则新磁盘将具有旧 PV 的标识。重新添加新设备。 vgextend --restoremissing $PV
当您减少 LV 时,这将是再次尝试的时候vgcfgrestore --file
,以回到您这样做之前的状态。
如果所有尝试都失败,并且您接受数据丢失,请考虑用新的空驱动器替换发生故障的 PV。这几乎肯定会损坏您的数据。损坏的具体表现取决于文件系统等。但这是值得尝试的。man vgcfgrestore
描述了该过程:
要替换 PV,
vgdisplay --partial --verbose
将显示不再存在的 PV 的 UUID 和大小。如果 VG 中的 PV 丢失,并且您希望用另一个大小相同的 PV 替换,请使用pvcreate --restorefile filename --uuid uuid
(加上适当的其他参数)使用与丢失的 PV 相同的 UUID 对其进行初始化。对 VG 中所有其他丢失的 PV 重复此操作。然后使用vgcfgrestore --file filename
恢复 VG 的元数据。
在没有丢失 PV 的降级较少的情况下,pvmove
将在 PV 之间移动范围,并且可用于存储迁移。
今后,要使卷组在硬盘丢失后仍能继续使用,请考虑添加冗余。要么在 LVM 下使用来自阵列 LUN 的 PV,要么在 LVM 层。请参阅手册页mdadm
和lvmraid
软件解决方案。