Featured image of post 笔记:不重启Linux 手动触发 SCSI 总线扫描,刷新 `/dev` 磁盘列表

笔记:不重启Linux 手动触发 SCSI 总线扫描,刷新 `/dev` 磁盘列表

📝笔记:不重启Linux 手动触发 SCSI 总线扫描,刷新 /dev 磁盘列表

什么时候需要这样做?

  • 在虚拟机或物理服务器上添加了新磁盘,但 lsblkfdisk -l 看不到。
  • 给现有磁盘(如 /dev/sdb)扩容了后端存储空间,但 Linux 看到的还是旧大小。
  • 不想重启系统,又不想装额外工具(如 sg3_utils),只想快速让内核重新识别磁盘。

核心原理

通过向 /sys/class/scsi_host/hostX/scan 写入 - - -,告诉 SCSI 子系统重新扫描该通道上的所有设备,内核就会刷新磁盘列表。


⚡ 操作步骤

  1. 查看当前所有的 SCSI 主机

    1
    
    ls /sys/class/scsi_host/
    

    输出类似:

    1
    
    host0  host1  host2
    
  2. 对每个 host 执行扫描 可以逐个执行:

    1
    2
    
    echo "- - -" | sudo tee /sys/class/scsi_host/host0/scan
    echo "- - -" | sudo tee /sys/class/scsi_host/host1/scan
    

    或者一条命令批量搞定所有 host:

    1
    
    for host in /sys/class/scsi_host/host*; do echo "- - -" | sudo tee $host/scan; done
    
  3. 立刻检查是否生效

    1
    2
    3
    
    lsblk
    # 或者
    sudo fdisk -l | grep "Disk /dev/"
    

    新添加的磁盘(例如 sdb)或扩容后变大的磁盘应立刻出现。


💎 如果只需要刷新磁盘大小(分区不变)

磁盘已存在,只是后端 LUN 变大,需要更新内核识别的容量:

1
echo 1 | sudo tee /sys/block/sdb/device/rescan

然后运行 lsblk /dev/sdb 确认 SIZE 已增大。


📌 注意事项

  • 这是一个在线操作,不会影响现有磁盘数据,非常安全。
  • 如果扫描后依然看不到新磁盘,请检查:
    • 虚拟机设置中是否真的添加了硬盘(VMware「添加硬盘」、VirtualBox「添加虚拟硬盘」)。
    • 物理机的线缆、RAID 卡是否已经识别新盘(可进入 BIOS 或 RAID 管理界面查看)。
  • 某些老旧系统(如 RHEL 6)可能需要重启,但当前主流发行版(Ubuntu 20.04+,CentOS 7+)都支持此方法。

参考

使用 Hugo 构建
主题 StackJimmy 设计