为什么 Linux 显示没有分区的磁盘的设备分区块文件?

为什么 Linux 显示没有分区的磁盘的设备分区块文件?

我有一个 2TB 磁盘,已用随机数据覆盖。fdisk确认设备没有可识别的分区表。然而,我看到了磁盘的这 5 个设备文件: /dev/sdc{,1,2,3,4}

IE

# for i in /dev/sdc{,1,2,3,4} ; do fdisk -l -u $i ; done

Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc1: 555.1 GiB, 595985804288 bytes, 1164034774 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc2: 1.6 TiB, 1781956913152 bytes, 3480384596 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc3: 928.5 GiB, 997001973760 bytes, 1947269480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc4: 1 TiB, 1153125198336 bytes, 2252197653 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

同样,该设备没有分区表:

# fdisk /dev/sdc 

Welcome to fdisk (util-linux 2.25.2). 
Changes will remain in memory only, until you decide to write them. 
Be careful before using the write command. 

Device does not contain a recognized partition table. 
Created a new DOS disklabel with disk identifier 0x56b93c1d. 

Command (m for help): p 
Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos 

为什么会有分区设备——即为什么有 /dev/sdc{1,2,3,4} 而不仅仅是 /dev/sdc?此外,为什么分区设备的大小加起来没有达到 1.8TiB?

答案1

Linux 不会重新读取分区表,除非在启动(或磁盘连接)时或明确告知这样做时(例如,在写入分区表后通过 fdisk 或使用partxblockdev --rereadpt)。因此,在您执行其中一项之前,sdc[1-4]它将继续存在。

最简单的修复方法是调用partprobe命令内核重新读取所有设备上的分区表,或partprobe /dev/sdc仅重新读取该磁盘上的分区表。或者您可以使用 fdisk 写入该空分区表,然后 fdisk 将执行与partprobe.

另请注意,如果磁盘(或其任何分区)正在使用(例如,作为文件系统、交换、LVM PV 等),内核将不会重新读取它。当然,如果有正在使用的东西,那么当你只是擦拭它们时就会遇到问题。

最后,如果您已经尝试强制重新读取,则您的随机数据可能恰好与分区表签名匹配。 Linux 支持许多不同的分区表格式(该列表是在编译内核时选择的),其中一些分区表的签名小至一个字节,因此随机数据匹配的几率为 1/256。其他人的签名更长,所以机会要低得多。我不确定总体机会是什么,但快速检查内核日志将显示内核识别的分区表格式。

相关内容