Dd

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

  • October 31, 2021

當我使用 dd 工具在磁碟上寫入隨機數據時,我可以再次訪問舊數據。為了測試它,我首先在磁碟中添加了一個“text.txt”文件,並在其中寫入了“this is text”。我的磁碟掛載到 /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

為什麼會這樣?我的預期是現有數據也會被覆蓋。如果我知道完整的文件名,我仍然可以訪問數據。我錯過了什麼?

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

當您像這樣直接寫入設備時,它會繞過 linux 文件系統記憶體機制並直接進入設備。當時記憶體中的內容至少暫時不受影響。如果文件系統仍然掛載,作業系統甚至可能在你用 dd 擦除後將一些臟頁寫回磁碟。

但是,linux 最終可能會注意到文件系統已損壞,這可能會導致核心崩潰。

為獲得最佳效果,應先解除安裝文件系統,然後再開始直接在設備上塗鴉。

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