我正在运行 virtualbox 虚拟机,我可以看到 /dev/sda2 的大小在两个输出中显示不同。另外,在 fdisk 的输出中,/dev/sda2 和 /dev/sda5 似乎重叠
~$ lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 29.3G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 9.5G 0 part /
~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 29.3 GiB, 31457280000 bytes, 61440000 sectors
Disk model: VBOX HARDDISK
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
Disk identifier: 0x8f66391d
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1050623 1048576 512M b W95 FAT32
/dev/sda2 1052670 20969471 19916802 9.5G 5 Extended
/dev/sda5 1052672 20969471 19916800 9.5G 83 Linux
答案1
该sda2
分区是容器分区。它的格式与磁盘非常相似主引导记录(MBR)并被称为扩展引导记录(EBR),本身占用四个可能的主分区插槽之一。它的存在是为了克服 MBR 中 4 个分区的历史限制。它内部包含扩展分区(在 Linux 中从分区 5 开始显示)并相互链接:每个扩展分区还具有一个 EBR,其中包含两个条目:一个用于引用分区的数据本身,另一个用于引用下一个扩展分区的 EBR如果有的话。所有扩展分区(所以这里sda5
)都是里面它们的容器分区(此处sda2
),因此 fdisk 将始终报告重叠块。
来自膜生物反应器从我的角度来看,它使用了为在其中添加扩展分区而保留的所有空间,因此它的大小必须大于所有扩展分区的大小。
从向用户空间报告的内核 API 的角度来看lsblk
,分区 2 只是出于礼貌而显示的粘合分区,不应被篡改。报告的数据大小只是 EBR 开销,此处为 1K,否则对分区 2 的读取或写入(这已经很糟糕,因为它可能会破坏到其中所有扩展分区的初始链接)也将允许对分区 5 进行读取或写入。即使选择报告大小为 0,也没有多大关系。这与sda
代表整个磁盘的自身处理不同。当您考虑到更多扩展分区是从每个先前扩展分区的 EBR 链接时,这是有道理的:它们的内部 EBR 甚至不可用,只能看到它们的实际数据。
你应该考虑使用GPT分区而不是 MBR/EBR 分区:这是一种现代的分区方案,更加明智,并且没有此类限制和解决方法。或者你也可以选择左心室容量在一个(主要的,不需要扩展的)分区中:这也是一种用于在不同抽象层对块进行分区的容器形式,并提供了很多功能。