我熟悉分区是什么,但我看到了Ask Ubuntu 上关于对齐分区的问题,然后意识到我不知道“对齐分区”是什么。
那么“对齐”分区意味着什么?它有什么好处和坏处?
答案1
对齐分区意味着将其对齐以匹配真实的底层块结构。
长期以来,硬盘一直使用 512 字节块。由于这种情况已经持续了很长时间,现在几乎不可能更改块大小。需要修复太多软件。
在 SSD 上,真实块大小可能是 128 KB。在 RAID 阵列上,它可能是 64 KB。在高级格式驱动器上,它将是 4 KB。
为了向后兼容,驱动器继续使用 512 字节块。但出于性能原因,您的系统确实应该知道真实的块大小。
最简单的性能调整之一是将驱动器分区与真实的块大小对齐,以便当您的操作系统写入 4 KB 或 64 KB 或 128 KB 时,它会写入一个完整的块。
如果分区未对齐,则结果将是向第一个块写入 512 字节,向第二个块写入 4K - 512 字节,从而强制磁盘/SSD/RAID 执行二读取-修改-写入循环,而不是一写。
答案2
驱动器几乎总是被划分为 512 字节的逻辑扇区,其他大小也是可以的,但由于兼容性问题,很少使用。对于较旧的硬盘,这些是可以单独写入的独立扇区。
直到 2000 年代中期,分区传统上都是与“柱面”边界对齐的。由于历史原因,“柱面”通常有 63 个扇区。扇区 0 包含引导扇区和分区表。柱面 0 中的后续扇区有时会包含引导加载程序的附加信息。第一个分区通常从柱面 1 的开头开始。
大多数文件系统将扇区分组为较大的块(有时称为“簇”)。这些块的大小通常为 4KiB。
驱动器供应商曾表示,如果他们也使用 4K 物理扇区,效率会更高,但出于兼容性原因,他们将逻辑扇区大小保持在 512 字节。如果主机一次读取或写入整个物理扇区,速度会很快。如果只读取部分物理扇区,速度仍然很快,因为驱动器可以丢弃不需要的数据。但是,如果主机只写入物理扇区的一部分,驱动器必须读取物理扇区,将读取的数据与来自主机的数据相结合,然后重写修改后的扇区。这意味着等待驱动器旋转到位两次而不是一次。
如果文件系统的 4K 簇与驱动器的 4K 物理扇区对齐,这种方法效果很好。不幸的是,传统的驱动器分区方式意味着第一个分区基本上肯定会错位,而后面的分区对齐的几率只有 1/8。因此,高级格式驱动器的供应商不得不匆忙推出工具来帮助人们重新对齐分区。
类似的考虑因素也适用于 RAID 阵列和 SSD。虽然 RAID 条带可能比单个文件系统集群大得多,但某些文件系统可能具有按 2 的幂边界对齐的区域或类似物。
当前的正常做法是将分区与 1MiB 边界对齐,该边界是 2 的足够大的幂,是所有常见块大小的倍数。
答案3
分区是块,按照长期以来的惯例,一个块是 512 字节。
因此,分区可以从磁盘内的 512 字节的任意倍数开始,“看作”一个非常长的字节串。
但是,底层磁盘硬件起初扇区大小以前也是 512 字节,现在为了提高效率使用更大的扇区。假设是 4096 字节。
出于兼容性原因,操作系统和硬件之间的固件仍然“以扇区为单位”。因此,您询问第一个扇区,硬件会检索第一个块(4096 字节),固件会提取并传送相应的片段。您询问第二个块,该块可能从缓存中检索。
到目前为止,扇区大小不匹配没有任何缺点。
但操作系统还使用块(通常称为簇) 以提高效率,并将它们与分区对齐。因此,4 扇区集群将由扇区 5、6、7 和 8 组成。
当操作系统请求文件系统集群#2,固件被要求逻辑5、6、7 和 8 区。如果它们都在同一个磁盘块,则磁盘必须执行一次读取或写入。
但是如果分区从“错误”的扇区开始,则文件系统中的第一个群集将例如简化为第 2、3、4 和 5 扇区。然后它们可能一半在第一个磁盘块(1-2-3-4),一半在第二个磁盘块(5-6-7-8)。
你现在需要额外阅读。对于 1:1 的 OS 与磁盘比率,这相当于将读取次数加倍。如果 OS 与磁盘比率为 2:1,一个集群是两个硬件磁盘块,则需要 2+1 = 3 次读取,损失为 50%:
OS |--- cluster 12 ---|--- cluster 13 ---|--- cluster 14...
| | |
HDD --|----|----|----|-a--|--b-|-c--|-d--|-e--|----|--- BAD
| | |
HDD |----|----|----|----|-a--|--b-|-c--|-d--|----|----|--- GOOD
上图中,一个簇由 4 个硬件块(比例为 4:1)组成,每个块有 2 个扇区。在“偶数”扇区上对齐意味着要读取一个簇,这 8 个扇区读取将转换为 4 个块读取。在奇数扇区上对齐意味着同样的 8 个扇区读取需要 4+1 = 5 个块读取,性能损失为 25%(每 4 个读取增加一次读取)。
如果您的磁盘未对齐且比例为 4:1,则对齐它将使其速度提高 20%(每 5 次读取可节省一次)。
拥有多种大小的存储基本单元(可能是 512b、4K、32K、64K 甚至 128K,具体取决于技术)的预读、写回缓存,以及与存储布局对齐的 OS 文件系统,可以将读写的磁盘访问减少到最低限度,从而大大提高性能。
要使分区“对齐”,您需要将其偏移量从磁盘开头移动/设置为 512b 扇区的适当倍数,根据工具和您的意愿,将间隙保留为未分区或不分区,以便分区恰好从磁盘扇区边界开始。实际上:这样大多数操作系统集群就会在存储边界上对齐。
例如:假设您有一个文件系统,其数据部分从分区开头开始 50000 KB,并以 8 KB 的块为单位进行组织。如果存储有 16 KB 的块,那么这很好,因为 50000 KB 正好是 3125 个块。但是如果您有一个包含 64 KB 块的 NVMe 存储,那么 50000 KB 就是 781 个块四分之一,因此每个 64Kb 存储块将容纳 7 个完整的操作系统块和两个块碎片。通过使分区从 64Kb 块的 3/4 处开始(即 48Kb 处),数据部分偏移将精确对齐到第 782 个存储块。
答案4
不知道这是否有帮助,但我的理解是分区对齐是将给定分区与底层 RAID 条带单元对齐。
显然,当您使用基于硬件的 RAID 或基于软件的 RAID 时,性能可能会很差;如果分区的起始位置与在 RAID 上创建的磁盘分区中的条带单元边界不对齐,则可能会出现问题。
根据创建卷簇的因素,卷簇可能会创建在条带单元边界上,而不是条带单元边界旁边。此行为可能会导致错位分割。
我可能完全错了,这可能与 RAID 无关 ;)