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


11

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

@RuiFRibeiro-感谢您的类比,但是不清楚为什么dd会导致分区,特别是如果该命令旨在擦除磁盘时?
动机

1
巧合:与断电有关的可能性很小。您将随机数据写入设备。这些随机数据中的一些进入了前几个块,这就是分区表所在的位置。您可能最终定义了一个分区。
ctrl-alt-delor

你可以张贴的结果file /dev/sda*sudo fdisk -l /dev/sda*
phuclv

@phuclv-当我开始该过程时,输出仍然有价值吗?
动机

1
@Motivated请注意,其dd目的并不是为了擦除磁盘。将随机数据写入磁盘会产生随机结果。
jjmontes

Answers:


20

几种可能性:

  • Linux支持许多不同的分区表类型,其中一些使用很少的魔术字节,因此很容易错误标识随机数据(*)[因此可以随机生成某种“有效”分区表]。

  • 某些分区表类型在磁盘末尾也有备份(最著名的是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)摆脱旧的魔术字节签名,可用于摆脱文件系统和分区表元数据。


先前已使用ATA安全擦除命令擦除了设备。我假设这将删除1.这样的数据是无法恢复的2.没有分区信息可以保留。如果是这样,您是说运行dd命令时,中断时生成随机数据会导致数据看起来像分区表吗?这些也是SATA硬盘(非SSD)。
动机

5
随机数据可以看起来像任何东西。那就是随机的意思。您熟悉无限猴子定理吗?它指出,如果足够长的猴子在打字机上随机打字足够长的时间,它们中的一只将在某一时刻或另一时刻产生莎士比亚的完整作品。MBR分区表非常小(只有64个字节),没有校验和或验证,而且格式非常密集。64个字节的随机字符串很可能会产生有效的分区表。其他分区表格式同样简单。
约尔格W¯¯米塔格

是的,分区表只有64个字节,(最后)分区类型只有1个字节,并且条目必须合法或顺序。因此,将MBR上的第一个群集/扇区/ 512个字节归零是明智的。您也不想发生不可预测的引导行为,这种可能性较小,但仍然存在风险。
mckenzm

18

如此处所示,MBR(主启动记录)相对简单。https://en.wikipedia.org/wiki/Master_boot_record

使用时,/dev/urandom您始终可以创建类似于分区表的内容。解决方案是用零填充分区表区域,然后dev/urandom将其余部分使用。

Linux还支持其他可能也会触发的其他磁盘格式,从而在填充随机数据时导致显示“无效”分区。


13

将512字节的集合定义为“ 主启动记录”的是最后出现的值0x55 0xAA/dev/urandom产生这样一个值的机会是65,536分之一:不太可能,但是类似的事情一直在发生。

(某些其他分区表,例如Apple Partition Map,也具有类似的短签名。您可能已经生成了其中一个签名。)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.