fdisk -lu 输出的 start 值乘以逻辑扇区字节数得出物理偏移量,才是可靠对齐依据;parted -l 的 aligned: yes 因依赖内核抽象,在 raid、nvme 或虚拟化下可能误判。

直接看 fdisk -lu 输出里的 Start 值,再结合顶部的 Sector size 行,就能算出字节级偏移量——这才是真正可比对的对齐依据。
用 fdisk -lu 查分区起始扇区和逻辑扇区大小
这是最底层、不依赖内核抽象的查法,适合排查性能异常或验证其他工具结果是否可信。
- 必须加
-u:否则fdisk -l可能按柱面(cylinders)显示,数值完全不可用于对齐计算 - 运行
sudo fdisk -lu /dev/sdX(把sdX换成你的磁盘,如sda或nvme0n1) - 先看输出顶部的
Sector size (logical/physical)行:它告诉你换算基准,比如512 bytes / 4096 bytes - 再找目标分区行(如
/dev/sda1),记下Start列数字(例如2048) - 物理偏移量 =
Start× 逻辑扇区字节数(即上面logical的值)
为什么不能只看 parted -l 的 Aligned: yes
Aligned: yes 是个方便结论,但它依赖内核提供的 optimal_io_size 和 alignment_offset。这些值在某些场景下会失真。
- RAID 卡、NVMe 命名空间、虚拟化层(如 QEMU、VMware)可能返回错误的
alignment_offset,导致Aligned: yes但实际未对齐 - 旧版
parted( - 云盘(阿里云云盘、腾讯云 CBS)在虚拟机里显示
Aligned: yes,但宿主机存储池若未对齐,上层全白搭 - 真正要信的,是
Start × logical_block_size这个字节数能否被 4096 整除(主流情况)
用 blockdev --getss 和 cat /sys/block/.../queue/logical_block_size 确认逻辑扇区大小
别假设扇区一定是 512 字节——有些 SMR 盘、部分 NVMe 设备报告逻辑扇区为 4096 字节,这时“除以 8”的规则就失效了。
- 运行
sudo blockdev --getss /dev/sdX(注意:必须查整盘,如/dev/sda,查分区会报错或返回 0) - 等价命令(无需 root):
cat /sys/block/sdX/queue/logical_block_size - 若返回
512→ 对齐判断仍用Start % 8 == 0 - 若返回
4096→ 起始扇区号本身是整数即满足(但实践中仍应 ≥2048,兼容 BIOS 和固件) - 这个值决定了你后续所有偏移计算的乘数,漏掉这步,后面全错
交叉验证:用 parted align-check optimal 1 做决定性判断
这不是辅助手段,而是最终拍板。它绕过人工计算,直接读取设备硬件层的最优 I/O 边界参数并比对。
- 先确认分区编号:比如
/dev/sda1对应编号1,/dev/nvme0n1p2对应2 - 运行
sudo parted /dev/sdX align-check optimal 1 - 返回
1 aligned才算真正过关;返回1 not aligned就必须重分区 - 失败时别调
Start值硬凑——optimal_io_size和alignment_offset共同决定理论起点,手动设错会导致分区不可读 - 查底层参数:运行
cat /sys/block/sdX/queue/optimal_io_size和/sys/block/sdX/alignment_offset,能帮你理解为什么align-check失败
真正的对齐不是“看起来像”,而是 Start × logical_block_size 这个字节数,落在设备物理块边界上。很多人卡在只看 fdisk 的 Start 值,却忘了去 /sys/block/ 下确认它到底乘多少——这一步跳过,所有判断都只是猜测。











