Linux SCSI设备管理:lsscsi命令详解与应用

📅 2026/7/15 10:08:33
Linux SCSI设备管理:lsscsi命令详解与应用
1. Linux SCSI设备管理利器lsscsi命令完全指南在Linux系统管理中SCSI设备的管理一直是个既基础又关键的任务。无论是本地连接的硬盘、外接存储设备还是通过SAN连接的远程存储了解如何快速准确地识别和查询这些设备信息对系统管理员和存储工程师至关重要。这就是我们今天要深入探讨的lsscsi命令的价值所在。2. lsscsi命令基础解析2.1 命令概述与基本用法lsscsi是一个专门用于列出Linux系统中SCSI设备信息的实用工具。它通过扫描sysfs伪文件系统通常挂载在/sys下来获取设备信息这意味着大多数用户即使没有特殊权限也能查看设备元数据而不需要直接访问设备文件如/dev/sda。最基本的命令形式是直接运行$ lsscsi典型输出如下[0:0:8:0] disk FUJITSU MAM3184MP 0105 /dev/sda [2:0:0:0] cd CREATIVE CD5233E 1.00 /dev/scd0 [3:0:5:0] tape HP C5713A H910 /dev/st0每行输出包含几个关键部分方括号内的四元组[host:channel:target:LUN]设备类型如disk、cd、tape等厂商名称产品型号修订版本号主设备节点路径2.2 设备标识符详解理解输出中的四元组标识符对后续设备管理至关重要host主机号标识SCSI主机总线适配器HBA。在Linux中每个SCSI控制器都有一个唯一的主机号。channel通道号对于支持多通道的HBA这表示具体的通道编号。大多数现代HBA将此值设为0。target目标ID表示目标设备的SCSI ID。在并行SCSI中这是物理跳线设置的ID在SAS和FC环境中这通常由HBA自动分配。LUN逻辑单元号标识目标设备上的特定逻辑单元。一个物理设备可以包含多个LUN。实际经验在企业级存储环境中一个存储阵列可能呈现为单个target但包含数十个LUN这时你会看到类似[5:0:1:0]到[5:0:1:31]的多个设备条目。3. 高级功能与实用选项3.1 设备详细信息查询lsscsi提供了多个选项来获取更详细的设备信息显示设备大小仅对磁盘有效# lsscsi -s [0:0:0:0] cd/dvd PIONEER DVD-RW DVR-212D 1.22 /dev/sr0 - [1:0:0:0] disk ATA ST3320620AS 3.AA /dev/sda 320GB [6:0:0:0] disk SEAGATE ST32000444SS 0006 /dev/sdb 2.00TB显示设备节点的主次设备号$ lsscsi -d [0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda[8:0]显示SCSI通用设备名称$ lsscsi -g [0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda /dev/sg03.2 长格式输出与属性查看使用-l选项可以显示设备的附加属性多次使用会增加显示信息的详细程度$ lsscsi -l [0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda staterunning queue_depth16 scsi_level4 type0 device_blocked0 timeout30对于更结构化的属性输出可以使用-L选项相当于-lll$ lsscsi -L [0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda staterunning queue_depth16 scsi_level4 type0 device_blocked0 timeout303.3 设备过滤与精确查询lsscsi支持使用过滤器来精确查找特定设备。过滤器可以包含1-4个数字用:或空格分隔未指定的部分被视为通配符。查询host 5上的所有设备$ lsscsi 5查询host 3, channel 0, target 1上的所有LUN$ lsscsi 3:0:1使用通配符查询注意引号防止shell扩展$ lsscsi *:*:24. 传输层信息与特殊设备支持4.1 显示传输协议信息-t选项可以显示设备使用的传输协议$ lsscsi -t [0:0:0:0] disk sata: /dev/sda [3:0:0:0] cd/dvd ata: /dev/scd0 [5:0:0:0] disk usb: 7-1:1.0 /dev/sdb结合-H选项可以查看主机的传输信息$ lsscsi -Ht [0] ahci sata: [1] ahci sata: [5] usb-storage usb:7-1:1.04.2 特殊设备类型支持NVMe设备支持从0.30版本开始$ lsscsi [N:0:0:1] disk WDC WDS256G1X0C-00ENX0__1 /dev/nvme0n1只显示NVMe设备$ lsscsi N排除NVMe设备$ lsscsi -N4.3 全球唯一标识符查看对于支持WWID/WWN的设备可以使用-w或-u选项查看$ lsscsi -w [6:0:0:0] disk ATA ST3500418AS CC34 0x5000c500120bfe84 /dev/sdb-u选项需要内核≥3.15可以显示更通用的LU名称$ lsscsi -u [6:0:0:0] disk 5000c500215925bf /dev/sdf5. 实战应用场景与技巧5.1 存储阵列设备识别在企业环境中面对连接了数十甚至上百块磁盘的存储阵列时lsscsi的过滤和详细输出功能特别有用识别特定厂商的所有磁盘$ lsscsi | grep SEAGATE查看所有磁盘的容量$ lsscsi -s | grep disk定位没有设备节点的设备$ lsscsi | grep -w -- -5.2 多路径环境下的设备分析在配置了多路径的环境中同一个物理磁盘可能通过多个路径可见。这时可以结合-t选项查看SAS或FC地址$ lsscsi -t [4:0:3:0] disk sas:0x5000d50001b02139 /dev/sdd [5:0:0:0] disk sas:5000d50001b02139 /dev/sdf上面输出显示/dev/sdd和/dev/sdf实际上是同一设备SAS地址相同只是通过不同路径host 4和host 5访问。5.3 自动化脚本集成lsscsi的输出格式非常规范适合在脚本中解析处理。例如生成所有磁盘设备的WWID映射表#!/bin/bash lsscsi -w | awk /disk/ {print $NF, $(NF-1)} wwid-map.txt或者找出所有容量大于1TB的磁盘lsscsi -s | awk /TB/ $NF0 1 {print}6. 常见问题排查与解决6.1 设备未正确显示问题现象物理连接的设备没有出现在lsscsi输出中。排查步骤检查主机总线适配器是否被内核识别$ lspci | grep -i scsi $ lspci | grep -i sas查看SCSI主机适配器状态$ lsscsi -H强制重新扫描SCSI总线# echo - - - /sys/class/scsi_host/hostX/scan 将X替换为实际主机号6.2 设备大小显示不正确问题现象lsscsi -s显示的大小与实际不符。可能原因与解决磁盘未正确初始化或分区表损坏 - 使用fdisk或parted检查分区表多路径设备未正确聚合 - 检查多路径配置存储阵列未正确映射LUN - 联系存储管理员验证映射6.3 性能问题诊断结合-l选项可以查看设备队列深度等性能相关参数$ lsscsi -l [2:0:0:0] [2:0:0:0] disk SEAGATE ST32000444SS 0006 /dev/sdb staterunning queue_depth64 scsi_level6 type0 device_blocked0 timeout30如果queue_depth值过低如16可能限制设备性能可以考虑调整# echo 64 /sys/block/sdb/device/queue_depth7. 版本兼容性与安装指南7.1 版本兼容性lsscsi支持从2.6系列到最新的5.x Linux内核。不同版本支持的功能有所不同0.25添加--size和--protmode选项0.26添加--wwn选项支持FCoE0.27添加--lunhex和--scsi_id选项0.28添加--unit选项需要内核≥3.150.30添加NVMe设备支持7.2 安装方法大多数主流Linux发行版都包含lsscsi包RHEL/CentOS# yum install lsscsiDebian/Ubuntu# apt-get install lsscsi从源码编译安装$ wget http://sg.danny.cz/sg/p/lsscsi-0.32.tgz $ tar xzf lsscsi-0.32.tgz $ cd lsscsi-0.32 $ ./configure $ make # make install7.3 版本检查$ lsscsi -V lsscsi version 0.328. 替代方案与互补工具虽然lsscsi功能强大但在某些场景下可能需要其他工具配合lsblk更适合查看块设备层级关系$ lsblk -o NAME,MAJ:MIN,RM,SIZE,RO,FSTYPE,MOUNTPOINTsg3_utils提供更底层的SCSI命令访问# sg_inq /dev/sda # 查询标准SCSI INQUIRY信息udevadm查询udev设备信息# udevadm info --queryall --name/dev/sdanvme-cli专用于NVMe设备管理# nvme list在实际工作中我经常结合使用这些工具。例如先用lsscsi确定设备标识再用sg3_utils查询详细SCSI属性最后用udevadm查看设备持久化命名信息。这种组合使用可以全面了解存储设备的各种特性。