dd(convert and copy a file)是 Linux 底層資料複製利器,能以區塊為單位讀寫,支援格式轉換、跳過區塊、指定緩衝區大小等進階功能,常用於備份 MBR、製作 ISO、克隆磁碟/分區。
| 參數 | 說明 |
|---|---|
if=檔案/裝置 | 輸入來源(預設 stdin) |
of=檔案/裝置 | 輸出目的地(預設 stdout) |
bs=位元組 | 同時設定讀/寫緩衝區大小(等同 ibs+obs) |
count=區塊數 | 僅複製指定數量的輸入區塊 |
skip=區塊數 | 跳過輸入開頭的區塊數 |
seek=區塊數 | 跳過輸出開頭的區塊數 |
conv=notrunc | 不截斷輸出檔案 |
conv=noerror | 發生錯誤時繼續處理 |
conv=sync | 將每個輸入記錄填充至 ibs 大小(用 NUL) |
# 備份至映像檔
dd if=/dev/fd0 of=/tmp/floppy.img bs=1024
# 還原至另一張軟碟
dd if=/tmp/floppy.img of=/dev/fd0 bs=1024
# 完成後刪除暫存檔
rm /tmp/floppy.img
dd if=/dev/cdrom of=cdrom.iso bs=2048
需確認光碟為標準 ISO9660 格式。燒錄可用 cdrecord -v cdrom.iso(參數視硬體調整)。
# 將 sda 完整複製到 sdb(需相同容量,謹慎操作!)
dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync
dd if=/dev/sda of=mbr.backup bs=512 count=1
現代 dd 支援 status=progress 參數:
dd if=/dev/sda of=/dev/sdb bs=64K status=progress
或搭配 pv 管線監控:
dd if=/dev/sda | pv | dd of=/dev/sdb
if 與 of 搞反會導致資料毀損,執行前務必三確認。sync 確保緩衝區寫入實體媒體。