編集済み:データを破棄する場合を除き、これを実行してテストしないでください。
誰かが私が得たものを理解するのを手伝ってもらえますか?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
Q:なぜ特に4096
count
ですか?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
Q:これは正確に何をしますか?
編集済み:データを破棄する場合を除き、これを実行してテストしないでください。
誰かが私が得たものを理解するのを手伝ってもらえますか?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
Q:なぜ特に4096 count
ですか?
dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
Q:これは正確に何をしますか?
回答:
dd if = / dev / zero of = / dev / sda bs = 4096 count = 4096 Q:なぜ4096がカウンターに特に使用されるのですか?
これにより、ドライブの最初の16 MiBがゼロになります。16 MiBは、おそらく「ディスクの開始」構造を無効にするのに十分すぎるほど小さく、それほど長くはかかりません。
dd if = / dev / zero of = / dev / sda bs = 512 count = 4096 seek = $(expr blockdev --getsz / dev / sda-4096)
Q:これは正確に何ですか?
blockdev --getsz
「512バイトセクター」でブロックデバイスのサイズを取得します。したがって、このコマンドは、ドライブの最後の2 MiBをゼロにすることを目的としていたように見えます。
残念ながら、このコマンドは構文的に壊れています。私はコマンドが元々意図されていたことを期待しています
dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)
そして、バックティックは、異なる環境間でコピー/貼り付けを行う人々の行に沿ってどこかで失われました。
古いパーティションテーブル、LVMメタデータ、RAIDメタデータなどは、ドライブを再利用するときに問題を引き起こす可能性があります。ドライブの開始時と終了時にセクションをゼロ化すると、一般にこれらの問題を回避できますが、ドライブ全体をゼロ化するよりもはるかに高速です。
expr blockdev --getsz /dev/sda - 4096
の構文エラーになりexpr
ます。意図したコマンドはだったと思います...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
。またはより良い:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
これにより、最初4096*4096=16MB
と最後が消去されます512*4096=2MB
により、ハードドライブリカバリに役立つ重要な構造が含まれます。このコードは悪意を持って投稿されたと思われます。
count
他のものを明示的に指定すること1
が有用であるという状況に遭遇したことはありません。私がしている私はMBRの背後の痕跡を残していなかったことを確認したい場合は、最初のブロックを消去します...
sda
。sdb
または可能性が高いsdc
。しかし、私は...もちろん間違っている可能性があります
これらのコマンドは、SDAデバイスをゼロで上書きします-最初のコマンドは最初の16MB(4096のブロックサイズと4096ブロックのカウント)を実行し、2番目のコマンドは最後の2MB(4096ブロックで512ブロックのサイズ)をゼロで上書きします。(技術的には消去されません。これは、以下の最初のポイントに関連しています。)
(それは他の回答ですでに言及された部分で、完全を期すためにここに含まれています)
言及する価値のあるもう1つのことは、ブロックサイズに影響があることですが、それらは一般に大量の操作でのみ見られます。コマンドを実行する最も効率的な(最速の)方法は、コマンドのブロックサイズがデバイスのアクセスサイズと一致する場合です。そうしないと、時間が無駄になります。
興味がある場合は、100万個の1ブロックチャンクを持つファイルと100万個のブロックチャンクを持つファイルを作成して、違いを確認してください。
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s
real 0m2.447s
user 0m0.177s
sys 0m2.269s
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s
real 0m0.003s
user 0m0.001s
sys 0m0.002s
[user@host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr 8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr 8 15:51 test2
ご覧のとおり、ブロックサイズは効率に大きな影響を及ぼします。これはおそらくOPのサイドバーですが、それでも関連があると感じています。
TL; DR:ネット上で見つけた任意のコードを実行したり、信頼していない人から提供されたりしないでください。それはあなたの一日を台無しにします。
Don't execute arbitrary code you find on the net
行の+1
他の人は彼らが何をするかを説明しているので、私はそれをスキップします。
ポイントdd
別々持つbs
とcount
引数は、あるbs
書かれているどのくらいのコントロール時。後者のコマンドに非常に大きな値を指定しましたが、数年前(6〜8年だと思います)、ブロックサイズが4096バイトのディスクの作成を開始しました。bs
すると、プログラムで非常に大きなバッファが必要になり、デバイスに書き込むためにカーネルがブロック全体を構築する必要があるため、デバイスのブロックサイズ未満の値を指定すると遅くなります(このような場合おそらく、完全なブロックができるまで書き込みをバッファリングします。他の場合は、すでにディスクにあるものを読み取る必要があるかもしれません。2つのコマンドはに異なる値を使用しているためbs
、2つの異なるサイトでそれらを見つけた可能性があると思うようになります。以前は512バイトのブロックサイズであったハードディスクは、bs=512
bs=4096
bs
はそれよりもはるかに高いです。単一のSATAコマンドで複数のセクターを読み書きできるため、カーネルはI / Oをマージしてから送信します。どこからでもbs=64k
へbs=1024k
(L3キャッシュサイズは、多くの場合、4-8MiBある)は合理的です。よく使用しますbs=128k
。これは、最新のIntel CPUのL2キャッシュサイズの半分です。(dd
2つのmemcpy操作を含みます:read(2)
ソースから(/ dev / zeroであっても)、およびwrite(2)
.IIRCにsdd
は、ゼロを書き込むオプションがあり、CPU時間を少し節約します。ディスク以外)。
iostat -x 4
または何かの出力を見て、rrqm / s(1秒あたりにマージされた読み取り要求)およびwrqm / s列に注意してください。
警告: dd if=/dev/zero of=/dev/
法医学的にデータをコピーする前にドライブまたはデバイスをクリーニングするために使用されます。ドライブまたはデバイスは、フォレンジック調査中のシステムから情報をコピーして相互汚染を軽減する前に、常にサニタイズする必要があります。したがって、それは悪いコマンドではありません。エンドユーザーはそれが何に使用されるかを理解する必要があります。そうしないと、データを破壊します。これがあなたが望むものである場合、ゼロ書き込み操作を確認してくださいdd if=/dev/sda | hexdump -C | head
。
出典: Darren Hayes博士によるコンピューターフォレンジック調査の実践ガイド