dd#
dd 是包含在 GNU Coreutils 內的資料轉換與複製工具
dd (Data Duplicator / Disk Dump) 是 Linux 系統中用於底層資料流複製與轉換的指令。與
cp不同,dd可以直接對區塊裝置(如硬碟、分割區)進行讀寫。它通常被稱為「資料搬運工」,廣泛應用於製作系統映像檔 (.iso)、備份磁碟分區、或是徹底抹除硬碟資料。由於其操作具備高度危險性(誤下指令可能導致整顆硬碟遺失),常被戲稱為 “Disk Destroyer”。
Install#
$ sudo apt install coreutilsSetting 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
| 關鍵字 | 名稱 | 說明 |
|---|---|---|
| if | Input File | 資料來源。可以是一般檔案或裝置路徑(如 /dev/sdb)。 |
| of | Output File | 資料目的地。可以是檔案路徑或裝置路徑。 |
| bs | Block Size | 區塊大小。設定一次讀寫的位元組數(如 4M, 1G),對效能影響極大。 |
| count | Count | 複製數量。指定要複製多少個 bs 單位的資料區塊。 |
| 參數 | 範例指令 | 說明 |
|---|---|---|
status=progress | dd if=... of=... status=progress | 顯示進度。在複製過程中即時顯示已傳輸量、速率與耗時。 |
conv=noerror | dd ... conv=noerror | 忽略錯誤。遇到磁區損壞等讀取錯誤時不停止,繼續複製後續資料。 |
conv=sync | dd ... conv=sync | 同步填充。與 noerror 連用,遇到錯誤時填入零,以保持剩餘資料的位置正確。 |
conv=notrunc | dd ... conv=notrunc | 不截斷。在寫入現有檔案時,不要清空或縮減目標檔案的其餘部分。 |
iflag=direct | dd ... iflag=direct | 直接 I/O |
skip=N | dd ... skip=100 | 跳過來源。讀取時略過來源檔案開頭的 N 個區塊。 |
seek=N | dd ... seek=100 | 跳過目標。寫入時略過目標檔案開頭的 N 個區塊再開始寫入。 |
| 模式 | 說明 | 詳細解釋 |
|---|---|---|
| 磁碟備份 | 全碟鏡像 | 將整個硬碟或分割區的資料流完整導出成一個 .img 檔案。 |
| 資料抹除 | 填充零或隨機數 | 透過讀取 /dev/zero 或 /dev/urandom 來徹底覆蓋磁碟空間。 |
| 跳過/尋找 | skip / seek | 在讀取或寫入時跳過特定的區塊,用於修改特定偏移量的資料。 |
| 大小寫轉換 | conv=ucase | 在資料傳輸過程中,即時將文字從「小寫」轉換為「大寫」。 |
Reference#
Official docs: