sg3_utils 与设备识别
sg3_utils 是一组直接向 SCSI 设备发送标准命令的工具,透过内核 sg 驱动工作,不经过阵列卡厂商软件。sg_map 显示 sg 设备与块设备的映射关系,sg_inq 读取标准 INQUIRY 信息:厂商、型号、固件版本,配合 -p 0x80 还能取到单位序列号页。在直通(HBA/JBOD)环境下,它是识别盘、核对序列号、与机箱槽位对齐的底座手段。
基本信息
| 软件包 | sg3_utils(RHEL 系 sg3_utils,Debian 系同名) |
|---|---|
| 权限要求 | root(需访问 /dev/sg* 设备节点) |
| 核心命令 | sg_map 看映射,sg_inq 读查询页,sg_luns 枚举 LUN |
| 关键选项 | -i 显示附加信息,-x 展开 host/channel/id/lun,-p 指定页 |
| 序列号页 | 0x80 单位序列号,0x83 设备标识(含多种格式) |
| 适用环境 | HBA/JBOD 直通;硬件 RAID 下 sg 设备对应逻辑盘 |
典型使用场景
- 装机核对:把系统里看到的盘与机箱槽位、序列号逐一对齐
- 换盘验收:确认新插入的盘型号与序列号就是计划更换的那块
- 其他工具识别异常时做交叉验证,判断问题在盘还是在管理软件
- 直通环境下排查多路径与 LUN 可见性,判断是否需要 rescan
- 维修记录:抄录厂商、型号、固件版本,为后续固件基线留档
查询示例
查询示例
# 列出 sg 设备与块设备的映射,-x 展开为 host/channel/id/lun
sg_map -i -x
# 读取标准查询信息:厂商、型号、固件版本
sg_inq /dev/sg2
# 取单位序列号页(0x80),用于与机箱槽位核对
sg_inq -p 0x80 /dev/sg2
# 直通环境枚举 LUN,确认多路径下设备是否都可见
sg_luns /dev/sg2
# 与块设备侧信息对照(型号与序列号应与 sg_inq 一致)
lsblk -o NAME,SIZE,MODEL,SERIAL,WWN输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| Peripheral device type | 设备类型(0 表示直连盘) | 非 0 时说明看到的是控制器或虚拟设备 |
| Vendor identification | 厂商标识 | 与采购型号不符说明盘被替换或读写错误 |
| Product identification | 产品型号 | 与料号核对,混盘会对重建有影响 |
| Revision level | 固件版本 | 低于固件基线时记录待升级 |
| Unit serial number | 盘序列号 | 与机箱槽位、维修单三方一致 |
| /dev/sgN 与块设备 | sg 节点和 sd 设备的对应关系 | 映射变化时脚本里硬编码的编号会失效 |
硬件 RAID 环境下,sg 设备对应的是逻辑盘而不是物理盘:此时 sg_inq 读到的是控制器层面信息,盘级查询要走 smartctl 的 megaraid 透传或阵列卡工具。
sg_inq 需要内核加载 sg 模块并存在 /dev/sg* 节点;容器里如果没做设备映射,命令会报找不到设备,这是环境问题而非硬件问题。