dd#

dd 是包含在 GNU Coreutils 內的資料轉換與複製工具

dd (Data Duplicator / Disk Dump) 是 Linux 系統中用於底層資料流複製與轉換的指令。與 cp 不同,dd 可以直接對區塊裝置(如硬碟、分割區)進行讀寫。它通常被稱為「資料搬運工」,廣泛應用於製作系統映像檔 (.iso)、備份磁碟分區、或是徹底抹除硬碟資料。由於其操作具備高度危險性(誤下指令可能導致整顆硬碟遺失),常被戲稱為 “Disk Destroyer”。

Install#

$ sudo apt install coreutils

Setting in up#


Operate#

製作開機隨身碟#

sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress

備份整個硬碟到映像檔#

sudo dd if=/dev/sda of=backup.img bs=64K

徹底抹除硬碟資料 (填入全零)#

sudo dd if=/dev/zero of=/dev/sdc bs=1M status=progress

測試寫入速度 (建立一個 1GB 的測試檔)#

$ sudo dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct status=progress

關鍵字名稱說明
ifInput File資料來源。可以是一般檔案或裝置路徑(如 /dev/sdb)。
ofOutput File資料目的地。可以是檔案路徑或裝置路徑。
bsBlock Size區塊大小。設定一次讀寫的位元組數(如 4M, 1G),對效能影響極大。
countCount複製數量。指定要複製多少個 bs 單位的資料區塊。
參數範例指令說明
status=progressdd if=... of=... status=progress顯示進度。在複製過程中即時顯示已傳輸量、速率與耗時。
conv=noerrordd ... conv=noerror忽略錯誤。遇到磁區損壞等讀取錯誤時不停止,繼續複製後續資料。
conv=syncdd ... conv=sync同步填充。與 noerror 連用,遇到錯誤時填入零,以保持剩餘資料的位置正確。
conv=notruncdd ... conv=notrunc不截斷。在寫入現有檔案時,不要清空或縮減目標檔案的其餘部分。
iflag=directdd ... iflag=direct直接 I/O
skip=Ndd ... skip=100跳過來源。讀取時略過來源檔案開頭的 N 個區塊。
seek=Ndd ... seek=100跳過目標。寫入時略過目標檔案開頭的 N 個區塊再開始寫入。
模式說明詳細解釋
磁碟備份全碟鏡像將整個硬碟或分割區的資料流完整導出成一個 .img 檔案。
資料抹除填充零或隨機數透過讀取 /dev/zero/dev/urandom 來徹底覆蓋磁碟空間。
跳過/尋找skip / seek在讀取或寫入時跳過特定的區塊,用於修改特定偏移量的資料。
大小寫轉換conv=ucase在資料傳輸過程中,即時將文字從「小寫」轉換為「大寫」。

Reference#

Official docs: