lsblk -o 不能直接输出物理扇区大小和序列号,需结合 lsblk -t(获取 PHY-SEC)与 udevadm(提取 ID_SERIAL)拼接实现;物理扇区通过 /sys/block/sdX/queue/physical_block_size 获取,序列号依赖 udev 属性而非 sysfs。

`lsblk -o` 本身**不能直接输出物理扇区大小和序列号**,因为这两个字段不属于 `lsblk` 默认支持的列,也不在标准 udev 属性中稳定提供。但可以通过组合方式实现目标:用 `lsblk -o` 显示基础信息(含拓扑字段),再借助 `lsblk -t` 或 `udevadm` 补充缺失字段。下面分三部分说明:
物理扇区大小(Physical Sector Size)
该值由内核通过 sysfs 暴露,路径为 /sys/block/sdX/queue/logical_block_size 和 /sys/block/sdX/queue/physical_block_size。
- 运行
lsblk -t -o NAME,PHY-SEC,LOG-SEC,ROTA,MODEL即可看到每块磁盘的物理/逻辑扇区大小 - 注意:
PHY-SEC仅对 SATA/SCSI/NVMe 磁盘有效;USB 或虚拟设备可能显示为 0 或空白 - 若需纯数字列表(如脚本处理),可用:
for d in /sys/block/sd*; do n=$(basename $d); p=$(cat $d/queue/physical_block_size 2>/dev/null); echo "$n $p"; done
序列号(Serial Number)
lsblk 不读取 /sys/block/*/device/serial,也不原生支持 SERIAL 字段。即使你写 lsblk -o NAME,SERIAL,SIZE,SERIAL 列通常为空——除非系统已通过 udev 规则注入 ID_SERIAL 属性。
- 验证 udev 是否识别序列号:
udevadm info --name=/dev/sda | grep -i "serial\|wwn" - 常见有效键名有:
ID_SERIAL、ID_SERIAL_SHORT、ID_WWN - 推荐批量获取方式(无需 root,兼容性强):
for dev in $(lsblk -nd -o NAME); do serial=$(udevadm info --name=/dev/$dev 2>/dev/null | awk -F= '/^ID_SERIAL=/ {print $2}' | tr -d '"'); echo "$dev $serial"; done | column -t
合并输出:物理扇区 + 序列号 + 其他字段
无法单靠 lsblk -o 一行完成,但可拼接两组数据。例如,生成含设备名、型号、物理扇区、序列号的整齐表格:
- 先用
lsblk -t -n -o NAME,MODEL,PHY-SEC获取拓扑信息 - 再用
udevadm提取序列号,用awk或paste对齐 - 简洁脚本示例:
paste /dev/null | awk -F= '/^ID_SERIAL=/ {print $2}' | tr -d '"'); echo "$s"; done) | column -t - 注意:要求设备名顺序一致,所以都加了
sort;USB 设备或 NVMe 可能需单独适配路径(如/sys/block/nvme0n1/device/serial)











