Dd
磁碟末尾的 dd 命令 bs 選項
如果我
dd
按如下方式使用命令:dd if=/dev/zero of=/dev/sdX bs=16M
如果磁碟末尾不是 16M 的精確倍數,會發生什麼情況?這是否意味著磁碟的最後剩餘部分沒有歸零?
我在https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/中註意到,他寫道美國政府使用
dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc
該
conv=notrunc
選項是確保擦除每個最後一個字節的方法嗎?
整個輸出設備都會被擦除,無論其大小是否是您傳遞的塊大小的倍數
dd
。當輸出是設備文件時,該
notrunc
標誌無效,因為截斷設備文件無效。如果輸出是一個正常文件,它會產生輸出文件在寫入之前不會被截斷的效果,這在某些文件系統上意味著舊數據被覆蓋(而不是寫入新數據塊而其餘數據不附加),但是,這不會有用,因為並非所有文件系統都保證此屬性,此外,該命令不僅會覆蓋文件,還會繼續寫入,直到它填滿輸出磁碟(或發生其他一些錯誤)。而不是使用
dd
和擔心你是否正確使用它(碰巧,它在這種特殊情況下有效,但它很複雜,有時不起作用),只需使用cat
.cat /dev/zero >/dev/sdX
儘管網路上普遍存在這樣的看法,但絕對沒有什麼魔法
dd
可以讓它更適合寫入磁碟。魔法就在/dev
文件中。任何可以處理二進制數據的工具,例如任何現代的cat
orhead
,都可以完成相同的工作,dd
除非您傳遞諸如seek
or之類的標誌skip
。請注意,
dd
and共享的一個問題cat
是,在成功操作時,它們會出錯並顯示“設備上沒有剩餘空間”(ENOSPC)。如果將其放入腳本中,則需要檢查錯誤是否為 ENOSPC 或使用不同的方法。一種更可靠的方法是首先確定設備的大小(例如/proc/partitions
在 Linux 下使用),然後使用諸如head
.size=$(</proc/partitions awk '$4 == "sdX" {print $3}') head -c "${size}k" /dev/zero >/dev/sdX