Linux热插SCSI硬盘后需手动扫描识别:先用ls /sys/class/scsi_host/或lsscsi -H确认hostX编号,再执行echo "- - -" > /sys/class/scsi_host/hostX/scan触发全扫,dmesg和lsblk可验证新设备(如/dev/sdb)。

在Linux系统中,当通过热插拔方式添加新SCSI硬盘(如SAS/SATA直连、光纤通道或USB大容量存储设备)后,内核通常不会自动识别新设备。需手动触发SCSI总线扫描,让内核探测并注册新磁盘。以下方法适用于大多数现代Linux发行版(RHEL/CentOS 7+/Rocky/AlmaLinux、Ubuntu 18.04+、Debian 10+等)。
确认SCSI主机适配器编号
每个SCSI控制器(HBA)在内核中表现为一个hostN(如host0、host1)。需先查清目标主机编号:
- 运行 ls /sys/class/scsi_host/ 查看所有SCSI主机;
- 用 lsscsi -H(需安装lsscsi包)列出主机及其厂商信息;
- 若只有一块HBA,通常为 host0;多卡环境请结合物理槽位或dmesg日志判断。
执行全主机扫描(推荐用于热插)
对指定SCSI主机发起一次完整扫描,可发现新增LUN(包括新硬盘):
- 执行:echo "- - -" > /sys/class/scsi_host/hostX/scan(将X替换为实际主机号);
- 其中 "- - -" 表示扫描所有通道(channel)、目标(target)、LUN(lun),是通用安全写法;
- 成功后,dmesg | tail -20 应显示类似 scsi 0:0:0:0: Direct-Access ... Attached 的识别日志;
- 运行 lsblk 或 fdisk -l 即可看到新设备(如 /dev/sdb)。
按总线定位扫描(精准但需已知拓扑)
若已知新盘挂载的通道和目标ID(例如热插到第0通道、目标ID 1),可缩小扫描范围:
- 命令格式:echo "0 1 -" > /sys/class/scsi_host/hostX/scan;
- 含义:扫描 hostX 下 channel=0、target=1、所有LUN(- 表示通配);
- 适用场景:虚拟机中模拟SCSI热插、或运维文档明确记录了设备位置;
- 不推荐首次尝试——误填channel/target可能漏扫,不如全扫稳妥。
验证与后续操作
扫描完成后,还需确认设备可用并完成初始化:
- 用 cat /proc/partitions 或 ls /sys/block/ 确认设备节点生成(如 sdb);
- 检查是否已有分区或文件系统:sudo blkid /dev/sdb*;
- 若为全新盘,可使用 fdisk /dev/sdb 或 parted 分区,再 mkfs.xfs /dev/sdb1 格式化;
- 注意:部分存储阵列或JBOD柜需额外启用“UNMAP”或刷新LUN映射,此时应参考硬件手册配合存储端操作。


















