blockdev --getpbsz 是查看物理扇区大小最准确的方法,返回字节值(如4096),需作用于整盘设备(如 /dev/sda),不支持分区,结果权威稳定,可配合 /sys/block/sda/queue/physical_block_size 验证。

用 blockdev --getpbsz 查物理扇区大小最准
物理扇区大小(physical block size)不能靠肉眼猜,blockdev --getpbsz 是内核暴露的权威接口,返回值单位是字节,直接、稳定、不依赖分区表或挂载状态。
必须对整块盘操作,比如 /dev/sda,不能对分区如 /dev/sda1 —— 后者会报错 Invalid argument。
- 运行
sudo blockdev --getpbsz /dev/sda,典型输出是4096或512 - 若提示
Permission denied,加sudo;普通用户通常可读/sys/block/sda/queue/physical_block_size作验证 - 虚拟设备(LVM、md、nvme ns)也支持该命令,行为一致
fdisk -l 输出里的 Sector size (logical/physical) 行怎么看
这一行确实包含物理扇区信息,但容易误读:它写的是 512 bytes / 4096 bytes 这种格式,斜杠后才是物理值。
注意两点:
- 该行在
fdisk -l输出中位置不固定,可能被省略(新版默认隐藏),不能作为唯一依据 - 某些 USB-SATA 桥接器会伪造该字段,把后端 4K 盘报告成
512/512,此时--getpbsz仍会返回真实物理值 - 如果看到
Sector size (logical/physical): 4096 bytes / 4096 bytes,说明是真·4K 原生盘,fdisk可能无法友好处理,建议换用parted
为什么不能只看 lsblk 或 df
lsblk 根本不提供扇区级信息,它只展示设备树、挂载点、大小(GiB)、文件系统类型。执行 lsblk -f 或 lsblk -d 都不会出现任何扇区相关字段。
df 更偏上层,只反映已挂载文件系统的使用情况,和底层扇区对齐完全无关。
- 常见误操作:用
lsblk看到/dev/sdb是 20G,就用fdisk创建一个 20G 分区,结果mkfs报device too small—— 很可能因为物理扇区是 4096,而未对齐导致实际可用空间缩水 -
df -h和lsblk -h的数值是“友好单位”,不是原始扇区计数,不能用于计算起始偏移
验证对齐时,物理扇区大小只是参考,关键看起始扇区是否满足边界
判断一个分区是否真正 4K 对齐,不能只看物理扇区是不是 4096,还要结合逻辑扇区大小和起始扇区号计算字节偏移。
例如:
- 若
blockdev --getss /dev/sda返回512,且--getpbsz返回4096,则分区Start必须是 8 的倍数(因为 4096 ÷ 512 = 8) - 若两者都返回
4096,则Start本身必须是 1 的倍数(即任意整数),但实践中仍推荐 ≥ 2048(1MiB 对齐),否则部分旧 BIOS 或工具可能解析异常 - 用
parted -l看Aligned:字段最省事,它已帮你算好,Aligned: yes才算真正对齐
物理扇区大小本身不参与 I/O 调度决策,但不对齐会导致 SSD/NVMe 写放大——这个后果往往要等压测或长期运行后才暴露,查的时候容易漏掉。


















