为什么 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 最终可能会注意到文件系统已损坏,这可能会导致内核崩溃。

为了获得最佳结果,在开始直接在设备上书写之前应先卸载文件系统。

相关内容