克隆磁盘而不丢失 IO 错误信息

sty*_*fly 4 io disk-cloning

我想测试一个分区创建软件,例如parted.

我发现一个旧的 USB 记忆棒,每当我尝试读取它时,它就会使程序崩溃。为了保留这个测试用例,我需要尽可能准确地复制 USB 记忆棒,保留 IO 错误

我知道在读取该文件的某些字节时可能不可能让我的 HDD 抛出 IO 错误,但也许它可以通过某种程序来模拟,该程序将整个 U 盘内容硬编码并记住何时抛出 IO 错误?

我正在使用 Arch Linux,并且更喜欢可以适应它的解决方案(可能通过某种虚拟机或机器模拟器)。

use*_*686 6

如需复制,请使用ddrescuesafecopydd_rescue。它们都保留失败区域的日志,并自动重试,直到可以取出数据。

\n\n

一般用法是:

\n\n
    \n
  • ddrescue:(不要与旧的 dd_rescue 混淆)

    \n\n
    ddrescue /dev/sdc3 sdc3.img sdc3.map\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    如果需要,请重复--retrim或`--try-again:

    \n\n
    ddrescue --try-again /dev/sdc3 sdc3.img sdc3.map\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    不要忘记指定要在其中记录坏区域的映射文件。

  • \n
  • 安全副本:

    \n\n
    safecopy --stage1 /dev/sdc3 sdc3.img\nsafecopy --stage2 /dev/sdc3 sdc3.img\nsafecopy --stage3 /dev/sdc3 sdc3.img\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    第 3 阶段之后,您将获得一个stage3.badblocks列出各个坏扇区的文件。

    \n\n

    如果您想重试,请使用:

    \n\n
    mv stage3.badblocks stage2.badblocks\nsafecopy --stage3 /dev/sdc3 sdc3.img\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • dd_rescue:(不要与功能更强大的 ddrescue 混淆)

    \n\n
    dd_rescue -o sdc3.badblocks /dev/sd3 sdc3.img\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    (我不知道这个工具是否支持第二次调用恢复/重试,但至少它确实输出了坏块日志。)

  • \n
\n\n

这些程序强调尽可能快地获取数据,并保留缓慢的恢复以供以后使用。因此,如果“阶段 1”仅仅因为单个坏块 \xe2\x80\x93 而跳过整个兆字节,请不要感到惊讶,它将返回到阶段 2。

\n\n

要模拟坏磁盘,请获取刚刚获得的坏块日志,并将其应用到本文中:

\n\n
\n

用于dmsetup创建由“错误”目标支持的设备。它将出现在/dev/mapper/<name>.

\n\n

设备映射器演示文稿 (PDF)第 7 页正是您所寻找的内容:

\n\n
dmsetup create bad_disk << EOF\n  0 8       linear /dev/sdb1 0\n  8 1       error\n  9 204791 linear /dev/sdb1 9\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者省略 的sdb1部分并将“错误”目标作为块 0 - 8(而不是sdb1)的设备来制作纯错误磁盘。

\n\n

另请参阅“RHEL 5\n 逻辑卷管理器管理”中的设备映射器附录。

\n\n

\xe2\x80\x94 彼得·科德斯,/sf/ask/130948751/

\n
\n\n

(将 badblocks 日志或 ddrescue 映射文件转换为 dmsetup 表语法留给读者作为练习......)

\n