最准确方式是直接查看fdisk -l输出第三行“sector size (logical/physical):”字段,如“512 bytes / 4096 bytes”,左侧为逻辑扇区大小(决定start单位),右侧为物理扇区大小(决定对齐基准),无需换算且权威可靠。

直接看 fdisk -l 输出第二行的 “Sector size (logical/physical)” 字段,这是最准、最无需推理的方式。 其他命令要么不返回、要么需二次换算,容易出错。
fdisk -l 的 Sector size 行在哪
执行 sudo fdisk -l /dev/sda(把 /dev/sda 换成你的设备),输出开头几行就会有:
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes
关键就是第三行:Sector size (logical/physical): 512 bytes / 4096 bytes。左边是逻辑扇区大小(OS 看到的单位),右边是物理扇区大小(磁盘真实写入粒度)。
- 逻辑扇区(
--getss)决定Start列数值的单位:哪怕显示Start=2048,实际字节偏移是2048 × 逻辑扇区大小 - 物理扇区(
--getpbsz)决定对齐基准:分区起始必须是它的整数倍,否则 SSD/NVMe 性能暴跌 - 如果这行没出现(极少见),说明内核或设备未正确报告,应优先怀疑设备固件或连接问题
用 blockdev 验证逻辑和物理扇区值
当需要脚本化判断或验证 fdisk -l 是否可信时,用 blockdev 直接读取设备属性更底层:
-
sudo blockdev --getss /dev/sda→ 返回逻辑扇区字节数(如512或4096) -
sudo blockdev --getpbsz /dev/sda→ 返回物理扇区字节数(如4096) - 两者相等(如都是
4096)表示真·4K 原生盘;不等(如512/4096)是 Advanced Format 盘,需特别注意对齐 -
blockdev不依赖分区表,即使磁盘无分区、甚至未识别为块设备(但已出现在/sys/block/下),它仍可能返回有效值
parted -l 的 Aligned: 字段怎么用
sudo parted -l 不直接显示扇区大小,但它会基于物理扇区边界自动判断分区是否对齐,并在每一分区行末尾标出 Aligned: yes 或 Aligned: no:
- 它内部用的就是
blockdev --getpbsz获取的物理扇区大小作为对齐基准 - 例如物理扇区是
4096字节,而分区Start=2048,那么字节偏移 =2048 × 逻辑扇区大小;若逻辑是512,则偏移为1048576字节,能被4096整除 →Aligned: yes - 若
Aligned: no,别急着删分区——先备份,再用parted新建对齐分区(mkpart primary 1MiB 100%这类指定起始偏移的方式比fdisk更可控) -
parted -l的Aligned:是唯一面向结果的判断,比手动算更可靠
真正容易被忽略的是:fdisk -l 中的 Start 值永远以逻辑扇区为单位,而 parted 和内核 IO 调度器只认物理扇区对齐。这两者之间的换算一旦搞错,格式化能成功,IO 性能却可能掉一半——尤其在数据库或虚拟机场景下,这种降速不会报错,只会让你反复排查应用层。











