为什么 Windows 和 Linux 在第一个分区之前留下 1MiB 未使用?

为什么 Windows 和 Linux 在第一个分区之前留下 1MiB 未使用?

在 Windows (diskpart) 或 Linux (gparted、fdisk) 下从头开始对 USB 闪存驱动器(8GB 或更大)进行分区,将其作为具有单个分区的主引导记录,该分区通常从字节 1048576 (1MiB) 开始。要在 Windows 下非破坏性地显示该值,请尝试(小写字符可选)

DISKPART
LISt DISk
SELect DISk !      (use appropriate disk number)
SELect PARtition 1
DETail PARtition   (among other things, tells where the partition starts)
EXIt

对于 1GB 到 4GB 的驱动器,该值降至 65536(64kIB)。在 diskpart 下,(DESTRUCTIVE)CLEan应该CREate PARtition PRImary OFFSET=32将其减少到 32kiB,但如果低于 diskpart 所需的最小值(1024 或 64,具体取决于驱动器),则会被默默忽略。较低的值会导致错误。

在 OS X(磁盘实用程序)下分区并请求 MBR 时,第一个分区位于 1024(1kiB)。这大约多出了 1MiB 的可用空间(对于 8GB 驱动器而言)。我没有发现任何缺点。

当然,Windows 和 Linux 分区工具的这种习惯最多会损失 0.012% 的空间。但是:其理由是什么?

答案1

第一个分区之前的区域用于 膜生物反应器 它本身以 Bootstrap 代码区域开始,以 Boot 签名(十六进制 55AA)结束。

由于 MBR 指向所有后续分区(包括第一个分区),因此第一个分区可以位于 MBR 的任何偏移处,而不会产生任何不良影响。这就是为什么不同的操作系统可以为该分区选择他们喜欢的任何偏移量,而实际上没有任何缺点。

第一个分区之前的这个区域也称为隐藏部门,它们是驱动器上不属于分区的扇区。

OS X 显然走自己的路,但 Linux 选择在第一个分区的偏移量方面追随 Windows。那么微软为什么选择这个值呢?

第一份描述为何选择偏移量值 1048576 的 Microsoft 文档如今只能在 WayBack Machine 文章中找到 Windows Vista 支持大扇区硬盘驱动器,其中写道:

Windows Vista 中的文件系统、卷管理器和存储堆栈的其他部分已更新,以适应具有大扇区大小的硬盘驱动器。在早期版本的 Windows 中,硬盘驱动器上第一个分区的默认起始偏移量为扇区 0x3F。由于此起始偏移量为奇数,因此由于分区和物理扇区之间未对齐,它可能会导致大扇区驱动器出现性能问题。在 Windows Vista 中,默认起始偏移量通常为扇区 0x800。

请注意,0x800 个 512 字节的扇区(大扇区磁盘之前的扇区大小)正好是 1048576 字节。

微软工程师选择的起始偏移量应能为任何大扇区驱动器制造商可以生产。大扇区驱动器需要这样做,因为物理扇区和分区的大小不一致会导致性能问题。

微软本可以选择任意偶数个扇区的偏移量,只要该偏移量能被新大扇区的大小整除,就可以解决任何错位问题。他们本可以选择 32、64 甚至 128 KiB 的偏移量,但他们选择了 1 MiB。

为什么?——我没有答案。他们只是选择了这个,可能认为这个容量对于未来的任何大型磁盘来说都足够大。在这一点上他们是对的,因为这个容量对于当今跨越 TB 的大型磁盘来说也足够了。

相关内容