Dd

磁碟末尾的 dd 命令 bs 選項

  • March 17, 2018

如果我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文件中。任何可以處理二進制數據的工具,例如任何現代的cator head,都可以完成相同的工作,dd除非您傳遞諸如seekor之類的標誌skip

請注意,ddand共享的一個問題cat是,在成功操作時,它們會出錯並顯示“設備上沒有剩餘空間”(ENOSPC)。如果將其放入腳本中,則需要檢查錯誤是否為 ENOSPC 或使用不同的方法。一種更可靠的方法是首先確定設備的大小(例如/proc/partitions在 Linux 下使用),然後使用諸如head.

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX

引用自:https://unix.stackexchange.com/questions/430761