「Storage」- 分区对齐(Partition Alignment)

  CREATED BY JENKINSBOT

问题描述

我们将学习分区对齐的概念,这并非是遇到相关问题,而是接触到该概念,需要作为知识储备;

该笔记将记录:我们将了解分区对齐相关的部分内容,以及相关问题的解决办法;

解决方案

Wikipedia/Partition alignment 中,有针对分区对齐的很多解释。我们这里仅做部分记录,目的是理解分区对齐的概念(错误再所难免,但我们将仅能量避免错误);

对齐的基本概念

数据是以文件的方式保存在设备上,而文件系统则是放在 SSD 的保存单元上。当没有分区对齐时,就算访问一个小文件,此时小文件的位置在 SSD 上会生成跨区的情况,就会动到 SSD 上的很多个 Block, 动到多个 Block 最大的坏处,最明显的就是访问时的速度会有很大的差别;

所示如图,针对 Cluster(红色)的访问,底层需要访问两个 Block 单元。而在更底层中,访问这两个 Block 则需要访问三个 Chunk 单元:

所示如图,当对齐后,访问 Cluster 仅需要访问一个 Chunk 单元:

分区不齐的成因

HDD 基本保存单位是扇区(Sector,512-BYTE),但读写及逻辑单位称为簇(Cluster) 。一个 Cluster 包括一个以上的扇区,如 NTFS 格式化时默认为 8 个扇区,即 4096-BYTE 即 4K。而 SSD 的物理基本读写单位称为 Page,大小为 4KB;

Windows XP 文件系统虽然不以扇区为访问配置单位,但分区时却会用扇区(0.5K)为最小单位来赋予分区开始的地址,SSD 为了与 BIOS 及操作系统兼容,要将每个 page 模拟成以 0.5K 为单元的扇区(512 emulation,512e)。而硬盘分区时,每一个分区的位置可从任一扇区开始。若分区的开头位置没和 SSD Page 的开头位置叠加,这时 0.5K 就有可能落入 4K 的内部,就会生成“没对齐”的问题;

        +-------+-------+-------+-------+-------+-------+-------+-------+-------+
        |  512  |  512  |  512  |  512  |  512  |  512  |  512  |  512  |  512  | ...
+-------+-------+---------------+---------------+---------------+---------------+
|     Page      |     Page      |     Page      |     Page      |     Page      | ...
+---------------+---------------+---------------+---------------+---------------+
|                                     Block                                     | ...
+-------------------------------------------------------------------------------+

分区不齐的后果

在写入时,如果没有分区对齐,写人一个小文件,就会写到多个 SSD 的 Page/Block/Die 上,此时不同的 Die 就会生成 P/E Cycle,,会让 SSD 的寿命变短,因此一个小小分区上的失误,会导致性能不良,寿命缩短,可见“分区对齐”对 SSD 在 Windows XP 下的重要性!

SSD 上的分区没对齐时,写人时一次要访问多个内存 Die,性能就会有问题,尤其是在连续小文件写人时,其至会感觉间歇性卡顿。

        +---------------+
        |      File     |
        +-------+-------+-------+-------+-------+-------+-------+-------+-------+
        |  512  |  512  |  512  |  512  |  512  |  512  |  512  |  512  |  512  | ...
+-------+-------+---------------+---------------+---------------+---------------+
|     Page      |     Page      |     Page      |     Page      |     Page      | ...
+---------------+---------------+---------------+---------------+---------------+
|                                     Block                                     | ...
+-------------------------------------------------------------------------------+

正如开始,现在访问这个文件,在底层需要访问两个 Page 单元。如果分区对其,仅需要访问单个 Page 单元;

检查分区对齐

for Windows

查看磁盘起始偏移:
1)msinfo32
2)系统信息 / 组件 / 存储 / 磁盘;
3)磁盘起始偏移,若概数字能被 1024 整除,则通常表示对齐;

AS SSD Benchmark,能够直接测试是否对齐;

对齐检查需要如下参数:
1)Partition Offset
2)File Allocation Unit Size:通常 4K(4096-BYTE)
4)NAND Erase Block Size
3)NAND Page Size

配置分区对齐

for Linux

GParted

for Windows

diskpart> create partition primary size=xxx align=1024