最可靠的方法是用 sudo blockdev --getpbsz /dev/sda,它直接从内核驱动读取硬件真实的物理扇区大小(单位字节),不依赖分区表或文件系统;返回值来自底层 ioctl 调用,是设备固件或控制器实际暴露的物理块粒度。

最可靠的方法是用 sudo blockdev --getpbsz /dev/sda,它直接从内核驱动读取硬件真实的物理扇区大小(单位字节),不依赖分区表或文件系统。
为什么这个命令最准
- 返回值来自底层 ioctl 调用,是设备固件或控制器实际暴露的物理块粒度
- 比
fdisk -l里显示的 “Sector size (logical/physical)” 更可信,后者只是猜测或缓存值 - 对 NVMe、SMR 盘、USB-SATA 桥接盘等复杂设备也适用
如果 --getpbsz 失败,试试 fallback 方式
cat /sys/block/sda/queue/physical_block_size
这个 sysfs 值由内核在设备识别阶段设置,虽不如 ioctl 实时,但比用户空间工具估算更稳。
别信这些常见误导来源
-
fdisk -l输出的 I/O size (minimum/optimal):这是队列建议值,不是物理扇区 -
lsblk:完全不显示扇区信息,只管挂载和容量 - 对
/dev/sda1运行--getpbsz:会报错,必须作用于整块磁盘(如/dev/sda)
验证是否对齐的小技巧
拿到物理扇区大小后(比如 4096),再看 fdisk -l 中分区的 Start 值:
- 实际字节偏移 = Start × 512(因为 fdisk 默认按 512 字节扇区计数)
- 若该偏移能被物理扇区整除(如 2048 × 512 = 1048576 ÷ 4096 = 256),就对齐了
- 更省事:用
parted -l看 Aligned: yes/no 字段,它内部就调用了--getpbsz
不复杂但容易忽略











