我必须不断地进行 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