dd 是 Linux 中非常強大的低階資料處理工具,常用於磁碟備份、映像製作、資料轉換等。以下是完整的說明與範例:


🧠 基本語法

dd if=<來源> of=<目的> [參數...]

🧪 常見用途與範例

🔹 建立空白檔案(填充 0)

dd if=/dev/zero of=empty_100MB.bin bs=1M count=100

🔹 建立隨機檔案(填充亂數)

dd if=/dev/urandom of=random_10MB.bin bs=1M count=10

🔹 建立稀疏檔案(不實際佔空間)

dd if=/dev/zero of=sparse_1GB.img bs=1 count=0 seek=1G

🔹 備份整顆硬碟

dd if=/dev/sda of=backup.img bs=4M status=progress

🔹 回復硬碟映像

dd if=backup.img of=/dev/sda bs=4M status=progress

🔹 製作 bootable USB

dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress

🧪 性能測試範例

🔸 測試寫入速度

dd if=/dev/zero of=testfile bs=1G count=1 conv=fdatasync

🔸 測試讀取速度

dd if=testfile of=/dev/null bs=1G

備份到別台電腦

dd if=/dev/zero bs=4M count=250 iflag=fullblock | ssh deltawen@192.168.99.7 "dd of=/dev/shm/testfile bs=4M conv=fdatasync"
本機生成1GB零資料
SSH 管線傳送
遠端寫入RAM檔案

這串指令做了以下事情:

  1. 在本機產生 1GB 的零值資料(全 0 bit)
  2. 經由 SSH 傳送到遠端主機(192.168.99.7)
  3. 在遠端寫入到 /dev/shm/testfile(RAM-based filesystem)
  4. 確保寫入完成後資料 flush 到裝置(雖然是 RAM)

分段解析 本機

dd if=/dev/zero bs=4M count=250 iflag=fullblock
  • if=/dev/zero:讀取來源資料,全都是零值
  • bs=4M:每個 block 是 4MB
  • count=250:共產生 250 個 blocks → 4MB × 250 = 1GB
  • iflag=fullblock:這很關鍵,確保每次讀滿 block(避免 partial read 警告)
    🔸 若沒加 iflag=fullblock,有可能只讀到部分資料(例如 32KB),造成傳送失敗。

傳送過程

| ssh deltawen@192.168.99.7 ...

遠端執行部分:

dd of=/dev/shm/testfile bs=4M conv=fdatasync
  • of=/dev/shm/testfile:寫入到遠端 RAM disk

  • bs=4M:一次寫入 4MB chunk

  • conv=fdatasync:確保資料 flush 到裝置(在 /dev/shm 中,就是記憶體)

    • 雖然是 RAM,fdatasync 確保寫入程序完整結束,可作為資料一致性保證