直接执行echo "- - -" > /sys/class/scsi_host/hostX/scan可触发SCSI热扫描,需先ls /sys/class/scsi_host/确认实际存在的host目录,三个连字符间必须有且仅有一个空格,分别匹配channel、target、LUN;非SCSI设备(如NVMe、IDE、FC)需用对应子系统命令扫描。

直接写 echo "- - -" > /sys/class/scsi_host/hostX/scan 就能触发扫描,但必须确认 hostX 存在、权限够、且目标是 SCSI 类设备——不是所有新磁盘都走这条路。
怎么知道该扫哪个 hostX
系统里可能有多个 SCSI 主机控制器,host0、host1 甚至 host32 都可能出现。盲目只扫 host0 很容易漏掉设备:
-
ls /sys/class/scsi_host/查看实际存在的 host 目录,输出可能是host0 host1 host2或host31 host32 - 如果已知某块盘(比如
/dev/sda)挂在哪条总线,可用ls -l /sys/block/sda看软链接路径,里面会带host32这类字样 - 虚拟机环境下常见单 host,物理服务器或 FC 存储环境可能有多个,必须全扫
echo "- - -" 三个连字符之间必须有空格
这是最常踩的坑:写成 "---" 或 "- - -" 中间没空格,命令看似执行成功,但内核根本不解析,设备也不会被识别:
- 正确写法:
echo "- - -" > /sys/class/scsi_host/host0/scan - 错误写法:
echo "---" > ...、echo "- --" > ...、echo "- - -" > ...(多余空格也可能失败) - 三个字段分别代表 channel、target、LUN;
-是通配符,不是占位符
扫完看不见新盘?先确认设备类型和扫描方式是否匹配
不是所有磁盘都归 SCSI 子系统管,强行对非 SCSI 设备扫 scsi_host 没用:
- NVMe 盘走
/sys/class/nvme/,要用nvme rescan或重新加载驱动 - IDE/SATA 老设备可能走 PATA 子系统,需查
/proc/ide/或用hdparm -I测试 - FC 光纤存储要扫
/sys/class/fc_host/hostX/issue_lip,不是scan文件 - 确认新增设备是否真被虚拟层透传:KVM 要检查
virsh attach-disk是否带--config(仅配置未生效),VMware 要确认磁盘添加模式是“立即可访问”
真正麻烦的从来不是命令本身,而是你不确定当前环境到底走哪条总线、内核是否加载了对应驱动、虚拟化层有没有把设备信号真正送到 guest 内核——扫之前先 ls /sys/class/ 看一眼有哪些子系统活着,比反复重试更省时间。


















