物理偏移量 = start × 逻辑扇区大小,需用 blockdev --getss 确认真实逻辑扇区大小(如512或4096字节),fdisk -l 的 start 是逻辑扇区编号而非字节偏移,lsblk 不提供该信息。

直接看 fdisk -l 输出里的 Start 列,再乘以逻辑扇区大小(通常是 512),就是字节级物理偏移量;别用 lsblk 或 df,它们根本不提供这个数据。
fdisk -l 的 Start 列就是扇区偏移,不是字节偏移
运行 sudo fdisk -l /dev/sda,在表格里找到目标分区(如 /dev/sda1)对应的 Start 值:
- 这个数字是逻辑扇区编号(LBA),单位是扇区,不是字节
- 默认逻辑扇区大小为 512 字节,所以字节偏移 = Start × 512
- 常见错误:把 Start=2048 当成 2048 字节,结果算错 4K 对齐或恢复定位
- 注意顶部的 Sector size (logical/physical) 行:如果显示 512 bytes / 4096 bytes,Start 仍是按 512 字节单位计的,别误以为要 × 4096
怎么确认逻辑扇区大小?别信 fdisk 估算,用 blockdev --getss
fdisk -l 里那行 Sector size 是它自己解析出来的,可能不准;真正权威的是内核 ioctl 直读:
- 运行 sudo blockdev --getss /dev/sda → 返回逻辑扇区字节数(512 或 4096)
- 必须对整块盘执行,不能对分区(/dev/sda1 会报错)
- 如果返回 4096,说明设备声明逻辑扇区就是 4K,此时 Start × 4096 才是字节偏移,但 fdisk -l 仍按 512 显示,需手动换算
- 等价路径:cat /sys/block/sda/queue/logical_block_size(无需 root,但可能被 udev 覆盖)
parted -l 的 Aligned: 字段只作参考,不能替代计算
sudo parted -l 末尾的 Aligned: yes/no 看起来省事,但它依赖内核 optimal_io_size,在以下场景不可靠:
- 使用 RAID 卡、某些 NVMe 驱动或虚拟磁盘时,optimal_io_size 可能返回 0 或错误值
- Aligned: yes 不代表物理层真对齐,宿主机层错位时照样性能崩塌
- 某些老版本 parted 根本不输出该字段,不是你漏看了,是工具不支持
- 更稳妥的做法:先用 blockdev --getss 确认逻辑扇区,再验算 Start % (4096 / logical_sector_size) == 0
别用 lsblk 查偏移——它压根不存这个信息
lsblk 是结构快览工具,不是底层探针:
- lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT 只告诉你挂没挂载、多大、什么类型
- 它完全不输出起始扇区、偏移量、对齐状态等物理布局信息
- 有人试 lsblk -f 或加 LOG-SEC 字段,结果全是空或 0 —— 因为 sysfs 没暴露这些值
- 它唯一价值是快速确认 sda1 是否属于 sda,避免查错设备名
真正要定位物理偏移,必须组合三件事:fdisk -l 的 Start、blockdev --getss 的真实扇区大小、以及是否被 4096 整除的判断。任何跳过其中一环的“快捷方式”,在 SSD/NVMe 上都可能埋下性能雷。











