Linuxコマンド - dd
ナビゲーションに移動
検索に移動
概要
ddコマンドは、Linuxシステムにおける非常に強力なデータコピーおよび変換ツールである。
ddの由来については、IBM社のジョブ制御言語 (JCL) のData Definitionから来ているという説が有力である。
そのため、ddコマンドは、その歴史的背景からデータの定義という考え方を受け継いでいる。
ddコマンドの特徴として、ブロック単位でのデータ操作が可能であり、ファイルシステムの制約を受けずに直接データを読み書きできる。
そのため、システム管理者からは魔法の杖とも呼ばれており、以下に示すような用途で使用されている。
- ディスクイメージの作成とリストア
- 物理デバイスの完全なバックアップ
- ハードドライブのクローン作成
- データの変換 (エンディアン変換等)
※注意
ddコマンドは非常に強力なツールであるため、誤った使用は深刻なデータ損失を引き起こす可能性がある。
特に、出力先 (of) の指定には細心の注意が必要である。
ddコマンドは低レベルなデータ操作が必要な場面で非常に重要な役割を果たす。
ただし、その強力さゆえに、使用前には必ずコマンドの内容を十分確認することが推奨される。
ddコマンドのインストール
# RHEL sudo dnf install coreutils # SUSE sudo zypper install coreutils # Raspberry Pi / Mobian sudo apt install coreutils
使用方法
基本的な使用方法は、以下に示すような構文である。
dd if=<入力元> of=<出力先> <オプション>
出力先の指定 (ofオプション) には細心の注意が必要である。
誤った指定は重大なデータ損失につながる可能性がある。
オプション
オプション | 説明 |
---|---|
bs=<バイト数> | ブロックサイズを指定する。 bsの値は、システムのメモリ容量とI/O性能を考慮して設定する必要がある。 一般的に、4[MB]から8[MB]程度が推奨される。 |
count=<数値> | コピーするブロック数を指定する。 |
seek=<数値> | 出力先での開始位置を指定する。 |
skip=<数値> | 入力元での開始位置を指定する。 |
count=<数値> | コピーするブロック数の制限する。 |
conv=<オプション> | noerror : エラーを無視して続行する。 sync : エラー時にゼロで埋める。 両方のオプションを同時に使用することもできる。 例: conv=noerror,sync ※注意 conv=noerror,sync オプションは破損したメディアからデータを救出する場合に重要であるが、完全なコピーは保証されない。
|
また、status=progress
オプションを使用することにより、進捗状況をリアルタイムで確認できる。
特殊なデバイスファイル
よく使用される特殊なデバイスファイルを以下に示す。
# ゼロ (null) データの生成する if=/dev/zero # ランダムデータの生成する。 if=/dev/urandom # 全データを破棄する (書き込みのみ) of=/dev/null
使用例
以下の例では、USBメモリのイメージファイルを作成している。
# X : ストレージ番号
sudo dd if=/dev/sdX of=backup.img bs=4M status=progress
以下の例では、イメージファイルをUSBメモリに書き込んでいる。
# X : ストレージ番号
sudo dd if=backup.img of=/dev/sdX bs=4M status=progress
その他の使用例を以下に示す。
# X : ストレージ番号 # デバイスの先頭512バイトをバックアップ (MBR等) sudo dd if=/dev/sdX of=mbr.backup bs=512 count=1 # ファイルシステムの完全消去 (セキュリティ目的) sudo dd if=/dev/urandom of=/dev/sdX bs=4M status=progress # 大きな一時ファイルの作成 (テスト向け) sudo dd if=/dev/zero of=largefile bs=1M count=1000 # 破損したディスクからのデータ救出 sudo dd if=/dev/sdX of=disk.img bs=4k conv=noerror,sync status=progress