はじめに
こんにちは!今回はddコマンドについて解説します。
ddは、ファイルやディスク全体をブロック単位でコピー・変換するコマンドです。ディスクイメージのバックアップ、USB起動メディアの作成、ディスク丸ごとのクローンなど、低レベルのデータ操作をする時に使うんですね。
「火力の強い、融通が利くコピーツール」ってイメージです。パワフルですけど、使い方を間違えるとデータ破損のリスクがあるので注意が必要です。
ddコマンドとは
ddは、“convert and copy"の略で、ファイルやディスクのデータをブロック単位でコピー・変換する外部コマンドです。
通常のcpコマンドではファイルレベルでしか操作できませんが、ddは低レベルでのディスク操作ができます。ディスク全体のバックアップ、パーティション操作、USB起動メディア作成、ディスククローンなど、システム管理者がよく使う重要なコマンドなんです。
ddの特徴は、細かいオプションでデータ変換(大文字・小文字変換など)ができることと、ブロックサイズを指定してコピーできることです。ただし、パワフルだからこそ、誤った使い方はデータ破損につながるので、慎重に使う必要があります。
基本構文
|
|
ddのオプションは、if=(入力ファイル)とof=(出力ファイル)で指定します。
|
|
他のコマンドと違う独特の構文なので、最初は戸惑うかもしれませんね。
主なオプション
| オプション | 説明 |
|---|---|
if= |
入力ファイル(input file) |
of= |
出力ファイル(output file) |
bs= |
ブロックサイズ(block size) |
count= |
コピーするブロック数 |
skip= |
入力ファイルの最初からスキップするブロック数 |
seek= |
出力ファイルの最初からシークするブロック数 |
conv= |
データ変換(notrunc, noerror など) |
status= |
進捗表示(progress, none など) |
ibs= |
入力ブロックサイズ |
obs= |
出力ブロックサイズ |
使用例
例1: ファイルをコピー
|
|
実行結果:
|
|
source.imgをdestination.imgにコピー。出力にはコピーしたブロック数とデータ転送速度が表示されます。
例2: ブロックサイズを指定してコピー
|
|
実行結果:
|
|
bs=4Mで4MBずつブロックをコピー。ブロックサイズが大きいほど、転送速度が向上します。
例3: 最初の100ブロックだけコピー
|
|
実行結果:
|
|
count=100で最初の100ブロック(100MB)だけコピー。大容量ディスクの一部だけバックアップしたい時に便利です。
例4: 入力ファイルの一部をスキップしてコピー
|
|
実行結果:
|
|
skip=500で最初の500MBをスキップして、その後の100MBをコピー。特定の範囲だけ抽出したい時に使います。
例5: 進捗表示を有効にしてコピー
|
|
実行結果:
|
|
status=progressで転送中の進捗がリアルタイムで表示されます。大容量ファイルのコピーで便利。
例6: 標準入力から標準出力へパイプ
|
|
実行結果:
|
|
パイプでddに入力を渡すことができます。リモートのファイルをコピーする時に便利。
例7: USBドライブにディスクイメージを書き込み
|
|
実行結果:
|
|
起動メディアのISOイメージをUSBドライブに書き込み。ここでデバイス名を間違えると大変なことに。注意が必要です。
例8: ディスク全体をイメージにバックアップ
|
|
実行結果:
|
|
ディスク全体をイメージファイルにバックアップ。時間がかかりますが、完全なバックアップが作成されます。
例9: nullデバイスからランダムデータを生成
|
|
実行結果:
|
|
/dev/zero(ゼロデータを無限に供給)から100MBのファイルを生成。テスト用のダミーファイル作成に便利。
例10: エラーを無視してコピー
|
|
実行結果:
|
|
conv=noerrorでエラーが発生しても処理を続けます。破損したディスクのリカバリーに使えます。
Tips・注意点
デバイス名を確認してから実行すること
|
|
/dev/sdaと/dev/sdbを間違えると、間違ったディスクにデータを上書きして、取り返しのつかないことになります。何度も確認しましょう。
bsの値が大きいほど高速(ただし上限あり)
|
|
ただし、メモリが少ないシステムではメモリ不足になる可能性があります。通常は4M程度が目安です。
ディスク書き込み時はsyncを忘れずに
|
|
dd完了後、すぐにUSBを取り外さず、syncでバッファをディスクに書き込んでから取り外します。
大容量ファイルコピーは進捗表示が必須
|
|
status=progressで転送中の進捗が表示されます。特に時間がかかる操作では必須です。
rootになるかsudoが必須
|
|
/dev/sd*デバイスへのアクセスはroot権限が必要です。
実践的な使い方
USB起動メディアの作成
|
|
インストールメディアの作成。ddが最も活躍する場面の一つです。
ディスク全体のバックアップ
|
|
日付付きでディスク全体をバックアップ。災害時の復旧に備えます。
破損したディスクのリカバリー
|
|
ディスク障害が発生した時に、読み取り可能なデータを可能な限り抽出します。
ディスク初期化
|
|
ディスク全体をクリア。売却前のデータ削除などに使えます。ただし、時間がかかります。
まとめ
ddコマンドのポイント:
- ファイル・ディスクをブロック単位でコピー・変換する外部コマンド
- if=: 入力ファイルを指定
- of=: 出力ファイルを指定
- bs=: ブロックサイズを指定(大きいほど高速)
- count=: コピーするブロック数を指定
- status=progress: 進捗表示を有効化
- conv=noerror: エラー無視で継続
- よく使う組み合わせ:
sudo dd if=/dev/sda of=backup.img bs=4M status=progress
ddは超パワフルですが、デバイス名を間違えるとデータ消失につながります。必ずデバイス名をもう一度確認してから実行してくださいね。USB起動メディア作成、ディスクバックアップ、リカバリーなど、システム管理で頻繁に活躍するコマンドですよ!