自定义 udev 规则不起作用

自定义 udev 规则不起作用

我正在尝试设置自定义 udev 来为系统上的所有 6 个 HDD 设置 /dev/sd** 挂载点。

我一直在尝试让它工作,但就是不行。我需要解决这个问题,因为我的驱动器似乎会随机更改,弄乱我的链接和库。我的 5 个驱动器是 truecrypt 加密的,因此我无法使用 UUID 安装到特定点。

我一直尝试使用这个。我运行的是 Ubuntu 13.04,并将文件保存在 /lib/udev/rules.d/65-persistent-hdd.rules 中

# These are the rules to force all drives into specific /dev/sd** slots for truecrypt mounting
#
KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="3PK0R7AD", SYMLINK+="sda%n"
KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="S1UVJ1LZ401091", SYMLINK+="sdb%n"
KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="S1VSJ1KS202775", SYMLINK+="sdc%n"
KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="W1F08BLH", SYMLINK+="sdd%n"
KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="S1Y6J90SA14564", SYMLINK+="sde%n"
KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="S13PJDWS223047", SYMLINK+="sdf%n"

正如您所看到的,我尝试强制将 {serial}=="3PK0R7AD" 到 /dev/sda,将 {serial}=="S1UVJ1LZ401091" 到 /dev/sdb,等等,等等

答案1

我不确定,但我认为问题在于 SYMLINK+= 将使用默认的 /dev/NAME 并仅添加额外的符号链接。所以您可能无法创建指向已存在的设备的符号链接?

而是使用 NAME="sda"

http://www.reactivated.net/writing_udev_rules.html

在您使用一系列匹配键精确匹配设备后,udev 会通过一系列赋值键为您提供对接下来发生的情况的精确控制。有关可能的赋值键的完整列表,请参阅 udev 手册页。下面介绍了最基本的赋值键。其他赋值键将在本文档的后面介绍。NAME - 应用于设备节点的名称 SYMLINK - 用作设备节点替代名称的符号链接列表

如上所述,udev 仅为一个设备创建一个真正的设备节点。如果您希望为该设备节点提供备用名称,则可以使用符号链接功能。使用 SYMLINK 分配,您实际上是在维护一个符号链接列表,所有这些链接都将指向实际设备节点。为了操作这些链接,我们引入了一个用于附加到列表的新运算符:+=。您可以通过用空格分隔每个符号链接,将任何一条规则中的多个符号链接附加到列表中。

KERNEL=="hdb", NAME="my_spare_disk"

上述规则表示:匹配内核命名为 hdb 的设备,并且将其命名为 my_spare_disk,而不是 hdb。设备节点出现在 /dev/my_spare_disk。

KERNEL=="hdb", DRIVER=="ide-disk", SYMLINK+="sparedisk" 上述规则表示:匹配内核命名为 hdb 且驱动程序为 ide-disk 的设备。使用默认名称命名设备节点,并创建指向它的名为 sparedisk 的符号链接。请注意,我们没有指定设备节点名称,因此 udev 使用默认名称。为了保留标准 /dev 布局,您自己的规则通常会保留 NAME,但会创建一些 SYMLINK 和/或执行其他分配。*

它对我来说不起作用,但我不确定我的 udev 规则中的问题出在哪里,因为调试甚至没有显示它们正在被处理。希望这对你有帮助

我正在尝试做同样的事情并强制我的设备特定于 /dev/sdX,我知道人们想知道为什么这样做,但有些人希望对他们的设备进行这种级别的控制。

相关内容