我首先运行了这个命令:
ddrescue --force /dev/sda /dev/null HGST_RMA.map
我只是想要一个用于消隐的地图文件(因此/dev/null
)。这是.map
我在最后中断运行之前的文件的样子(Ctrl+ C'd it):
然后我决定清空磁盘(/dev/zero
):
$ sudo ddrescue --force --fill-mode=+ /dev/zero /dev/sda HGST_RMA.map
GNU ddrescue 1.21
Press Ctrl-C to interrupt
Initial status (read from mapfile)
filled size: 266742 MB, filled areas: 43
remaining size: 233363 MB, remaining areas: 151
Current status
filled size: 500106 MB, filled areas: 194, current rate: 55115 kB/s
remain size: 0 B, remain areas: 0, average rate: 71200 kB/s
current pos: 500107 MB, run time: 54m 37s
Finished
然后我跑了:
$ fdisk -l /dev/sda
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbf7dbd9f
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 62916607 62914560 30G 83 Linux
/dev/sda2 62916608 67110911 4194304 2G 82 Linux swap / Solaris
/dev/sda3 67110912 976773167 909662256 433.8G 83 Linux
这是我的地图文件的初始部分:
# Mapfile. Created by GNU ddrescue version 1.21
# Command line: ddrescue --force --fill-mode=+ /dev/zero /dev/sda HGST_RMA.map
# Start time: 2017-12-28 17:37:14
# Current time: 2017-12-28 18:31:57
# Finished
# current_pos current_status
0x7470BFD000 +
# pos size status
0x00000000 0x608336000 +
0x608336000 0x00001000 -
0x608337000 0x380B8DD000 +
0x3E13C14000 0x00001000 -
0x3E13C15000 0x00224000 +
根据我自己的估计,分区表应该被清除,因为
0x00000000 0x608336000 +
为什么这还没有发生并且什么已经被清空了?
答案1
什么已被清空?
线索就在这里:
$ sudo ddrescue --force --fill-mode=+ /dev/zero /dev/sda HGST_RMA.map … Initial status (read from mapfile) filled size: 266742 MB, filled areas: 43 remaining size: 233363 MB, remaining areas: 151 …
由于某种原因,ddrescue
决定从磁盘中间继续,好像前半部分已经填满。这样分区表就保持完整。
为什么 […]?
ddrescue
坦白说,我说不出来。我对1.19 的测试表明current_status
,当地图文件内部的F
意思是“填充指定块”时,就会发生这种情况。这是在您中断填充操作后的情况。继续似乎是合理的,我预料到了这一点。
但根据您的ddrescueview
屏幕截图,current_status
显示为*
“修剪未修剪的块”。在这种状态下,我无法复制该问题,我的系统会ddrescue
按应有的方式填充所有健康块。再次强调,这是合理的,也是意料之中的。
要么你遇到了错误,要么你修改了文件(但忘记在这里提及),从而误导了别人ddrescue
。例如,如果你不小心运行了这个:
sudo ddrescue --force --fill-mode=+ /dev/zero /dev/null HGST_RMA.map
并意识到自己的错误(“等等!为什么写得这么快?”),用Ctrl+中途中断C,那么您的 mapfile 将包含F
。current_status
接下来,您运行正确的命令,它会从 的中间“继续” /dev/sda
。