如何使用 ddrescue 尝试从磁盘末尾读取坏扇区?

如何使用 ddrescue 尝试从磁盘末尾读取坏扇区?

我如何使用 尝试从磁盘末尾读取坏扇区ddrescue?我有动态卷,并且与 MBR 不同,LDR 保存在磁盘末尾。

我记得我尝试过,--reverse但它从最后尝试的位置改变了方向(基本上回到起点,从发现的第一个坏扇区),而不是从磁盘末尾开始。

这是输出head -n 10 mapfile

# Rescue Logfile. Created by GNU ddrescue version 1.16
# Command line: ddrescue -d -f -r3 /dev/sdb /dev/sda rescue.log
# current_pos  current_status
0x4E39922200   /
# pos       size        status
0x00000000  0x1DF9F200  +
0x1DF9F200  0x00001E00  -
0x1DFA1000  0x45EE0200  +
0x63E81200  0x00000E00  -
0x63E82000  0x00000200  +

答案1

初步说明:您的版本ddrescue1.16,它是旧的,发布于 2012-06-11。此答案基于 版本的文档1.24


您可以使用以下选项来ddrescue读取输入设备或文件的特定片段:

-i bytes
--input-position=bytes
救援域的起始位置(infile以字节为单位)。默认为0。[…]

-s bytes
--size=bytes
救援域的最大大小(以字节为单位)。它限制要复制的输入数据量。[…]

来源

在您的例子中,您应该指定-i bytes,因此您关心的结构位于bytes和磁盘末尾之间。注意ddrescue接受例如200G200Gi(并且这些是不同的位置)。

作为选项(位置、大小、比率等)参数给出的数字可以表示为十进制、十六进制或八进制值(使用与 C++ 中的整数常量相同的语法),后面可以跟乘数和B“字节”的可选项。[…]

查看文档,有一个可能的单位乘数表。根据文档的另一部分映射文件中的十六进制 ( 0x…) 数字表示位置和大小(以字节为单位),因此您可以以相同的形式使用它们。例如,仅覆盖映射文件的这一部分

0x1DF9F200  0x00001E00  -

该命令应该使用-i 0x1DF9F200 -s 0x00001E00

您可以使用-i和/或迄今为止创建的-s映射文件ddrescue,现有信息不会丢失。同样,您可以稍后运行该工具而不使用这些选项,其范围(救援域)将再次是整个设备。

相关内容