最近,我换了一个新的硬件,享受着学习事物如何变化和如何运作的乐趣和琐事。
当我偶然发现使用 gparted 重新分区任务它自动选择将分区限制设置为整数 MB 值,因此偶尔会在分区之间留下小缝隙。
现在我想知道:
因为它只是一个任意数字(特别是考虑到带有低级存储控制器的 SSD),我的分区的开始或结束位置,
为什么在驱动器上留出这些空隙似乎是一个好选择?
干杯
答案1
这与分区对齐有关。本质上,在内部,您的硬盘被划分为多个扇区。每当硬盘执行操作时,它都会同时对整个扇区执行操作;也就是说,当它读取存储在扇区内的任何数据时,它必须读取整个扇区。如果数据分布在多个扇区上,它必须读取每个扇区的全部数据。分区上的文件系统还将可用空间分配到块中(块的大小通常是文件系统创建时的一个可调参数;对于主要由小文件组成的文件系统,您将使用小块大小;对于主要由大文件组成的文件系统,您将使用大块大小,目的是最大限度地减少浪费的空间 - 如果文件小于块大小,则块的其余部分将被浪费,但块大小越小,处理所有块的表就必须越大)。
现在,您基本上需要让文件系统块和磁盘扇区对齐 - 一个应该可以毫无余地放入另一个,而且至关重要的是,它们应该从同一位置开始,这样就不会出现小数重叠。假设您的磁盘扇区大小为 4kb,而您的文件系统以 1kb 的块为单位。如果您的分区从扇区开头的一个小偏移处开始 - 即使只有几个字节 - 文件系统中的每四个块实际上将分为两个扇区,因此,每次与该块交互时,您都必须读取/写入磁盘上的两个扇区。这是 25% 的开销,很快就会导致性能大幅下降。如果您的 FS 分配块大小与 HD 扇区大小相同(4k 对两者来说都不算不合理),并且您有这个偏移,则每次读取/写入都会出现此问题,这将对性能造成巨大影响。
为了避免这种情况,我们保守地将分区的开始与兆字节边界对齐(因为即使几年后我们拥有任何大规模驱动器,兆字节仍应是块/扇区大小的倍数)。如果分区大小不能完全匹配并恰好以兆字节边界结束,这可能会导致磁盘上出现微小的“间隙”。磁盘的开头总会留有间隙,因为磁盘上的前几个扇区是为其他目的保留的。
https://www.thomas-krenn.com/en/wiki/Partition_Alignment更详细地描述了这个问题。但是,正如指出的那样,与现代磁盘的大小相比,空间损失是相当微不足道的。
答案2
为什么在驱动器上留下这些空隙看起来是一个好的选择?
这似乎是“保护带”的使用。
有时我会看到(故意的?)未分配分区末尾的最后一个或两个轨道。
理论上它们应该不是必需的。
对于硬盘驱动器,分区过去通常被分配为从磁柱边界开始。这样的分配可以最大限度地减少分区内的寻道次数,从而提高整体访问时间。
但是现在硬盘驱动器使用区域位记录,分区程序实际上并不知道实际的驱动器几何形状和物理磁柱的位置,因此任何“磁柱对齐”基本上都是没有意义的。
对于固态硬盘,分区需要分配为占用整数个擦除块。由于 NAND 闪存芯片的读写扇区和页面大小以及擦除块的大小都是 2 的幂,因此以 2 的大幂(例如 1 兆字节)为单位来调整和对齐 SSD 分区的大小可以推断为包含整数个这样的页面/块。