数日前、750 GBのハードディスクを販売するためにワイプすることにしたのでUbuntu
、ライブDVDから起動し、でプロセスを開始しましたsudo dd if=/dev/zero of=/dev/sda
。私dd
は夜中に走り続けた。朝に戻ったとき、プロセスのある時点でUbuntu
フリーズしたことに気づきました。プロセスのどの時点でフリーズが発生したかを特定できません。フリーズが発生するたびに、スクリーンセーバーがオンのときに発生したため、bash
の出力を確認できませんでした。
質問:ddを最初からやり直すのを避けるにはどうすればよいですか?
私は自分で解決策を考え出しました:
素早い回答
あなたのドライブが/dev/sdX
:
dd if=/dev/zero | cmp - /dev/sdX
デバイスの最初のゼロ以外のバイトを見つけるために実行します。私の場合はバイトでした。742300476649
<device_first_non_zero_block>=floor(<device_first_non_zero_byte>/<device_block_size>)+1
ます::ターミナルでの<device_block_size>
実行fdisk -l /dev/sdX
を確認できます:私の場合はブロックでした1449805619
dd
、そこから再び:dd if=/dev/zero bs=<device_block_size> skip=<device_first_non_zero_block>-1
:私の場合にはコマンドがいましたdd if=/dev/zero of=/dev/sda bs=512 skip=1449805618
長い答え
与えるcmp
-
ようにFILE1
読み取るためにそれを強制的FILE1
にstdin
ゼロの定数ストリームが行いますので、cmp
各バイトと比較FILE2
されるまでゼロに対してはEOF
(もしあれば)を報告し、最初の非ゼロバイト:ドライブであると仮定します/dev/sdX
。
dd if=/dev/zero | cmp - /dev/sdX
デバイスの最初の非ゼロブロックは、最初の非ゼロバイトを含むブロックです。
<device_first_non_zero_block>=floor(<device_first_non_zero_byte>/<device_block_size>)+1
したがって、dd
そこから再開するには、最初の<device_first_non_zero_block>-1
ブロックをスキップします。
dd if=/dev/zero of=/dev/sdX bs=<device_block_size> skip=<device_first_non_zero_block>-1
テスト
ワイプされたハードドライブをシミュレートするために、ゼロのみを含む512KBファイルを作成します。
$ dd if=/dev/zero of=hdd1 bs=512 count=1000
データを含むハードドライブをシミュレートするために、ランダムバイトのみを含む512KBファイルを作成します。
$ dd if=/dev/urandom of=hdd2 bs=512 count=1000
部分的にワイプされたハードドライブをシミュレートするために2つのファイルをマージします。
$ cat hdd1 hdd2 > hdd3
テストドライブでのコマンドの出力:
$ dd if=/dev/zero | cmp - hdd1
cmp: EOF on hdd1
# cmp reached EOF on hdd1, hdd1 contains only zeros
$ dd if=/dev/zero | cmp - hdd2
- hdd2 differ: byte 1, line 1
# cmp reported byte 1 to be not zero, hdd2 doesn't contain any leading zero
$ dd if=/dev/zero | cmp - hdd3
- hdd3 differ: byte 512001, line 1
# cmp reported byte 512001 to be not zero, hdd3 contains leading zeros up to byte 512000
この場合:
<device_first_non_zero_block>=floor(512001/512)+1=floor(1000,001953125)+1=1000+1=1001
だから、dd
そこからやり直すには:
この場合、テストドライブであるファイル
count
が必要であり<device_total_number_of_blocks>-(<device_first_non_zero_block>-1)
、テストドライブのサイズを超えないように設定されていることに注意してください。ただし、これは通常のドライブには適用されません。
dd if=/dev/zero of=hdd3 bs=512 seek=1000 count=1000
コマンドの出力hdd3
:
$ dd if=/dev/zero of=test2 bs=512 seek=1000 count=1000
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 0,00190399 s, 269 MB/s
手順が成功したかどうかの確認:
$ dd if=/dev/zero | cmp - hdd3
cmp: EOF on hdd3
ビンゴ!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加