私は最初にこのコマンドを実行しました:
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 +
なぜそれが起こらなかったのか、そして何が空白にされたのか?
何が空白になっていますか?
手がかりはここにあります:
$ 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の場合、マップファイルにはF
がcurrent_status
として含まれます。次に、適切なコマンドを実行すると、/dev/sda
の途中から「続行」されます。