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は最終的にファイルシステムが破損し、カーネルパニックが発生する可能性があることを発見できます。

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

関連情報