Open1

ddコマンド

ひでひで
  1. ddコマンドとは:
  • データをブロック単位でコピー・変換するコマンド
  • ディスクやパーティションの低レベルコピーが可能
  • バックアップやイメージ作成によく使用
  1. 基本的な使い方:
# 基本構文
dd if=入力元 of=出力先 [オプション]

# 主要なオプション
bs=サイズ   # ブロックサイズを指定
count=# コピーするブロック数
skip=# 入力側でスキップするブロック数
seek=# 出力側でスキップするブロック数
  1. よく使う実践例:

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
  1. 重要なオプションの詳細:
status=progress  # 進行状況を表示
conv=noerror     # エラーを無視して続行
conv=sync        # エラー時に0で埋める
iflag=direct     # 入力時にバッファリングを避ける
oflag=direct     # 出力時にバッファリングを避ける
  1. 危険な操作と注意点:
# 危険な例(要注意!)
dd if=/dev/zero of=/dev/sda  # ディスク全体を消去

# 安全な使用例
dd if=/dev/sda of=disk_backup.img bs=4M  # バックアップを作成

注意点:

  • 誤った使用でデータ消失の可能性
  • rootまたはsudo権限が必要
  • デバイス名の確認は慎重に
  1. パフォーマンス最適化:
# 効率的なブロックサイズの使用
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
  1. トラブルシューティング:

A. よくあるエラーと対処:

# 入力/出力エラーの無視
dd if=/dev/sda of=backup.img bs=4M conv=noerror,sync

# デバイスビジー対策
sudo fuser -k /dev/sda  # 使用プロセスの終了
  1. 実践的なユースケース:

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
  1. LPIC試験でよく出題されるポイント:
  • 基本的なオプション(if, of, bs)の意味
  • ブロックサイズの指定方法
  • 進行状況の表示方法
  • エラー処理オプション
  1. 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
  1. パフォーマンスモニタリング:
# 別のターミナルで実行して進捗確認
watch -n 1 'kill -USR1 $(pgrep dd)'