为什么使用dd写入随机数据会导致磁盘分区?

为什么使用dd写入随机数据会导致磁盘分区?

在运行该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

将 512 字节的集合定义为主引导记录0x55 0xAA是最后值的存在。产生这样一个值的概率为 65,536 分之一/dev/urandom:可能性不大,但同样不可能的事情总是会发生。

(其他一些分区表,例如苹果分区图,具有类似的短签名。您可能已经生成了其中之一。)

答案4

该分区之前是否存在于该磁盘上?如果磁盘使用 GPT,则辅助 GPT 标头可能已恢复,并且仍然具有旧的分区表。

https://en.wikipedia.org/wiki/GUID_Partition_Table

相关内容