如何在不重新启动的情况下检测连接的新硬盘?

Sen*_*sei 11 linux rhel vmware scsi disk

我有一个小问题。我有一个在 RHEL 6.7 (VM) 上运行的实时系统,并且有 VMware 6.5(不是由我们组管理的)。问题是,另一组试图扩展 VM 上现有磁盘的容量。之后,我像往常一样运行了一个扫描命令来检测新磁盘echo "- - -" > /sys/class/scsi_host/host0/scan,但什么也没发生。他们在 sdb 磁盘上添加了 40G,应该是 100G,我看到它在 VM 上发生了变化,但在 Linux 中没有发生变化。那么问题出在哪里呢?正如我所说,这是一个实时系统,所以我不想重新启动它。

这是系统:

# df -h /dev/mapper/itsmvg-bmclv
                       59G   47G  9.1G  84% /opt/bmc

# lsblk sdb                          8:16   0   60G  0 disk  ??itsmvg-bmclv (dm-2)      253:2    0   60G  0 lvm  /opt/bmc

# vgs   VG       #PV #LV #SN Attr   VSize  VFree    itsmvg     1   1   0 wz--n- 59.94g     0 

# pwd   /sys/class/scsi_host

# ll lrwxrwxrwx 1 root root 0 Nov 13 16:18 host0 -> ../../devices/pci0000:00/0000:00:07.1/host0/scsi_host/host0 lrwxrwxrwx 1 root root 0 Nov 13 16:19 host1 -> ../../devices/pci0000:00/0000:00:07.1/host1/scsi_host/host1 lrwxrwxrwx 1 root root 0 Nov 13 16:19 host2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/scsi_host/host2
Run Code Online (Sandbox Code Playgroud)

小智 21

这对我刷新所有设备有用:(作为更容易运行的命令)

echo "- - -" | tee /sys/class/scsi_host/host*/scan
Run Code Online (Sandbox Code Playgroud)

三个破折号充当通配符来重新扫描所有内容:通道、SCSI 目标 ID 和 LUN。

  • 这就像一个魅力!我通过 VMWare 添加了一个磁盘,Linux 实例在运行此命令之前没有看到它。 (3认同)
  • @jak0lantash IMO 的最佳解决方案。在 Debian/Ubuntu 上,使用 `sudo tee` 而不是 `tee`。 (3认同)

小智 14

如上所述,您可以使用单行扫描所有现有主机:

for host in /sys/class/scsi_host/*; do echo "- - -" | sudo tee $host/scan; ls /dev/sd* ; done
Run Code Online (Sandbox Code Playgroud)

结果:

$ for host in /sys/class/scsi_host/*; do echo "- - -" | sudo tee $host/scan; ls /dev/sd* ; done
- - -
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1
- - -
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1

    ?

- - -
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1
- - -
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1
- - -
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1  /dev/sdd  /dev/sdd1
Run Code Online (Sandbox Code Playgroud)

最后一行显示我们/dev/sdd发现了设备。

  • 你可以使用 `lsblk -S` 代替 `ls /dev/sd*` (2认同)

Pra*_* BS 9

以下是您需要运行以扫描主机设备的命令,以便显示已连接的新硬盘。

echo "- - -" >> /sys/class/scsi_host/host_$i/scan
Run Code Online (Sandbox Code Playgroud)

$i 是主机号

  • “---”有什么意义?为什么是这个特定的字符串? (4认同)