dd 是 Linux 系統中強大的底層資料複製工具,能以指定區塊大小讀取輸入檔案並寫入輸出檔案,同時支援轉換操作。其名稱源自 "Data Definition",常用於磁碟備份、鏡像建立、裝置複製等場景。
| 參數 | 說明 |
|---|---|
| if=檔案 | 輸入檔案(來源),預設為標準輸入 |
| of=檔案 | 輸出檔案(目的),預設為標準輸出 |
| bs=位元組 | 同時設定讀寫區塊大小(單位位元組) |
| count=區塊數 | 僅複製指定數量的區塊 |
| skip=區塊數 | 從輸入檔案開頭跳過指定區塊 |
| seek=區塊數 | 從輸出檔案開頭跳過指定區塊 |
| conv=轉換 | 指定資料轉換方式(如 ascii、ebcdic、lcase、ucase、noerror、sync 等) |
單位後綴:b=512、c=1、k=1024、w=2、M=1024k、G=1024M
dd if=/dev/hdb of=/dev/hdd
dd if=/dev/hdb of=/root/image
dd if=/root/image of=/dev/hdb
dd if=/dev/hdb | gzip > /root/image.gz
gzip -dc /root/image.gz | dd of=/dev/hdb
# 備份前 512 位元組
dd if=/dev/hda of=/root/mbr.bin count=1 bs=512
# 還原
dd if=/root/mbr.bin of=/dev/hda
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
dd if=/dev/mem of=/root/mem.bin bs=1024
dd if=/dev/cdrom of=/root/cd.iso
# 建立 256MB 檔案
dd if=/dev/zero of=/swapfile bs=1024 count=262144
# 格式化為 swap
mkswap /swapfile
# 啟用
swapon /swapfile
# 開機自動掛載寫入 /etc/fstab
/swapfile swap swap defaults 0 0
dd if=/dev/urandom of=/dev/hda1
# 寫入測試
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
# 讀取測試
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero bs=1024 count=1000000 of=/root/test
dd if=/dev/zero bs=2048 count=500000 of=/root/test
dd if=/dev/zero bs=4096 count=250000 of=/root/test
dd if=/dev/zero bs=8192 count=125000 of=/root/test
比較各命令執行時間,耗時最短者即為最佳區塊大小。
dd if=/dev/sda of=/dev/sda
利用讀寫重新磁化磁通量點,可能恢復邊緣扇區。
# 來源主機
dd if=/dev/hda bs=16065b | netcat 1234
# 目的主機接收
netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
# 目的主機接收並壓縮
netcat -l -p 1234 | bzip2 > partition.img
netcat -l -p 1234 | gzip > partition.img
echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc
將第 i 個位元組改為 0x41(大寫 A)。