ddは隣接するパーティションを上書きできます


15

でしょうか

dd if=/dev/zero of=somepartition bs=512

また、の後にパーティションを消去するかsomepartition、最後に停止しsomepartitionますか?


5
たとえば/dev/sda1、パーティションを表すブロックデバイスは、カーネルによって作成されます。これにより、それらを介して隣接するストレージにアクセスできなくなります(カーネルが最後に読み込んだ後にパーティションテーブルが変更されていないと仮定します)。その方法で隣接ストレージにアクセスできる場合、それは大きなバグと見なされます。
デビッドフォースター

回答:


18

パーティションを上書きします dd

dd非常に強力ですが、危険なツールです。それはあなたがそれを質問なしでするように言うことをします。したがって、家族の写真を消去するように指示した場合、...そしてそれはちょっとしたタイプミスです。

ただし、チェックして再確認すれば、使用できます。

dd if=/dev/zero of=somepartition bs=512

または私はお勧めします

dd if=/dev/zero of=/dev/sdxn bs=4096

ここxで、ドライブ文字とnパーティション番号とブロックサイズ4096バイトは、書き込みプロセスを高速化します。

この場合、パーティション書き込むことが重要です。ドライブ全体(ドライブヘッドエンド)に書き込むと、ドライブ/dev/sdx全体が上書きされます。ただし、パーティションへの書き込みはパーティションの終わりで中断され、その背後のパーティションは保持されます。(私がテストした、私はそれがそのように動作することを知っているので、Lubuntu 16.04 LTSでUSBペンドライブに。)

拡張パーティションの例外

拡張パーティション(MSDOSパーティションテーブルに4つ以上のパーティションがあるための論理パーティションのコンテナ)には例外があります。これについては、次のリンクで説明しています。

ddを使用して「拡張」パーティションのイメージを作成できますか?

しかし、別の問題もあります。テスト環境でコマンドをテストしました。拡張パーティションのイメージを作成したいときに、ddは1キビバイト(1024バイト)だけを読み取りました。

また、これをLubuntu 16.04 LTSのUSBペンドライブでテストしました。これは、書き込み(および読み取り)に適用されます。最初のキビバイトのみが上書きされます。

要約すると、プライマリパーティションと論理パーティションの上書きは、この回答の主な説明に従って機能します。ただし、最初のキビバイトのみが上書きされるため、このメソッドを使用して拡張パーティションを上書きしないでください。拡張パーティションの論理パーティションはパーティションテーブルからは検出されなくなりますが、そこに保存されているデータはまだ存在しています。


私はすでに受け入れましたが、そうであれば、これは正しい答えになるはずです。
LogicBreaker

3
@LogicBreaker、たぶんあなたは受け入れを移動することができます。しかし、それは重要ではありません。使用方法を理解ddし、それが危険であることがより重要であるため、使用するときは非常に注意してください。幸運を祈ります:-)一般的に、すべてのファイルのバックアップを常に用意しておくべきです。
sudodus

1
ベアパーティションに書き込む場合、多くの選択肢はありません。そうでなければ、他の人にとって誤解を招くでしょう。
LogicBreaker

1
これが、ユーザーが通常/ dev / * "ファイル"にアクセスできない理由です。
するThorbjörnRavnアンデルセン

1
これがバックアップなしの家族写真の唯一のコピーである場合、盗難、火災、事故、または単純なハードウェア障害によりいつでもそれらを失う可能性があります:
user334639

4

パーティションデバイスへの書き込みは、そのパーティションの外部にddまたは他の何かで書き込まれません。単一のパーティション以外で効果を得るには、ディスク全体を使用する必要があります。

(注意:重複するパーティションを含むパーティションテーブルがディスクにない限り、これは決して発生しないはずです。)


3
別の警告:LVMのようなものを使用している場合、物理ボリュームへの書き込みはもちろん多くの論理ボリュームに影響を与える可能性があります。
-Maxpm

4

あなたの質問は、どのようにdd(そして実際にはUnixに似たオペレーティングシステム)が機能するかについての根本的な誤解に基づいていると思います。

ddいうだけの理由で上書き隣接パーティション、できないdd缶上書きしないパーティション、期間

dd単にファイルに書き込みます。それでおしまい。

さて、もしあなたが合格dd表すファイルの複数のパーティションを、その後、dd上書きされます、そのファイルを。しかし、その場合、ddパーティションの終わりを超えて書き込むことはありません。ddまだファイルの終わりまで書き込み、およびますのみ、ファイルの終わりまで。

ただし、dd1つのパーティションのみを表すファイルを渡すと、ddこのパーティションの終わりを超えて書き込むことはありません。繰り返しますが、これはとは関係ありませんdddd書き込むように指示したファイルに書き込むだけです。このファイルが単一のパーティションを表すという事実は、(この場合)カーネル内のブロックデバイスドライバーによって保証されます。ddそれとは何の関係もありません。

要するにdd、ファイルへの書き込みです。それらのファイルが何を表しているのかは、何もdd心配していません。ddパーティションについては何も知りません。


Mmh ... ddはファイルへの書き込みのみで、rawパーティションへの書き込みには使用できません。
LogicBreaker

1
正しい。ddrawパーティションへの書き込みには使用できません。ファイルへの書き込みのみが可能です。あなたはできるブロックデバイスファイルへのコース書き込みの表しパーティションを(など/dev/sda1)がありますが、生のパーティションに書き込むことはできません。また、パーティションを表すファイルにしか書き込むことができないため、ファイルはパーティションのみを表し、パーティションと末尾を少し過ぎていないため、パーティションの末尾を超えて書き込むことはできません。
ヨルグWミットタグ

3
Jorgは、Unix哲学の主なアイデアの1つである「すべてがファイル」です。そのため、カーネルは、パーティション、デバイス、ポートなどをファイルとして提示します。その結果、ファイルに書き込むことができるすべてのプログラムを使用して、パーティションまたはデバイスに書き込むことができます。パーティションの境界を強制するのはカーネルの仕事です。/dev/sdaテキストエディタで開いてデータを変更ddできます。パーティションにアクセスできるという点で、他のプログラムと違いはありません。非常に良い答えです!
セルゲイ

1

危険ではありますが、まれな特別なシナリオがあり、これは非バグブロックデバイスドライバーでも発生する可能性があります。

  • ディスク上のパーティションテーブルは、パーティションxのサイズが以前よりも低い境界で終わるように変更されます。その後ろのパーティションyのサイズは、先頭から下の境界に変更されるか、新しいパーティションyがスペースに追加されます。
  • パーティションyには、パーティションテーブルとは独立した手段で関連データが入力されます。たとえば、ディスク全体のブロックデバイス(たとえば/ dev / sda)でddをskip / countオプションとともに使用する
  • パーティションテーブルを再読み込みするようカーネルに指示するioctlは発行されないか、デバイスがビジーであるために失敗します
  • パーティションxは、エラー状態に達するまで書き込みを試みるプロセスによって書き込まれます。

0

ddに注意する必要があります。間違えた場合は、交渉した以上に上書きできるため、ddの使用目的によって異なります(OPはddの使用が曖昧であり、ddの正確な構文はコマンド)。

パーティションを指定すると、パーティションがいっぱいになるまでそのパーティションに書き込まれます。

ミスをしてドライブ全体を置く場合、例えばof = / dev / sda、ddはドライブ全体に書き込みを開始し、パーティションテーブルを無視(および上書き)します。

パーティションでddを使用して、削除されたファイルを上書きすることもできます(削除されたファイルは、パーティションに残り、さまざまな回復ツールによって、上書きされるまでさまざまな程度で発見される場合があります。ファイルへの書き込み。

dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file

ただし、実行内容によっては、代替ツールを使用してファイルを安全に削除することをお勧めします。安全な方法でファイルを削除する方法を参照してくださいオプション用。


6
/ dev / sdcXに書き込むことができ、パーティションの境界を越えて書き込むことができれば、パーティションテーブルを無視することはddではありません。
rackandboneman

1
@sudodus ddはそれほど低レベルではありません。実際に、人々が使用しddていることのほとんどは、と同じようにできたかもしれませんcat。実際にcatdd、デフォルトよりも大きなブロックを使用するため、わずかに高速です。低レベルのコードはすべてカーネル内にあります。そして、ドライバーはあなたがを使用しているddかどうかを本当に気にしませんcat
カスペルド

1
@sudodus-混乱して申し訳ありませんが、私は意図したほど明確ではありませんでした。ddは間違いなく書き続けることができます。dd if=/dev/zero of=/dev/sda bs=512 count=1またはdd if=/dev/zero of=/dev/sda bs=512例です。2番目のコマンドを使用すると、書き込みを続け、パーティションテーブルを「無視」してディスク全体を満たします。パーティションを指定した場合、パーティションdd if=/dev/zero of=/dev/sda1を超えることはありません。並べ替えは、ddで何をしたいかによって異なります。
パンサー

1
@Panther質問は具体的に言うof=somepartitionので、ディスクデバイス全体に書き込む場合は当てはまりません。ddデバイスドライバーの制限を回避できません。
バーマー

1
@Bamarが読んで、私はすでにそれについてコメントしました。私は多くのユーザーでは、/ dev / sdaのための$ somepartitionを混同見てきました
パンサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.