在运行该dd
命令之前,该命令lsblk
返回以下输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
命令dd if=/dev/urandom of=/dev/sda conv=fsync status=progress
已运行。然而,该设备断电并关闭。当电源恢复时,该命令lsblk
返回以下输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
sda2 8:2 0 487.5G 0 disk
答案1
几种可能性:
Linux支持很多不同的分区表类型,其中一些使用很少的magic字节,然后很容易错误地识别随机数据(*)[因此可以随机生成一个有点“有效”的分区表]。
某些分区表类型在磁盘末尾也有备份(最著名的是 GPT),如果驱动器的开头被随机垃圾替换,则可以拾取备份。
设备无法正常工作,在写入数据之前就已断开连接,或者不断返回旧数据,因此分区表仍然存在。有时 USB 记忆棒会发生这种情况。
...
(*) 创建 1000 个包含随机数据的文件,看看结果如何:
$ truncate -s 8K {0001..1000}
$ shred -n 1 {0001..1000}
$ file -s {0001..1000} | grep -v data
0099: COM executable for DOS
0300: DOS executable (COM)
0302: TTComp archive, binary, 4K dictionary
0389: Dyalog APL component file 64-bit level 1 journaled checksummed version 192.192
0407: COM executable for DOS
0475: PGP\011Secret Sub-key -
....
随机粉碎驱动器的目标是让旧数据永远消失。不保证驱动器之后会显示为空、未使用且处于原始状态。
通常会通过零擦除来实现这一目标。如果您使用 LVM,LVM 将您创建的任何 LV 的前几个扇区清零是正常的,这样旧数据就不会干扰。
还有一个专用实用程序 ( wipefs
) 可以删除旧的魔术字节签名,您可以使用它来删除文件系统和分区表元数据。
答案2
从这里可以看出,MBR(主引导记录)相对简单;https://en.wikipedia.org/wiki/Master_boot_record。
当你使用时,/dev/urandom
你总是可以创建一些看起来像分区表的东西。解决方案是将分区表区域填充为零并用于dev/urandom
其余部分。
Linux 还支持其他附加磁盘格式,这些格式也可能被触发,导致在填充随机数据时显示“无效”分区。
答案3
答案4
该分区之前是否存在于该磁盘上?如果磁盘使用 GPT,则辅助 GPT 标头可能已恢复,并且仍然具有旧的分区表。