linux中无需重启即可识别新硬盘,核心是手动触发scsi总线扫描:通过向/sys/class/scsi_host/host*/scan写入“- - -”或运行rescan-scsi-bus.sh脚本,再用lsblk、lsscsi等命令验证设备节点与持久化命名是否生成。

Linux 中无需重启就能识别新硬盘,核心是手动触发 SCSI 总线扫描。系统在热添加磁盘(如虚拟机挂载、SAN 新划 LUN)后通常不会自动发现,必须主动通知内核重新探测设备。
直接向 sysfs 写入扫描指令
这是最常用、最底层的方法,适用于所有主流发行版:
- 先列出当前 SCSI 主机控制器:
ls /sys/class/scsi_host/,常见输出如host0、host1等 - 对每个 host 执行全量扫描:
echo "- - -" > /sys/class/scsi_host/host0/scan - 三个连字符含义明确:第一个代表所有 channel,第二个代表所有 target ID,第三个代表所有 LUN
- 若主机有多个控制器(如多 HBA 卡或虚拟化中多个 SCSI 控制器),需逐个扫描,或用通配一次性执行:
echo "- - -" > /sys/class/scsi_host/host*/scan
使用 rescan-scsi-bus.sh 脚本(推荐用于生产环境)
该脚本由 sg3_utils 包提供,更智能、更安全,能自动识别新增/移除设备并输出日志:
- 安装依赖(RHEL/CentOS):
yum install sg3_utils;(Ubuntu/Debian):apt install sg3-utils - 以 root 运行:
rescan-scsi-bus.sh - 可加参数增强功能,例如:
rescan-scsi-bus.sh -a(扫描所有 LUN,包括已隐藏的)、-r(同时移除未响应设备) - 脚本会报告新增设备数量、设备路径及厂商型号,比手动写入更直观可靠
验证新设备是否识别成功
扫描完成后,立即检查是否生成对应设备节点:
- 运行
lsblk查看块设备树,新盘通常显示为sdb、sdc等(注意排除已有 loop、lvm、md 设备) - 用
fdisk -l或lsscsi(需安装)确认设备型号、大小和 SCSI 地址 - 查看持久化命名:
ls -l /dev/disk/by-id/,新 LUN 会以scsi-XXXX或wwn-0xXXXX形式出现,适合后续绑定 udev 规则 - 若使用多路径(multipath),运行
multipath -ll确认聚合后的映射是否就绪
特殊情况处理
极少数场景下标准扫描无效,可尝试补充操作:
- 检查 HBA 驱动状态,必要时重载(如
modprobe -r lpfc && modprobe lpfc),但需确保无 I/O 活动 - 旧内核(2.4)或特殊虚拟化平台可能支持
/proc/scsi/scsi接口:echo "scsi add-single-device 0 0 1 0" > /proc/scsi/scsi(参数依次为主机号、通道、target ID、LUN) - 扫描后仍不显示,可结合
dmesg | tail -50查看内核日志,确认是否有 SCSI timeout、reject 或权限拒绝报错











