ddコマンドとは
ddコマンドは、
Unix系システムにおけるデータ操作ツールで、主にブロックデバイスの直接的な読み書きを担います。この特徴により、ハードディスク全体やパーティション単位でのコピー、ブートセクターのバックアップ、
データの完全消去といった操作が可能になります。また、コンピュータ・フォレンジックスのような、ディスクの全状態をそのままクローンする必要がある状況でも利用されます。
歴史的背景
ddという名前は、dataset definitionの略とされていますが、実際には
IBMの
メインフレームのジョブ制御言語(JCL)の「DD文」に由来します。このため、ddコマンドの引数構文は、Unixの一般的なコマンドとは大きく異なっています。
危険性と注意点
ddコマンドは、ディスクへの直接的な書き込みを行うため、通常は管理者権限が必要です。この強力さが、同時に危険性も伴います。入力と出力の指定を間違えるだけで、重要なデータを上書きして消去してしまう可能性があります。そのため、経験豊富なユーザーであっても、ddコマンドの利用には細心の注意が必要です。
オプション
ddコマンドは、さまざまなオプションを指定することで、より詳細な操作が可能です。
入出力オプション
`if=[file]`: 入力ファイルを指定します。標準入力の代わりに、指定したファイルからデータを読み込みます。
`of=[file]`: 出力ファイルを指定します。標準出力の代わりに、指定したファイルへデータを書き出します。
コピーサイズオプション
`count=[blocks]`: 指定したブロック数だけデータをコピーします。`ibs`オプションで指定されたバイト数のブロック単位で処理されます。
開始位置指定オプション
`skip=[blocks]`: 入力ファイルの先頭から、指定したブロック数だけデータをスキップします。
`seek=[blocks]`: 出力ファイルの先頭から、指定したブロック数だけ書き込みをスキップします。
データサイズオプション
`bs=[bytes]`: 一度に読み書きするデータサイズを指定します。
`ibs=[bytes]`: 一度に読み込むデータサイズを指定します。デフォルトは512バイトです。
`obs=[bytes]`: 一度に書き出すデータサイズを指定します。デフォルトは512バイトです。
データ変換オプション
`conv=[CONVERSION]`: データの変換オプションを指定します。
`noerror`: 読み込みエラーが発生しても、処理を継続します。
`sync`: 入力ブロックサイズが`ibs`に満たない場合に、パディングを行います。
使用例
以下に、ddコマンドの具体的な使用例を示します。
ハードディスク上のパーティションを別のディスクにコピーする
bash
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror
ハードディスク全体を完全に消去する
bash
dd if=/dev/urandom of=/dev/hda
CDをISOイメージファイルに変換する
bash
dd if=/dev/cdrom of=/home/sam/myCD.iso bs=2048 conv=sync,notrunc
ハードディスクのMBRをバックアップする
bash
dd if=/dev/sda of=/home/sam/MBR.image bs=446 count=1
関連事項
ddrescue: 不良セクタのあるディスクのデータコピーを専門とするツールです。
パーティション: ハードディスクを論理的に分割した領域のことです。
ディスクセクタ: ハードディスクにおける最小のデータ格納単位です。
データの完全消去: データを復元不可能な状態にする技術です。
外部リンク
dd(1) man page(JM Project)
参考資料
*
GNU Core Utilities