Dd

DCFLDD 和十六進制編輯器

  • December 11, 2009

我有時會使用 dcfldd,因為它比正常 dd 具有更多功能並且更易於使用。它提供一個恆定的狀態并快速更新它,它還具有模式輸入,這比從 /dev/zero 或任何其他設備讀取要快得多。

例如,假設我想用 dcfldd 擦除驅動器,我會做這樣的事情

dcfldd pattern="00" of=/dev/hda bs=4096

它會將“00000000”逐字節寫入驅動器,然後您可以使用 vf= 函式來驗證模式。

但是我注意到了一個問題,想知道你們是否可以提供幫助。當我執行這個

dcfldd pattern="FF" of=/dev/hda bs=4096; sync
or
dcfldd pattern="11111111" of=/dev/hda bs=4096; sync

我可以用 1 填充驅動器,而且速度非常快。在歸零後,我可以填充一個 74GB 的驅動器,比如說 5GB 的 1。如果我在 linux 中使用 xxd 或 hd 之類的十六進制編輯器,我可以看到所有的 1。

雖然如果我然後執行這個命令,

dcfldd pattern="00" of=/dev/hda bs=4096; sync

假設只有 1gb 的 0,仍然應該有 4gb 的 1。看到我寫了 5gb 的 1,而只有 1gb 的 0 超過了 1。

雖然如果我再看一個十六進制編輯器,驅動器全是 0,即使軟體聲明它只寫了 1gb 的 0。我試圖盡可能短地執行程序,幾乎在執行後立即發送 SIGINT。

關於為什麼會發生這種情況的任何想法,你可以複製它嗎?

如果您指定塊數而不是手動中斷它會發生什麼?

time dcfldd pattern="FF" of=/dev/hda bs=4096 count=102400; sync

然後做

time dcfldd pattern="00" of=/dev/hda bs=4096 count=51200; sync

並比較結果時間。然後查看磁碟上的數據,看看 1 變為 0 的邊界是否是它應該在的位置(本例中約為 200 兆字節*)。

  • 那是真正的MB (1024*1024),而不是“可能”字節。

要獲得任何有意義的結果,除非您希望覆蓋整個分區或磁碟,否則您需要提供一個 count 參數。在您提供的範例中,您沒有指定計數。我無法理解您如何期望獲得 5gb 的 1 或 1gb 的 0。

引用自:https://serverfault.com/questions/93475