我如何使用 尝试从磁盘末尾读取坏扇区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
初步说明:您的版本ddrescue
是1.16
,它是旧的,发布于 2012-06-11。此答案基于 版本的文档1.24
。
您可以使用以下选项来ddrescue
读取输入设备或文件的特定片段:
-i bytes
--input-position=bytes
救援域的起始位置(infile
以字节为单位)。默认为0
。[…]
-s bytes
--size=bytes
救援域的最大大小(以字节为单位)。它限制要复制的输入数据量。[…]
在您的例子中,您应该指定-i bytes
,因此您关心的结构位于bytes
和磁盘末尾之间。注意ddrescue
接受例如200G
或200Gi
(并且这些是不同的位置)。
作为选项(位置、大小、比率等)参数给出的数字可以表示为十进制、十六进制或八进制值(使用与 C++ 中的整数常量相同的语法),后面可以跟乘数和
B
“字节”的可选项。[…]
查看文档,有一个可能的单位乘数表。根据文档的另一部分映射文件中的十六进制 ( 0x…
) 数字表示位置和大小(以字节为单位),因此您可以以相同的形式使用它们。例如,仅覆盖映射文件的这一部分
0x1DF9F200 0x00001E00 -
该命令应该使用-i 0x1DF9F200 -s 0x00001E00
。
您可以使用-i
和/或迄今为止创建的-s
映射文件ddrescue
,现有信息不会丢失。同样,您可以稍后运行该工具而不使用这些选项,其范围(救援域)将再次是整个设备。