ddコマンドとそれに関連するすべて


UNIXシステムには、ddと呼ばれる非常に古いコマンドが1つあります。 何かバイトをどこかにコピーするように設計されています。 一見、目立ったものはありませんが、このユニバーサルツールのすべての機能を検討すると、MBRのバックアップ、さまざまなドライブからのデータダンプの作成、ストレージメディアのミラーリング、バックアップからのデータの復元など、追加のソフトウェアを使用せずに非常に複雑な操作を実行できますメディアなどに加え、ddの機能を組み合わせてLinuxカーネルの暗号化アルゴリズムをサポートすると、ファイル全体を含む暗号化ファイルを作成することもできます。 私のシステム。
繰り返しになりますが、ノートでは、UNIXシステムでの作業を非常に容易にするコマンドの使用で最も一般的に使用される例を説明します。

コマンドの主なパラメーターを明確に示す小さな例から始めます。

#dd if = / dev / urandom of = / dev / null bs = 100M count = 5

パラメータ:

したがって、説明されているコマンドは、device / dev / urandomからdevice / dev / nullまで5 * 100メガバイトを読み取ります。 このコマンドに意味を与えると、システムは500メガバイトのランダムな値を生成し、ヌルデバイスに書き込みます。 もちろん、このコマンドが行うことは、プロセッサを数秒間ロードすることだけです。 実習の例を考慮してください。

ディスクイメージを作成します。

#dd if = / dev / cdrom of = image.iso

このコマンドは、デバイスからデータを読み取り、デバイスの最後に到達するまでファイルに書き込みます。 ドライブが破損している場合、読み取りエラーを無視して読み取りを試みることができます。

#dd if = / dev / cdrom of = image.iso conv = noerror

「conv」パラメーターを使用すると、データストリームに適用可能な複数のフィルターを接続できます。 「noerror」フィルターは、読み取りエラーが発生するとプログラムの停止をオフにします。 したがって、ディスクから一部のデータを読み取ることができます。 まったく同じ方法で、曲がったCorsairフラッシュドライブからデータを保存しました。連絡があるときに適切な位置を取得し、ファイルシステムをダンプしました。
ところで、これらのイメージは、-o loopスイッチを指定してmountコマンドを使用して接続できます。

#mount -o loop image.iso / mnt / image

何かがうまくいかない場合、プロセスは2つのレベルに分けられます。

#losetup -e / dev / loop0 image.iso
#mount / dev / loop0 / mnt / image

これが機能しない場合は、画像ファイルシステムが飛行しています。

ストレージメディアを操作する

最適ではありませんが、ハードドライブのクローンを作成するための非常にシンプルなソリューション:

#dd if = / dev / sda of = / dev / sdb bs = 4096

4 KBのバッファーサイズでのすべて同じバイトコピー。 この方法のマイナス点は、パーティションがいっぱいになった場合、すべてのビットがコピーされることです。これは、少しいっぱいになったパーティションをコピーする場合は有益ではありません。 大量のデータを操作するときのコピー時間を短縮するには、MBRを新しいメディアに転送し(以下で説明します)、カーネルパーティションテーブルを再度読み取り(同じfdiskを使用)、ファイルシステムを作成し、ファイルをコピーします(アクセス権の保存を忘れずに)ファイルへ)。

オプションとして、スケジュールに従ってネットワーク上のパーティションをバックアップすることもできます。 sshキーを解決すると、このスキームは機能します。

#dd if = / dev / DEVICE | ssh user @ host "dd of = / home / user / DEVICE.img"。

私はかつて、フリーマーケットの非常に大きな割合のハードドライブが、特別なものを一切使用せずにデータを回復し、機密情報を含んでいるという調査を読みました。 メディアに何も復元できないように、ゼロでハンマーで打つことができます:

#dd if = / dev / zero of = / dev / DEVICE

DEVICEに置き換える必要があるものは明らかだと思います。 Linuxについての講義を行った後、私は自分が書いたものを非常に注意深くフォローし始めました。
同じddで確認できますが、データを16進数に変換します。

#dd if = / dev / sda | hexdump -C

ゼロを振りかける必要があります。

MBR操作

MBRはハードドライブの最初の512バイトにあり、パーティションテーブル、ブートローダー、および追加のペアで構成されます。 バイト 時々、バックアップ、復元などが必要です。 バックアップは次のように行われます。

#dd if = / dev / sda of = mbr.img bs = 512 count = 1

回復が簡単です:

#dd if = mbr.img of = / dev / sda

MBRでのこれらの不正の理由は異なる場合がありますが、経験から取った機能の1つをお伝えしたいと思います。パーティションの1つがext3であり、後にFATになりWindowsで使用されたMBRの長年のコピーを復元した後、パーティションはWindowsで表示されなくなりました。 その理由は、MBRに格納されているセクションIDです。 UNIXがスーパーブロックに従ってファイルシステムをマウントする場合、WindowsはMBRのパーティションIDによってガイドされます。 したがって、特にコンピューターにWindowsがある場合は、fdiskを使用してパーティションIDを常に確認する必要があります。

ファイル生成

ddを使用すると、ファイルを生成して、暗号化された形式であっても、他のファイルシステムのコンテナとして使用できます。 技術は次のとおりです。
ddを使用すると、ゼロで埋められたファイルが作成されます(スコアは乱数ではなく、長くて無意味です):

#dd if = / dev / zero of = image.crypted bs = 1M count = 1000

ほぼギガバイトのファイルが作成されました。 次に、このファイルをブロックデバイスにし、同時にLinuxカーネル暗号化メカニズムに渡す必要があります。 blowfishアルゴリズムを選択します。 モジュールのロード:

#modprobe cryptoloop
#modprobe blowfish

暗号化が有効になっているブロックデバイスにイメージを関連付ける:

#losetup -e blowfish / dev / loop0 image.crypted

このコマンドは、画像のキーとなるパスワードの入力を求めます。 キーが誤って入力された場合、システムはマウントされません。 新しいキーを使用してイメージ内のデータを再作成することは可能ですが、古いデータにはアクセスできません。
ファイルシステムを作成してマウントします。

#mkfs.ext2 / dev / loop0
#mount / dev / loop0 / mnt / image

画像はデータを記録する準備ができています。 作業を完了したら、忘れずにマウントを解除し、デバイスのブロックループから切断する必要があります。

#umount / dev / loop0
#losetup -d / dev / loop0

これで、暗号化されたイメージの準備ができました。

私は主要なアイデアを描きましたが、2つの文字で構成される名前の小さなプログラムの助けを借りて解決できる多くのタスクは、はるかに広いです。 「dd」プログラムは、ITが「UNIX方式」と呼んでいるものの鮮明な例です。1つのプログラムはメカニズムの一部であり、独自のタスクを実行し、適切に実行します。 問題を解決するための非標準的なアプローチを持っている彼の仕事を知っている人の手の中に、そのような小さなプログラムは、一見すると大きな専門パッケージを解決する必要がある複雑なタスクを迅速かつ効率的に解決するのに役立ちます。

Source: https://habr.com/ru/post/J117050/


All Articles