dd 是十分實用的 Linux / Unix 小工具, 它可以轉換及複製檔案。dd 指令可以 clone 硬碟, 備份及復原原始設備檔案等。以下文章會介紹 dd 的常用例子。
dd 使用方法很簡單, 預設會讀取 stdin 及寫入 stdout,如果要指定讀取及寫入的檔案, 使用 “if” 及 “of” 選項。以下是 dd 常見的使用例子, 使用 dd 備份硬碟的 MBR, 假設要備份的硬碟 MBR 是 /dev/dsa, 可以使用以下指令語法:
- $ sudo dd if=/dev/sda bs=512 count=1 of=mbr.img
要使用 dd 備份 MBR 需要 root 權限, 所以要用 sudo 執行, 或 su 到 root。然後設定 dd 指令後面用 if 選項指讀取 /dev/sda, 用 of 指定輸出到 mbr.img。
而 bs 及 count 表示要讀取的 block size 及 block 數量。由於 dd 預設 block size 是 512 bytes, 所以 bs=512 可以省略。
上面指令執行後, 會建立檔案 mbr.img, 是 MBR 的備份檔, 會看到類似以下的輸出:
1+0 records out
512 bytes copied, 0.000179891 s, 2.8 MB/s
dd 指令另一個常見例子是硬碟克隆, 例如要備份硬碟 /dev/sda, 可以用以下指令:
以上指令會把 /dev/sda 克隆到 /dev/another-disk, 而使用上要十分小心, 因為 dd 會直接把資料複製到目標硬碟, 目硬碟的資料會全部被刪除, 而不會有驚告。
上面的指令在備份時會很慢, dd 預設的 block size 很少, 可以把 block size 加大, 它的備份速度會加快不少, 例如:
可以看到上面把 block size 設定成 16MB, 這個數值在現今大多數電腦執行也沒問題, 如果是較舊的電腦, 可以把數值調小一點。
dd 預設執行時不會輸出內容, 這樣很難看到備份的進度, 這樣可以加入 status=progress, 這便會有實時的執行進度:
另一個常見例子是要把硬碟內的資料刪除, 這樣只要把輸入裝置設定成 /dev/zero, 而輸出裝置設定成要刪除資料的硬碟: