dd が既存のデータを上書きしないのはなぜですか?

dd が既存のデータを上書きしないのはなぜですか?

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

なぜこのようなことが起こるのでしょうか? 既存のデータも上書きされると思っていました。完全なファイル名がわかっていれば、データにアクセスできます。私が見逃した点は何でしょうか?

答え1

データはおそらく上書きされますが、その一部はまだメモリにキャッシュされています。

このようにデバイスに直接書き込むと、Linux ファイルシステムのキャッシュ メカニズムをバイパスしてデバイスに直接書き込まれます。その時点でキャッシュにあるものは、少なくとも一時的には影響を受けません。ファイルシステムがまだマウントされている場合、dd で消去した後、オペレーティング システムがダーティ ページの一部をディスクに書き戻すこともあります。

ただし、Linux は最終的にファイルシステムが破損していることに気づき、カーネル パニックが発生する可能性があります。

最良の結果を得るには、デバイスに直接書き込みを始める前にファイルシステムをアンマウントする必要があります。

関連情報