概要
ddは「disk dump」または「data duplicator」の略として知られており、ブロック単位でデータを読み書きする方式で動作します。入力ファイル(if)からデータを読み取り、出力ファイル(of)にコピーし、この過程で様々な変換(conv)やブロックサイズ(bs)オプションを適用できます。
主な機能
- ディスク/パーティションイメージの作成と復元
- 起動可能なメディアの作成
- ファイルサイズの調整と内容の初期化
- データ変換(例:大文字・小文字変換)
主なオプション
ddコマンドは、さまざまなオプションを通じて精密なデータ操作を可能にします。特に、入力(if)と出力(of)ファイルの指定が重要であり、ブロックサイズ(bs)とコピーするブロック数(count)によって操作範囲を制御します。
入力/出力の指定
ブロックサイズと数
変換とステータス
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`dd` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
ddコマンドは強力ですが、誤った使用は深刻なデータ損失を招く可能性があります。以下の例は一般的な使用法を示していますが、実際のシステムディスクに適用する際は、必ずバックアップを実行し、慎重に操作してください。
100MBのダミーファイルを作成
dd if=/dev/zero of=dummy.img bs=1M count=100
/dev/zeroから1MBのブロックを100個読み込み、「dummy.img」ファイルを作成します。
ディスクパーティションのバックアップ(注意が必要)
dd if=/dev/sda1 of=sda1_backup.img bs=4M status=progress
/dev/sda1パーティションの全体内容を「sda1_backup.img」ファイルにバックアップします。「status=progress」で進捗状況を表示します。**対象デバイスのパスを非常に慎重に確認してください。**
ファイル内容を0で上書き(セキュア削除)
dd if=/dev/zero of=myfile.txt bs=1M count=1 conv=notrunc
既存の「myfile.txt」ファイルの内容を0で上書きします。「conv=notrunc」はファイルサイズを維持します。
ISOイメージから起動可能なUSBドライブを作成(非常に注意)
dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress conv=fsync
「ubuntu.iso」ファイルを「/dev/sdb」USBドライブにコピーして起動可能にします。**「of」に指定するデバイスパスを必ず確認してください。誤って指定するとシステムディスクが破損します。**「conv=fsync」は全てのデータをディスクに完全に書き込むようにします。
ファイルの特定部分をコピー
dd if=input.txt of=output.txt bs=1 count=100 skip=50 seek=0
「input.txt」ファイルの51番目のバイトから100バイトを読み込み、「output.txt」ファイルの先頭にコピーします。(bs=1なのでskip/seekはバイト単位)
ヒントと注意点
ddコマンドは非常に強力なため、使用時には特別な注意が必要です。特に`if`と`of`オプションに誤ったデバイスやファイルを指定すると、システムデータが破損する可能性があります。
主な注意点
- **対象の確認**: `if`と`of`に指定するパスを複数回確認してください。特に`/dev/sda`のようなデバイスファイルは致命的となる可能性があります。
- **進捗状況**: `status=progress`オプションを使用して、操作の進捗状況をリアルタイムで確認してください。大容量の操作時に役立ちます。
- **ブロックサイズ**: `bs`オプションはパフォーマンスに大きな影響を与えます。一般的に1M、4M、8Mなどが効率的です。
- **データ損失のリスク**: `dd`は警告なしにデータを上書きできるため、重要なデータが含まれるディスクやパーティションに使用する際は、必ず事前にバックアップを実行してください。
pvコマンドとの併用
`dd`コマンド自体は進捗表示が限定的です。`pv` (Pipe Viewer) コマンドを併用すると、より詳細な進捗率、転送速度、完了予定時間などを確認できます。`pv`がインストールされていない場合は、まずインストールする必要があります。(例: `sudo apt install pv` または `sudo yum install pv`) **使用例:** `dd if=/dev/sda | pv -pteb | dd of=/dev/sdb`