# 扇区4k对齐

#Disk #分区格式 #分区对齐

Documnet：
1. [https://www.diskgenius.cn/exp/about-4k-alignment.php](https://www.diskgenius.cn/exp/about-4k-alignment.php)
2. [https://study.qqcf.com/web/445/73426.htm](https://study.qqcf.com/web/445/73426.htm)

# 扇区
扇区的概念来自于物理硬盘，扇区是硬盘最小的物理存储单元。

之前的硬盘比较小，扇区的大小是512B。后来硬盘容量变大了，扇区的大小变成了4K。

但是为了兼容以前的系统读写，又发明了一个逻辑扇区的概念。
所谓的逻辑扇区就是硬盘内部，将4K的物理扇区在逻辑上划分为多个扇区片段，并将其作为普通的扇区（一般为512字节大小）报告给操作系统及应用软件。实际读写时，由硬盘内的程序（固件）负责在逻辑扇区与物理扇区之间进行转换，上层程序“感觉”不到物理扇区的存在。

所以逻辑扇区是一个人为制造的概念，**在操作系统要读写某个逻辑扇区时，硬盘底层在实际操作时都会读写逻辑扇区所在的整个物理扇区**。

# 簇
文件系统是操作系统和硬盘之间的接口。当我们需要读取一个文件的时候，会请求相应的文件系统打开一个文件。但是操作系统无法对数目众多的扇区（逻辑扇区）进行寻址，所以操作系统就会将相邻的扇区组合在一起，形成一个簇（Cluster）。

而且操作系统为了更好地管理磁盘空间和更高效地从硬盘读取数据，规定**一个簇中只能放置一个文件的内容**。因此文件所占用的空间，只能是簇的整数倍。

==即使文件实际大小小于一个簇的大小，它也要占一个簇的空间==。

所以，一般情况下文件所占空间要略大于文件的实际大小，只有在少数情况下，即文件的实际大小恰好是簇的整数倍时，文件的实际大小才会与所占空间完全一致。

计算文件所占空间时，可以用如下公式： 
>簇数=取整(文件大小/簇大小)+1 
>所占空间=簇数×磁盘簇大小

# 分区和格式化
分区是指从磁盘上划分出来的一大片连续的扇区。

格式化则是对分区范围内扇区的使用进行规划。
比如文件数据的储存如何安排、文件属性储存在哪里、目录结构如何存储等等。

格式化程序会将分区里面的所有扇区从头至尾进行分组，划分为固定大小的“簇”，并按顺序进行编号。每个“簇”可固定包含一个或多个扇区，其扇区个数总是2的n次方。格式化以后，分区就会以“簇”为最小单位进行读写。文件的数据、属性等等信息都要保存到“簇”里面。

# 分区对齐
**划分分区时，是以逻辑扇区为单位进行划分的**，分区可以从任意编号的逻辑扇区开始。

如果分区的起始位置没有对齐到某个物理扇区的边缘，格式化后，所有的“簇”也将无法对齐到物理扇区的边缘。

如下图所示，每个物理扇区由4个逻辑扇区组成。分区是从3号扇区开始的。格式化后，每个簇占用了4个扇区，这些簇都没有对齐到物理扇区的边缘，也就是说，每个簇都跨越了2个物理扇区。 

![为什么要分区对齐](https://www.diskgenius.cn/exp/img/4k-align-01.png)  

由于磁盘总是以物理扇区为单位进行读写，在这样的分区情况下，当要读取某个簇时，实际上总是需要多读取一个物理扇区的数据。比如要读取0号簇共4个逻辑扇区的数据，磁盘实际执行时，必须要读取0号和1号两个物理扇区共8个逻辑扇区的数据。同理，对“簇”的写入操作也是这样。显而易见，这样会造成读写性能的严重下降。

下面再看对齐的情况。如下图所示，分区从4号扇区开始，刚好对齐到了物理扇区1的边缘，格式化后，每个簇同样占用了4个扇区，而且这些簇都对齐到了物理扇区的边缘。

![为什么要分区对齐](https://www.diskgenius.cn/exp/img/4k-align-02.png)  

在这样对齐的情况下，当要读取某个簇，磁盘实际执行时并不需要额外读取任何扇区，可以充分发挥磁盘的读写性能。显然这正是我们需要的。

由此可见，**对于物理扇区大小与逻辑扇区大小不一致的磁盘，分区4K对齐才能充分发挥磁盘的读写性能。而不对齐就会造成磁盘读写性能的下降**。
