為什麼 dd 不覆蓋現有數據?

為什麼 dd 不覆蓋現有數據?

當我用dd工具向磁碟寫入隨機資料時,我可以再次存取舊資料。為了測試它,我首先在磁碟上新增了一個「text.txt」文件,並在其中寫入「這是文字」。我的磁碟掛載到/mnt/backup目錄。

$ cat /mnt/backup/text.txt
this is text
$

我用的是 dd:

$ dd if=/dev/urandom of=/dev/sdb1 #this is the disk mounted to the /mnt/backup directory
1025+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 14,4948 s, 74,1 MB/s
$

如果我嘗試列出磁碟的內容,則不會得到任何結果,但是當我鍵入完整的檔案名稱時,我可以列印檔案的內容。

$ ls -l /mnt/backup/
total 0
$ cat /mnt/backup/text.txt
this is text

為什麼會出現這種情況?我所期望的是現有的數據也會被覆蓋。如果我知道完整的檔案名,我仍然可以存取資料。我錯過了什麼重點?

答案1

數據可能被覆蓋,但其中一些數據仍然緩存在記憶體中。

當您像這樣直接寫入裝置時,它會繞過 Linux 檔案系統快取機制並直接寫入裝置。當時快取中的內容至少暫時不受影響。如果檔案系統仍然掛載,作業系統甚至可能在您使用 dd 擦除磁碟後將一些髒頁寫回磁碟。

然而,Linux 最終可能會注意到檔案系統已損壞,這可能會導致核心崩潰。

為了獲得最佳結果,在開始直接在裝置上書寫之前應先卸載檔案系統。

相關內容