背景
不论是MBR分区还是GPT分区,第一个分区的前面总有一段空闲的空间(除了MBR之外的空间),这段空间不属于任何分区。
这一段空间的意义
早期的操作系统对应的分区工具在分区的时候,其第一个分区总是63号扇区开始的,意味着在第一个分区之前总是有63个扇区,除了MBR扇区,其他的扇区都是空闲扇区。
This odd number is an artifact of cylinder-head-sector (CHS) addressing used in INT 13h, the legacy BIOS API used for disk access. On legacy systems and bootloaders that used the INT 13h API, all partitions must begin and end on cylinder boundaries. Even after logical block addressing (LBA) was introduced, fake CHS values (which did not correspond to the actual disk geometry) were used to maintain compatibility with the legacy API. Since CHS addressing originally supported a maximum of 63 sectors per cylinder, the first partition would begin on sector 63. Windows XP (before Service Pack 3) and earlier versions of Windows will not boot if the system volume isn't on a cylinder boundary.
从上面的引用可以看出,在最开始的BIOS中,INT13h的磁盘访问中断服务(早期的磁盘访问都通过该服务)要求磁盘分区必须是按照进行分配的,所以在早期磁盘的分区就必须按照柱面进行分配,即分区的以柱面对齐。对于早期磁盘来说,一个柱面上的某个盘面正好对应一条磁道,一条磁道上刚好有63个扇区,如果按照柱面分配,由于第一个扇区是MBR,所以那一个磁道上的所有扇区都不能分配给第一个分区,第一个分区必须从第二条磁道开始分配,导致第一个分区前面有一段空闲的扇区,这些扇区不属于任何分区。
后来磁盘引入了LBA寻址,磁盘的物理几何模型已经与CHS不相符了,但是为了保证兼容性,第一个分区之前依然要保留63个扇区,LBA0为MBR扇区,第一个分区从LBA63开始。这就是历史上的BIOS对磁盘分区的影响。
但是,随着磁盘容量越来越大,一些磁盘厂商的开始提供物理扇区为4KiB大小的磁盘,为了提高对磁盘的访问性能,分区就必须按照4KiB大小的物理扇区对齐进行访问,否则就会降低访问性能。
为什么不按照4KiB大小的物理扇区对齐进行分区就会造成性能访问损失呢?
对于物理扇区为4KiB的硬盘,其对外仍然提供逻辑扇区访问(LBA访问仍然是按照512Bytes大小寻址),逻辑扇区大小为512bytes。所谓逻辑扇区访问,其实就是将一个4KiB大小的物理扇区分成8份,8*512Bytes=4096Bytes。
当需要访问其中一个逻辑扇区并写入数据的时候,就需要先读出一个物理扇区,然后将物理扇区中其他逻辑扇区的数据与现在写入的逻辑扇区的数据进行整合,然后再写入这个物理扇区,这就造成一次逻辑扇区数据写入就需要先读再写,于是每次写入都多了一次读取数据与修改数据的过程,这就降低了写入性能,这被称为RMW(Read-Modify-Write)性能损失。
现代操作系统以及一些底层的磁盘访问软件,都已经支持4KiB的磁盘的访问了,当遇到磁盘的物理扇区大小为4KiB的时候,每次对磁盘的数据访问就会按照4KiB进行读写。
假设现在分区没有按照4KiB对齐,第一个分区从LBA63开始,则第8个物理扇区的最后1/8部分被分到了第一个分区,当操作系统访问第一个分区的时候,就会从该分区的第一个逻辑扇区开始访问,按照4KiB进行磁盘的数据读写,这就势必造成RMW性能损失,所以为了保证对这种磁盘的正常访问性能,磁盘分区就必须按照4KiB大小进行对齐。
那么,如果仍然按照原来的分区方式,第一个分区从LBA63开始,由于63不是8的倍数,使得分区没有按照4KiB进行对齐,于是就会造成RMW的性能损失问题。现代操作系统建议第一个分区从LBA2048开始,前面正好预留1MiB的空闲空间,2048正好是8的倍数,于是分区4KiB对齐了。
现代操作系统默认安装的时候,其第一个分区正好从LBA2048开始,不论是MBR分区还是GPT分区方式,都是如此。例如,windows和linux,它们在默认安装的时候,第一个分区都是从LBA2048开始的,而且假如使用其默认的分区工具,第一个分区默认也是从LBA2048开始的,当然用户使用分区工具分区的时候,可以自行指定第一个分区开始的位置,当然必须保证4KiB对齐。
个人觉得,直接默认就好。
至此,这一段空间为什么存在的原因完全理清了。
- BIOS影响导致第一个分区从LBA63开始。
- 4KiB对齐影响导致第一个分区从LBA2048开始。
对于linux来说,其使用grub进行引导,grub会充分利用这一段空闲的空间,其会将自身引导程序的一部分写入到这一段空间之中(MBR分区下是这样的,GPT分区下不是这样的。GPT分区下会将这一部分内容写入到另外的地方。),这是真节省呀。
磁盘分区方式对比(MBR与GPT)_lengye7的博客-CSDN博客