我想测试一个分区创建软件,例如parted.
我发现一个旧的 USB 记忆棒,每当我尝试读取它时,它就会使程序崩溃。为了保留这个测试用例,我需要尽可能准确地复制 USB 记忆棒,保留 IO 错误。
我知道在读取该文件的某些字节时可能不可能让我的 HDD 抛出 IO 错误,但也许它可以通过某种程序来模拟,该程序将整个 U 盘内容硬编码并记住何时抛出 IO 错误?
我正在使用 Arch Linux,并且更喜欢可以适应它的解决方案(可能通过某种虚拟机或机器模拟器)。
如需复制,请使用ddrescue、safecopy或dd_rescue。它们都保留失败区域的日志,并自动重试,直到可以取出数据。
一般用法是:
\n\nddrescue:(不要与旧的 dd_rescue 混淆)
\n\nddrescue /dev/sdc3 sdc3.img sdc3.map\nRun Code Online (Sandbox Code Playgroud)\n\n如果需要,请重复--retrim或`--try-again:
ddrescue --try-again /dev/sdc3 sdc3.img sdc3.map\nRun Code Online (Sandbox Code Playgroud)\n\n不要忘记指定要在其中记录坏区域的映射文件。
安全副本:
\n\nsafecopy --stage1 /dev/sdc3 sdc3.img\nsafecopy --stage2 /dev/sdc3 sdc3.img\nsafecopy --stage3 /dev/sdc3 sdc3.img\nRun Code Online (Sandbox Code Playgroud)\n\n第 3 阶段之后,您将获得一个stage3.badblocks列出各个坏扇区的文件。
如果您想重试,请使用:
\n\nmv stage3.badblocks stage2.badblocks\nsafecopy --stage3 /dev/sdc3 sdc3.img\nRun Code Online (Sandbox Code Playgroud)dd_rescue:(不要与功能更强大的 ddrescue 混淆)
\n\ndd_rescue -o sdc3.badblocks /dev/sd3 sdc3.img\nRun Code Online (Sandbox Code Playgroud)\n\n(我不知道这个工具是否支持第二次调用恢复/重试,但至少它确实输出了坏块日志。)
这些程序强调尽可能快地获取数据,并保留缓慢的恢复以供以后使用。因此,如果“阶段 1”仅仅因为单个坏块 \xe2\x80\x93 而跳过整个兆字节,请不要感到惊讶,它将返回到阶段 2。
\n\n要模拟坏磁盘,请获取刚刚获得的坏块日志,并将其应用到本文中:
\n\n\n\n\n用于
\n\ndmsetup创建由“错误”目标支持的设备。它将出现在/dev/mapper/<name>.设备映射器演示文稿 (PDF)第 7 页正是您所寻找的内容:
\n\nRun Code Online (Sandbox Code Playgroud)\n\ndmsetup create bad_disk << EOF\n 0 8 linear /dev/sdb1 0\n 8 1 error\n 9 204791 linear /dev/sdb1 9\nEOF\n或者省略 的
\n\nsdb1部分并将“错误”目标作为块 0 - 8(而不是sdb1)的设备来制作纯错误磁盘。另请参阅“RHEL 5\n 逻辑卷管理器管理”中的设备映射器附录。
\n\n\xe2\x80\x94 彼得·科德斯,/sf/ask/130948751/
\n
(将 badblocks 日志或 ddrescue 映射文件转换为 dmsetup 表语法留给读者作为练习......)
\n| 归档时间: |
|
| 查看次数: |
3967 次 |
| 最近记录: |