`dd if = / dev / zero of = / dev / sda`は何をしますか


19

編集済み:データを破棄する場合を除き、これを実行してテストしないでください。

誰かが私が得たものを理解するのを手伝ってもらえますか?

  1. dd if=/dev/zero of=/dev/sda bs=4096 count=4096

    Q:なぜ特に4096 countですか?

  2. dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

    Q:これは正確に何をしますか?


4
どこでこの悪意のあるコード見つけた
Suiciドーガ

10
これは悪意のあるコードではありません。
マイケルハンプトン

12
@MichaelHampton:s / malicious / destructive /破壊的なコードを投稿すること自体は悪意はありませんが、データを破壊する可能性があるという明確な警告なしに投稿することです。
ベンフォークト

1
インターネット上の誰かがこのようなコマンドを実行するように指示したとき、DDを「ディスク駆逐艦」と考えるのが最善です。
ボビーSacamano 16

3
実際DDは、データ記述を意味
Suiciドーガ

回答:


43

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メタデータなどは、ドライブを再利用するときに問題を引き起こす可能性があります。ドライブの開始時と終了時にセクションをゼロ化すると、一般にこれらの問題を回避できますが、ドライブ全体をゼロ化するよりもはるかに高速です。


4
ありがとうございました。この答えは私が探していたものに最も合っているようです。2つのコマンドは、delpartの後に使用されます。それらは、クリーンな再利用のためにディスクを拭くために使用されます。
JH

expr blockdev --getsz /dev/sda - 4096の構文エラーになりexprます。意図したコマンドはだったと思います...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"。またはより良い:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
ステファンシャゼラス

1
私の推測では、コマンドに元々バックティックがあり、それらはある時点で食べられたでしょう。
プラグウォッシュ

16

これにより、最初4096*4096=16MBと最後が消去されます512*4096=2MBにより、ハードドライブリカバリに役立つ重要な構造が含まれます。このコードは悪意を持って投稿されたと思われます。

count他のものを明示的に指定すること1が有用であるという状況に遭遇したことはありません。私がしている私はMBRの背後の痕跡を残していなかったことを確認したい場合は、最初のブロックを消去します...


8
これは必ずしも悪意のあるものではありません。現在のラベルが破損している場合、新しいラベルの書き込みを拒否する不正なフォーマットプログラムがいくつかあります。
Shelvacu

1
@shelvacuドライブがこのように操作されたら驚いた sdasdbまたは可能性が高いsdc。しかし、私は...もちろん間違っている可能性があります
よ」

7
これは悪意のあるものではありません。ディスクの先頭でGPTを消去し、ディスクの末尾でGPTをバックアップします。
マイケルハンプトン

2
@shelvacu:それは破壊的です。破壊的なコマンドが、それが何をするのかの説明なしに投稿された場​​合、それは悪意があります。彼らが説明を伴っていた場合、なぜOPはここでそれについて尋ねているのですか?
ベンフォークト

2
それでは、その目的を知らずに、どこで見つかったコードをコピー/貼り付けするのが完璧な考えですか?地下鉄で見つけた奇妙なデバイスを揺さぶらないので、悪意はありません。
マグノC

4

これらのコマンドは、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:ネット上で見つけた任意のコードを実行したり、信頼していない人から提供されたりしないでください。それはあなたの一日を台無しにします。


7
Don't execute arbitrary code you find on the net行の+1
セルギーコロディアズニー

7
「このプロセスは非常に退屈で、かつ/または高価であり、非常に特殊な機器を必要とすることに注意してください。」この誤った情報の拡散を止めてください。これが理論的にさえ可能だった最後の時は、何十年も前の技術で、多くの世代が今では時代遅れです。誰もにも賞金、例えばと公共の課題に応じて、最近のドライブに回復のこの種を示さなかったhostjury.com/blog/view/195/...
アンドリューメディコ

そのセクションを削除しました。最初にそのことを聞いてからしばらく経っていると思います。しかし、「理論的に」は有効な言葉でしたが、私は脱線します。
ティムS.

2

他の人は彼らが何をするかを説明しているので、私はそれをスキップします。

ポイントdd別々持つbscount引数は、あるbs書かれているどのくらいのコントロール。後者のコマンドに非常に大きな値を指定しましたが、数年前(6〜8年だと思います)、ブロックサイズが4096バイトのディスクの作成を開始しました。bsすると、プログラムで非常に大きなバッファが必要になり、デバイスに書き込むためにカーネルがブロック全体を構築する必要があるため、デバイスのブロックサイズ未満の値を指定すると遅くなります(このような場合おそらく、完全なブロックができるまで書き込みをバッファリングします。他の場合は、すでにディスクにあるものを読み取る必要があるかもしれません。2つのコマンドはに異なる値を使用しているためbs、2つの異なるサイトでそれらを見つけた可能性があると思うようになります。以前は512バイトのブロックサイズであったハードディスクは、bs=512bs=4096


1
のスイートスポットbsはそれよりもはるかに高いです。単一のSATAコマンドで複数のセクターを読み書きできるため、カーネルはI / Oをマージしてから送信します。どこからでもbs=64kbs=1024k(L3キャッシュサイズは、多くの場合、4-8MiBある)は合理的です。よく使用しますbs=128k。これは、最新のIntel CPUのL2キャッシュサイズの半分です。(dd2つのmemcpy操作を含みます:read(2)ソースから(/ dev / zeroであっても)、およびwrite(2).IIRCにsddは、ゼロを書き込むオプションがあり、CPU時間を少し節約します。ディスク以外)。
ピーターコーデス

I / O要求のマージの発生を確認するには、iostat -x 4または何かの出力を見て、rrqm / s(1秒あたりにマージされた読み取り要求)およびwrqm / s列に注意してください。
ピーターコーデス

1

警告: dd if=/dev/zero of=/dev/法医学的にデータをコピーする前にドライブまたはデバイスをクリーニングするために使用されます。ドライブまたはデバイスは、フォレンジック調査中のシステムから情報をコピーして相互汚染を軽減する前に、常にサニタイズする必要があります。したがって、それは悪いコマンドではありません。エンドユーザーはそれが何に使用されるかを理解する必要があります。そうしないと、データを破壊します。これがあなたが望むものである場合、ゼロ書き込み操作を確認してくださいdd if=/dev/sda | hexdump -C | head

出典: Darren Hayes博士によるコンピューターフォレンジック調査の実践ガイド


1

私が使う dd if=/dev/zero of=/dev/sdX oflag=sync実際にディスクイメージでgparted、fdisk、またはddを使用する前に、挿入されたUSBドライブまたはMicroSDカードの品質をテストためします。これは、特に質の悪い歴史を持つMicroSDメディアでは、慎重な考えだと思います。

もちろん、誤ってディスクをワイプしても許されないため、of = sdXに注意してください。X =が目的のターゲットのドライブ文字であることを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.