首页/系统/服务器硬件与 RAID 速查/sg3_utils:sg_map 与 sg_inq 识别设备
阵列卡管理68 条

sg3_utils:sg_map 与 sg_inq 识别设备

sg3_utils 提供 sg_map、sg_inq 等工具,直接对 SCSI 设备发查询命令:识别厂商、型号与序列号,不依赖阵列卡工具,是低层核对的补充手段。

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* 节点;容器里如果没做设备映射,命令会报找不到设备,这是环境问题而非硬件问题。

易错点

  • 把 sg 设备号当稳定标识:重启或加盘后编号可能变化,脚本里不要硬编码
  • 对逻辑盘发盘级命令:返回的是控制器层面信息,容易误读为物理盘状态
  • 只看型号不看序列号:同型号多盘的机器上,型号无法区分具体是哪个槽位
  • 在容器内直接跑 sg_inq 不加设备映射:只会看到权限或设备不存在错误,浪费排查时间

数据来源与参考

  • sg3_utils 手册(sg_inq/sg_map)
  • SCSI Primary Commands 标准
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌