📝笔记:不重启Linux 手动触发 SCSI 总线扫描,刷新 /dev 磁盘列表
什么时候需要这样做?
- 在虚拟机或物理服务器上添加了新磁盘,但
lsblk、fdisk -l看不到。 - 给现有磁盘(如
/dev/sdb)扩容了后端存储空间,但 Linux 看到的还是旧大小。 - 不想重启系统,又不想装额外工具(如
sg3_utils),只想快速让内核重新识别磁盘。
核心原理
通过向 /sys/class/scsi_host/hostX/scan 写入 - - -,告诉 SCSI 子系统重新扫描该通道上的所有设备,内核就会刷新磁盘列表。
⚡ 操作步骤
-
查看当前所有的 SCSI 主机
1ls /sys/class/scsi_host/输出类似:
1host0 host1 host2 -
对每个 host 执行扫描 可以逐个执行:
1 2echo "- - -" | sudo tee /sys/class/scsi_host/host0/scan echo "- - -" | sudo tee /sys/class/scsi_host/host1/scan或者一条命令批量搞定所有 host:
1for host in /sys/class/scsi_host/host*; do echo "- - -" | sudo tee $host/scan; done -
立刻检查是否生效
1 2 3lsblk # 或者 sudo fdisk -l | grep "Disk /dev/"新添加的磁盘(例如
sdb)或扩容后变大的磁盘应立刻出现。
💎 如果只需要刷新磁盘大小(分区不变)
磁盘已存在,只是后端 LUN 变大,需要更新内核识别的容量:
|
|
然后运行 lsblk /dev/sdb 确认 SIZE 已增大。
📌 注意事项
- 这是一个在线操作,不会影响现有磁盘数据,非常安全。
- 如果扫描后依然看不到新磁盘,请检查:
- 虚拟机设置中是否真的添加了硬盘(VMware「添加硬盘」、VirtualBox「添加虚拟硬盘」)。
- 物理机的线缆、RAID 卡是否已经识别新盘(可进入 BIOS 或 RAID 管理界面查看)。
- 某些老旧系统(如 RHEL 6)可能需要重启,但当前主流发行版(Ubuntu 20.04+,CentOS 7+)都支持此方法。