最准确方式是直接查看fdisk -l输出第三行“Sector size (logical/physical):”字段,如“512 bytes / 4096 bytes”,左侧为逻辑扇区大小(OS单位),右侧为物理扇区大小(磁盘真实写入粒度),该值由内核从驱动读取,非估算,权威可靠。

fdisk -l 输出的 Sector size 行怎么看
直接运行 sudo fdisk -l /dev/sda(把 /dev/sda 换成你的设备),开头几行里找这行:Sector size (logical/physical): 512 bytes / 4096 bytes。
左边是逻辑扇区大小(OS 看到的单位),右边是物理扇区大小(磁盘真实擦写粒度)。
这个值不是估算,而是内核从设备驱动读取的原始信息,比 hdparm -I 更可信。
常见陷阱:
• 如果这行没出现,说明设备未被内核正确识别(比如刚插上的 NVMe 或 USB-SATA 桥接盘)
• 新版 fdisk 在空盘或 GPT 无分区时可能默认隐藏该行,别以为“没输出=没信息”
• 别拿它和 lsblk 或 df 对比——它们根本不暴露扇区级数据
blockdev --getpbsz 和 --getss 必须一起用
blockdev --getpbsz /dev/sda 返回物理扇区字节数(如 4096),blockdev --getss /dev/sda 返回逻辑扇区字节数(如 512)。
两者必须配对看:
• 若结果是 512 / 4096,说明是 Advanced Format 盘,对齐基准是 4096 字节 → 分区 Start × 512 必须能被 4096 整除 → 等价于 Start % 8 == 0
• 若结果是 4096 / 4096,说明是真·4K 原生盘,Start 本身就得是整数(但实践中仍建议 ≥2048)
注意:
• 两个命令都必须作用于整盘(如 /dev/sda),对 /dev/sda1 运行会报 Invalid argument
• --getpbsz 在某些老 SATA 控制器或 USB 桥接器上可能失败,此时 fallback 到 cat /sys/block/sda/queue/physical_block_size
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
parted align-check optimal 1 是最终判决
sudo parted /dev/sda align-check optimal 1 不是看 Start 是否为 2048,而是调用内核底层参数(optimal_io_size、alignment_offset、physical_block_size)算出理论最优偏移,再比对实际位置。
典型失败场景:
• RAID 卡或 NVMe 命名空间导致 alignment_offset 非零(如 2048),此时起始扇区需满足 (optimal_io_size + alignment_offset) / physical_block_size 的整数倍
• 执行后返回 1 not aligned,哪怕 fdisk -l 显示 Start=2048
实操建议:
• 先查底层数值:cat /sys/block/sda/queue/optimal_io_size、/sys/block/sda/alignment_offset
• 再跑 align-check,只有返回 1 aligned 才算真正过关
• 别试图手动调整扇区号——重分区才是唯一安全方式
云盘和虚拟磁盘必须交叉验证
你在虚拟机里看到 Aligned: yes 或 Start=2048,不代表 IO 真正对齐。
宿主机层错位会传导到所有上层:
• 观察 iostat -x 1 中的 avgrq-sz:持续稳定在 8.0+(而非预期的 4.0)是未对齐的强信号
• 阿里云、腾讯云等云盘,或 VMware/KVM 虚拟磁盘,其底层存储池若未 4K 对齐,上层所有操作都白搭
• parted -l 的 Aligned: 字段依赖内核提供的 optimal_io_size,而某些虚拟化驱动会返回错误值
所以:
• 本地物理盘:以 blockdev + align-check 为准
• 云环境或虚拟机:必须结合 iostat 实测 + 宿主机层确认,不能只信 guest OS 的输出

















