操作系统:OpenSuse Leap 42.2,内核 4.4.76-1-默认
我有以下问题:
当我在运行时连接 USB 存储设备时,它会获取分配的设备节点名称,/dev/sdk
这很好。
如果我在插入外部 USB 驱动器的情况下重新启动计算机,操作系统会决定将/dev/sdb
本应是内部硬盘驱动器的 USB 存储设备连接到该设备。
我需要一种方法来强制外部 USB 驱动器获取高于或等于的设备节点名称/dev/sdk
从这个话题到目前为止我学到了:
根据 udev 手册,无法更改 /dev/ 目录中的文件名称: NAME 用于网络接口的名称。 udev 无法更改设备节点的名称,只能创建附加符号链接。
这对我来说意味着我无法使用udev
规则强制内核/驱动程序为我的 USB 设备分配某个设备节点名称,例如/dev/sdk
.
我使用创建了一个符号链接这个话题并且符号链接有效。现在我有一个静态别名usbDevice -> sdb1 / usbDevice -> sdk1
,它引用外部 USB 驱动器,无论它是否安装在/dev/sdk
或 上/dev/sdb
。
但这并不能解决我的问题,因为它不会更改我的 USB 设备的实际节点名称。
有谁知道我怎样才能:
- 强制此特定 USB 设备获取分配的高于或等于的节点名称
/dev/sdk
也许是通过告诉操作系统它应该在所有其他设备连接到该/dev
文件夹后查找 USB 设备。
我不介意外部 USB 设备分配什么设备节点名称,只要它不替换我已使用的设备节点之一即可。
有人能给我提示从哪里开始吗?系统服务?
答案1
对我有用的强制设备顺序的一种方法(至少对于声卡驱动程序)是确保 SATA 驱动程序被编译到内核中,并在启动过程中稍后加载 USB 大容量存储模块。这样你就可以确保你的内部驱动力得到/dev/sdb
答案2
绝不尝试将硬盘强制安装到特定/dev/sd*
设备。内核枚举这些设备,并且它们在每次启动时可能会以不同的顺序进行初始化。如果你试图干涉它,你只会破坏东西。
相反,请使用已提供的符号链接来为您提供持久名称。这些可以在/dev/disk/by-*
目录中找到。您可以选择硬件小路(例如某些 USB 设备上的某些 USB 端口),通用唯一标识符分配给卷并且无论硬盘插入何处都可以工作,标签您用 分配给卷tune2fs
,并且可以轻松记住,或者IDs 由硬盘的制造商和型号组成。
只要在你想用的地方使用它们就/dev/sdk
可以了。