在 Linux 中可靠地重新扫描 scsi 磁盘的最佳做法是什么?

在 Linux 中可靠地重新扫描 scsi 磁盘的最佳做法是什么?

我必须不断地进行 SAN 更改,这意味着我还必须不断地重新扫描 scsi 总线,以便我的各种更改能够反映在我将磁盘导出到的机器上。

一段时间以来,我一直被 Linux 中重新扫描磁盘的各个方面所困扰。

并不是要赞扬微软,但他们确实将整个过程简化为一个命令,这个命令可以完成所有事情,而且比 Linux 同行快得多。

我已经使用 rescan-scsi-bus.sh 命令有一段时间了。但是,rescan-scsi-bus.sh 命令通常需要运行多次,具体取决于所做的更改。例如,如果删除了路径,我需要运行“rescan-scsi-bus.sh -f -a -r -m”。但是,此命令不会扫描磁盘以查找重新映射的磁盘,也不会扫描调整大小的磁盘。为了从 rescan-scsi-bus.sh 中获得相同的功能,我最终不得不连续多次运行该命令,这可能会花费大量时间(对于大量磁盘,大约 5 分钟,这比 Windows 所需的时间长几年。)示例:

# If the disk was removed.. Even though we aren't syncing, rescan can still hang
# unless we remove the disks first.
rescan-scsi-bus.sh --nosync -f -a -r -m 
# Next, We scan for new disks.. Don't know why the last command can't do it at the same time..
rescan-scsi-bus.sh -a
# Look for remapped disks.
rescan-scsi-bus.sh --nosync -a -u
# Look for resized disks.. Once again.. We have to go through the entire list which can take a good O'l 1 minute.
rescan-scsi-bus.sh --nosync -a -s

问题是,是否有更好的策略来重新扫描磁盘,而不是运行一系列 rescan-scsi-bus.sh 命令?

这里的要求是一个单独的命令,它可以删除已被删除的磁盘和磁盘路径,添加新的磁盘和路径,更新已重新映射到其他地方的驱动器,获取具有新大小的驱动器中的更改,并在合理的时间内(0-30 秒)运行在任何 Linux 发行版上,无论系统有多少磁盘或 IO 负载水平如何。

我可以回到将值回显到 sysfs 中,但这种方式会使整个过程变得简单,并且只有一个运行的命令可以及时完成所有操作。

答案1

您可以使用以下任何一种方法

iscsiadm -m session --rescan
iscsiadm -m session -r SID --rescan

添加磁盘时

echo "- - -" > /sys/class/scsi_host/hostX/scan

扩展现有磁盘时

echo 1 > /sys/class/scsi_device/device/rescan

相关内容