dd 的用法
dd 是 data duplicator 的簡稱,也就是 data 複製器。
常見的用法為:
$ dd if=/dev/sda1 of=/dev/sda2 bs=4096 conv=noerror
if 為指定 data 的讀取來源。
of 為指定 data 的寫入位置。
bs 為 block size,指定每次讀寫的 data 長度。
conv 為在複製 data 時,可以加入的屬性。
實用範例
複製 sda1 的 data 到 sda2:
$ dd if=/dev/sda1 of=/dev/sda2 bs=4096
轉換 sda1 的 data 為 system.img:
$ dd if=/dev/sda1 of=system.img bs=4096
將 system.img 寫到 sda2:
$ dd if=system.img of=/dev/sda2 bs=4096
清空 sda1:
$ dd if=/dev/zero of=/dev/sda1 bs=4096
計算 sda1 的大小(以 MB 為單位)
$ dd if=/dev/sda1 of=/dev/null bs=1M
將 file1 的前 512 bytes 以 0 取代
$ dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
notrunc 代表不要將輸出檔案截短,只取代開頭的前 512 bytes,其餘內容不變。
進階範例 1
產生一個 4 GB 的 ext4 磁碟,掛載到 /data/ 下或是寫到 /dev/sdb2:
產生 4 GB 的檔案
$ dd if=/dev/zero of=image_4g.img bs=1M count=4096
格式化 image_4g.img
$ mkfs.ext4 image_4g.img
掛載到資料夾
$ mount image_4g.img /data/
或是寫到 /dev/sdb2
$ dd if=image_4g.img of=/dev/sdb2 bs=1M count=4096
進階範例 2
已有 test.bin 檔,大小為 3KB,如何以 0xFF 把檔案擴增到 4KB:
產生 1 KB 的檔案,內容全為 0xFF
$ dd if=/dev/zero ibs=1024 count=1 | tr "\000" "\377" > padding_1kb.bin
(tr 指令可以替換指令,把 0x00 換成 0xFF,上述的 000 及 377 是 8 進制表示法。)
把 padding_1kb.bin 附加到 test.bin
$ cat padding_1kb.bin >> test.bin
Reference
