Linuxコマンド - dd

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

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オプション) には細心の注意が必要である。
誤った指定は重大なデータ損失につながる可能性がある。


オプション

ddコマンドのオプション
オプション 説明
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