我们能否预测下一个注册的 SCSI 海量存储设备名称

我们能否预测下一个注册的 SCSI 海量存储设备名称

我需要预测sdX下一个大容量存储设备 ( sdasdbsdc、 ...) 将从 SCSI 驱动程序接收的设备名称 ( )。

如果我删除一台设备并连接另一台设备,我注意到新连接的设备不会采用已删除设备的名称,而是使用按字母顺序排列的设备名称。

这些信息存储在哪里?保存时间是多久?如何使用此信息来预测下一个设备将收到的设备名称?

答案1

我认为您需要查看 udev 规则处理和设备节点创建。默认 udev 规则位于 /lib/udev/rules.d 中,但您可以在 /etc/udev/rules.d 中覆盖它们

答案2

我认为 Linux 使用第一个可用的字母。但是,这可能取决于内核版本和设备类型。

您极不可能需要预测下一个字母。无论如何,您将无法用它做任何有用的事情:如果在您的程序有时间做出反应之前添加了两个设备怎么办? Linux有一个机制可以控制设备名称:乌德夫。您可以编写 udev 规则来识别特定类型、品牌或型号的设备,或者具有特定标签或 UUID 的文件系统,并在插入匹配设备时运行脚本。看将 IDE 驱动器映射到 /dev/hda连接无线键盘时执行操作举些例子。

默认的 udev 规则会自动创建链接,通过其型号和序列号(在 中/dev/disk/by-id)识别块设备,通过其标签和序列号(在/dev/disk/by-label和 中/dev/disk/by-serial)识别文件系统。这可能足以满足您的需要。

答案3

如果我删除一台设备并连接另一台设备,我注意到新连接的设备不会采用已删除设备的名称,而是使用按字母顺序排列的设备名称。

不,这取决于时间以及旧设备是否打开。在我的系统上,如果我插入 USB 闪存盘,然后将其拔出,几秒钟后重新插入,它可能会获得相同的设备。如果我在插入后安装它,并且不卸载它,那么在重新插入时它将获得下一个设备。

该字母本身并不像实际设备的主要/次要那么重要。如果旧条目仍在使用,内核将使用另一个条目。

这在 SCSI/SAS 磁带上可以非常明显地看到,其中内核预计某些操作需要 30 秒以上。如果链接稍微不稳定,内核仍然会打开 /dev/st0,并且当它再次出现时硬件仍然会很忙(并且内核日志将显示设备初始化需要很长时间才能显示为下一个)设备)。

从评论来看,为什么你需要预测下一个设备?在许多情况下,最好听 udev (udevadm monitor或许多其他方式)来查找下一个出现的设备,并通过标识使用它,而不是任何特定的字母。

相关内容