# 不重启Linux 手动触发 SCSI 总线扫描，刷新 `/dev` 磁盘列表不重启怎么刷新 Linux 磁盘显示？
<!--more-->


# 📝不重启Linux 手动触发 SCSI 总线扫描，刷新 `/dev` 磁盘列表

 **什么时候需要这样做？**
- 在虚拟机或物理服务器上**添加了新磁盘**，但 `lsblk` 、`fdisk -l` 看不到。
- 给现有磁盘（如 `/dev/sdb`）扩容了后端存储空间，但 Linux 看到的还是旧大小。
- 不想重启系统，又不想装额外工具（如 `sg3_utils`），只想快速让内核重新识别磁盘。

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

---

# ⚡ 操作步骤

1. **查看当前所有的 SCSI 主机**
   ```bash
   ls /sys/class/scsi_host/
   ```
   输出类似：
   ```
   host0  host1  host2
   ```

2. **对每个 host 执行扫描**
   可以逐个执行：
   ```bash
   echo "- - -" | sudo tee /sys/class/scsi_host/host0/scan
   echo "- - -" | sudo tee /sys/class/scsi_host/host1/scan
   ```
   或者一条命令批量搞定所有 host：
   ```bash
   for host in /sys/class/scsi_host/host*; do echo "- - -" | sudo tee $host/scan; done
   ```

3. **立刻检查是否生效**
   ```bash
   lsblk
   # 或者
   sudo fdisk -l | grep "Disk /dev/"
   ```
   新添加的磁盘（例如 `sdb`）或扩容后变大的磁盘应立刻出现。

---

# 💎 如果只需要刷新磁盘大小（分区不变）
磁盘已存在，只是后端 LUN 变大，需要更新内核识别的容量：
```bash
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+）都支持此方法。

## 参考
- [封面图](https://www.mylittlewallpaper.com/c/vocaloid/download/6698d94b6c1086.56909666)