我想在实际应用之前测试一些磁盘救援方法,特别是 ddrescue 从多个磁盘副本恢复坏块的能力,假设每个副本中一个坏块都不错。
由于设备在 Linux 下由文件表示,我认为可以在文件中标记坏块。假设我已经创建了一个参考文件和两个副本,如下所示:
dd if=/dev/random of=/tmp/file bs=1024 count=32768
cp /tmp/file /tmp/file1
cp /tmp/file /tmp/file2
如何模拟 file1 和 file2 中的坏块,就好像它们是设备文件一样?
此处的解决方案、Kamil Maciorowski 的此处以及此处是通往解决方案的好途径,但没有为我的用例提供完整的方法
感谢 Kamil Maciorowski 的建议和他在其他地方的回答,我可以构建以下流程并对其进行测试:
1) 创建一个测试文件并计算它的哈希值以检查未来的恢复
2)用它创建一个设备
3) 借助 devicemapper 创建带有坏块的损坏设备
请注意,在每一行中,第一个数字是位置,第二个数字是大小,因此在最后一行中,总和是文件的大小:6144 + 26624 = 32768,30720 + 2048 = 32768
该行的
6144 26624 linear $loopdev 6144
意思是:将设备 $loopdev 从偏移量 6144(以字节为单位)复制到偏移量 6144(以字节为单位)的文件 1,大小为 26624 字节。4) 检查预期位置的 i/o 错误
在此阶段,回答了 OP 问题。让我们进一步完成测试:
5) 测试 ddrescue:只有好块
6)用第二个副本修复坏块成功
7) 如果需要(不是 100%),尝试用第一个副本挽救坏块
8) 清理