Open1
ddコマンド

- ddコマンドとは:
- データをブロック単位でコピー・変換するコマンド
- ディスクやパーティションの低レベルコピーが可能
- バックアップやイメージ作成によく使用
- 基本的な使い方:
# 基本構文
dd if=入力元 of=出力先 [オプション]
# 主要なオプション
bs=サイズ # ブロックサイズを指定
count=数 # コピーするブロック数
skip=数 # 入力側でスキップするブロック数
seek=数 # 出力側でスキップするブロック数
- よく使う実践例:
A. ディスクイメージの作成:
# USBメモリのイメージを作成
dd if=/dev/sdb of=usb_backup.img bs=4M
# CDやDVDのイメージを作成
dd if=/dev/cdrom of=disk.iso bs=4M
B. ディスクのバックアップと復元:
# ディスクのバックアップ
dd if=/dev/sda of=/dev/sdb bs=4M status=progress
# イメージファイルの書き戻し
dd if=backup.img of=/dev/sdb bs=4M status=progress
C. ファイルの作成とテスト:
# ゼロで埋められたファイル作成
dd if=/dev/zero of=empty.txt bs=1M count=100
# ランダムデータのファイル作成
dd if=/dev/urandom of=random.txt bs=1M count=100
- 重要なオプションの詳細:
status=progress # 進行状況を表示
conv=noerror # エラーを無視して続行
conv=sync # エラー時に0で埋める
iflag=direct # 入力時にバッファリングを避ける
oflag=direct # 出力時にバッファリングを避ける
- 危険な操作と注意点:
# 危険な例(要注意!)
dd if=/dev/zero of=/dev/sda # ディスク全体を消去
# 安全な使用例
dd if=/dev/sda of=disk_backup.img bs=4M # バックアップを作成
注意点:
- 誤った使用でデータ消失の可能性
- rootまたはsudo権限が必要
- デバイス名の確認は慎重に
- パフォーマンス最適化:
# 効率的なブロックサイズの使用
dd if=/dev/sda of=backup.img bs=4M
# 進行状況の確認
dd if=/dev/sda of=backup.img bs=4M status=progress
# バッファリングの制御
dd if=/dev/sda of=backup.img bs=4M iflag=direct oflag=direct
- トラブルシューティング:
A. よくあるエラーと対処:
# 入力/出力エラーの無視
dd if=/dev/sda of=backup.img bs=4M conv=noerror,sync
# デバイスビジー対策
sudo fuser -k /dev/sda # 使用プロセスの終了
- 実践的なユースケース:
A. ディスクのゼロ埋め:
# セキュアな消去
dd if=/dev/zero of=/dev/sda bs=4M status=progress
B. パーティションのバックアップ:
# 特定パーティションのバックアップ
dd if=/dev/sda1 of=partition_backup.img bs=4M
C. ISOイメージの書き込み:
# USBメモリにISOを書き込み
dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
- LPIC試験でよく出題されるポイント:
- 基本的なオプション(if, of, bs)の意味
- ブロックサイズの指定方法
- 進行状況の表示方法
- エラー処理オプション
- ddコマンドの活用例スクリプト:
#!/bin/bash
# バックアップスクリプトの例
SOURCE_DISK="/dev/sda"
BACKUP_FILE="/backup/disk_$(date +%Y%m%d).img"
# バックアップの実行
dd if=$SOURCE_DISK of=$BACKUP_FILE \
bs=4M \
status=progress \
conv=noerror,sync
# 完了確認
if [ $? -eq 0 ]; then
echo "Backup completed successfully"
else
echo "Backup failed"
fi
- パフォーマンスモニタリング:
# 別のターミナルで実行して進捗確認
watch -n 1 'kill -USR1 $(pgrep dd)'