dd(Data Duplicator/Data Destroyer)是位元組級複製工具,無視檔案系統結構,直接操作區塊裝置。威力極大,**一行指令可毀滅所有資料**,務必三思再執行。本文詳解參數、四大實戰場景、進度監控與安全原則。
dd if=輸入來源 of=輸出目標 bs=區塊大小 count=區塊數量 [其他選項]
| 參數 | 功能 | 預設值 |
|---|---|---|
if=FILE | 輸入檔案/裝置 | stdin |
of=FILE | 輸出檔案/裝置 | stdout |
bs=BYTES | 同時設定 ibs/obs(讀/寫區塊大小) | 512 bytes |
count=N | 複製 N 個區塊 | 全部 |
skip=N | 跳過輸入前 N 區塊 | 0 |
seek=N | 跳過輸出前 N 區塊 | 0 |
conv=NOTRUNC,SYNC,NOERROR | 轉換選項:不截斷/填充零/忽略錯誤繼續 | - |
status=progress | 顯示進度(GNU dd 8.24+) | - |
dd if=/etc/inittab of=/opt/inittab.bak
# 3+1 records in/out (3 個 512B 完整區塊 + 1 個不足區塊)
ls -l /etc/inittab /opt/inittab.bak
# 大小完全一致 1666 bytes
# 備份 /dev/sda2 至檔案
dd if=/dev/sda2 of=/opt/sda2.back bs=4M status=progress
# 還原(目標分區必須卸載!大小需 ≥ 來源)
umount /dev/sda2
dd if=/opt/sda2.back of=/dev/sda2 bs=4M status=progress
mount /dev/sda2
關鍵:bs=4M(或 1M/8M/64K)大幅提升吞吐;輸出路徑**不能**在來源分區內。
# 克隆 sda 到 sdb (sdb ≥ sda)
dd if=/dev/sda of=/dev/sdb bs=4M status=progress conv=noerror,sync
# 備份 MBR + 分區表 (前 512 bytes)
dd if=/dev/sda of=/backup/mbr_backup bs=512 count=1
# 備份前 1MB (含 MBR + GPT 頭部)
dd if=/dev/sda of=/backup/disk_header.img bs=1M count=1
# 寫入 ISO 至 USB (USB 為 /dev/sdX,確認無誤!)
dd if=linux.iso of=/dev/sdX bs=4M status=progress conv=fsync
sync
# 建立 1GB 空檔 (測試/交換檔)
dd if=/dev/zero of=/swapfile bs=1M count=1024
# 寫入隨機資料銷毀磁碟 (單遍)
dd if=/dev/urandom of=/dev/sdX bs=4M status=progress
# 多遍銷毀 (DoD 5220.22-M 3 遍)
for i in {1..3}; do dd if=/dev/urandom of=/dev/sdX bs=4M status=progress; done
status=progress(現代 GNU dd 內建)pv 管線監控:dd if=/dev/sda | pv | dd of=/dev/sdbkill -USR1 $(pidof dd):傳送 USR1 訊號觸發進度列印(舊版)bs 調優:SSD/NVMe 用 1M-16M,HDD 用 4M-64M,磁帶用 64K-256Kdd if=/dev/zero of=/dev/sda 瞬間清空硬碟。lsblk、fdisk -l、掛載點檢查。dd if=/dev/sdX of=/backup/mbr bs=512 count=1。dd 是「區塊層手術刀」,精準、無情、不可逆。備份分區用 bs=4M status=progress、克隆硬碟加 conv=noerror,sync、銷毀資料用 /dev/urandom 多遍。**永遠在 LiveCD/救援模式下操作生產磁碟,並在腦中預演「輸入輸出反向」的後果**。