web-dev-qa-db-ja.com

gddrescue --fill-mode = +、マップファイル0x00000000 0x608336000 +は、パーティションテーブルをそのまま残しましたか?

私は最初にこのコマンドを実行しました:

ddrescue --force /dev/sda /dev/null HGST_RMA.map

ブランキング用のマップファイルが欲しかったのです(したがって、/dev/null)。そしてこれが私の.mapファイルは、最後に実行を中断する前のように見えます(Ctrl+C'd it):

ddrescueview

それから私はディスクを空にすることにしました(/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  +

なぜそれが起こらなかったのか、そして何が空白にされたのか?

2
zenerguy

何が空白になっていますか?

手がかりはここにあります:

$ 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の場合、マップファイルにはFcurrent_statusとして含まれます。次に、適切なコマンドを実行すると、/dev/sdaの途中から「続行」されます。

1