过去几周,我一直在研究这个问题,我认为我已接近完成康复,至少已经尽可能地康复了。长话短说,我只会描述问题,而不会详细介绍每一个微小的技术细节。
假设您有多个 RAID-5 阵列,每个阵列有 8 个磁盘,然后将它们合并为一个 LVM 逻辑卷。然后其中一个阵列中的一个磁盘坏了,重建期间您在该阵列中的第二个磁盘上遇到不可恢复的读取错误。当然,没有备份。
我已经使用 URE 将驱动器中的数据 ddrescue 到新驱动器上,只有 5K 的数据被损坏,全部集中在磁盘的一个很小的区域中。我还假设,一旦我使用 ddrescue 的副本重新组装该 MD 设备,我将用我的数据丢失大小乘以阵列中非奇偶校验驱动器的数量(因此数据丢失 35K),因为使用这些块的条带的奇偶校验计算将不正确。
我已阅读并理解该程序http://smartmontools.sourceforge.net/badblockhowto.html确定哪些文件会因为这种情况而损坏,但我的问题是确定在 md 重建后哪些块会损坏以用作 debugfs 的输入。找出 md 和 lvm 存储元数据的所有偏移量也不是一件有趣的事情,但我认为我可以处理这部分。
我可以将所有坏块编号乘以 7,然后假设每个块后面的 6 个块也是坏的,然后按照上面链接的指南中的 LVM 说明进行操作吗?
需要说明的是 - 我并不关心指南中描述的修复或重新映射坏块,我已经更换了磁盘,将让 md 处理这类事情。我只是想知道 ext4 文件系统上的哪些文件受到了影响。
答案1
您仍在寻求帮助?找到受影响文件的一种方法是将文件系统打包到 /dev/null。tar 会抱怨任何包含错误的文件。例如:
tar cf /dev/null /file/system/to/check
可能会帮到你。