当我使用 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 最终可能会注意到文件系统已损坏,这可能会导致内核崩溃。
为获得最佳效果,应先卸载文件系统,然后再开始直接在设备上涂鸦。