Linux 使用udev规则枚举符号链接,其中udev不';我不支持%e
我使用的是不支持的udev版本(在Centos7上),但我想使用它提供的功能 具体来说,我有几个NVME设备,由两种不同的类型组成,它们都可以在一个硬件集群上使用,但可能无法插入到确切的位置。我想列举它们,这样我就可以继续使用Ansible或其他一些管理工具以编程方式进行分区、添加文件系统和装载驱动器。具体地说,我最终想做一些类似于Linux 使用udev规则枚举符号链接,其中udev不';我不支持%e,linux,ansible,filesystems,udev,Linux,Ansible,Filesystems,Udev,我使用的是不支持的udev版本(在Centos7上),但我想使用它提供的功能 具体来说,我有几个NVME设备,由两种不同的类型组成,它们都可以在一个硬件集群上使用,但可能无法插入到确切的位置。我想列举它们,这样我就可以继续使用Ansible或其他一些管理工具以编程方式进行分区、添加文件系统和装载驱动器。具体地说,我最终想做一些类似于mkfs.ext4/dev/type1nvme1-L nvme1和mkfs.ext4/dev/type2nvme1-L的事情-当然,为了做到这一点,我每次都需要在相同
mkfs.ext4/dev/type1nvme1-L nvme1
和mkfs.ext4/dev/type2nvme1-L的事情-当然,为了做到这一点,我每次都需要在相同的/dev
位置安装设备
我把这个答案作为指南:
然而,最大的问题是,udev似乎是多线程的,并且一次枚举多个设备——因此脚本失败。我有大约18个两种类型的nvme设备,我通常只得到其中6或7个的符号链接,而且数字是错误的。以下是udev规则以及我使用的脚本:
# all nvme devices
KERNEL=="nvme*[0-9]n*[0-9]", SUBSYSTEMS=="nvme"\
, ATTR{queue/read_ahead_kb}="4096"\
, ATTR{queue/rotational}="0"\
, ATTR{queue/scheduler}="none"
# Better rename type1 cards
KERNEL=="nvme*[0-9]n*[0-9]", ATTRS{model}=="Dell Express Flash PM1725a*"\
, PROGRAM="/usr/local/sbin/unique-num /dev disktype1"\
, SYMLINK+="disktype1%c"
#
# Better rename internal nvme (primary seg) cards
KERNEL=="nvme*[0-9]n*[0-9]", ATTRS{model}=="Dell Express Flash NVMe P4600*"\
, PROGRAM="/usr/local/sbin/unique-num /dev disktype2"\
, SYMLINK+="disktype2 %c"
在udevadm触发后
:
[root@sdw1 ~]# ls -l /dev/disk_type*
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type10 -> nvme0n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type11 -> nvme1n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type12 -> nvme2n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type13 -> nvme3n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type14 -> nvme4n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type15 -> nvme9n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type20 -> nvme7n1
lrwxrwxrwx 1 root root 8 Apr 2 18:56 /dev/disk_type21 -> nvme13n1
lrwxrwxrwx 1 root root 8 Apr 2 18:56 /dev/disk_type22 -> nvme16n1
lrwxrwxrwx 1 root root 8 Apr 2 18:56 /dev/disk_type23 -> nvme14n1
因此,简而言之,对于不支持%e命名行为的版本,是否有任何方法可以获得该命名行为 您是否考虑过更新到支持所需功能的版本?我没有发现任何RHEL/centos版本支持带有%e
修饰符的udev。这似乎是一个旧的/不推荐的选项。它在Ubuntu上也不可用,据证实,问题是udev导致的竞争条件。通过udevadm control-m 1将udev max workers设置为“1”,可以“解决”触发问题,我们可以努力确保脚本处理udev的多线程。您是否考虑过更新到支持所需功能的版本?我没有找到任何支持udev且具有%e
修饰符的RHEL/centos版本。这似乎是一个旧的/不推荐的选项。它在Ubuntu上也不可用,据证实,问题是udev导致的竞争条件。通过udevadm control-m1
将udev max workers设置为“1”,可以“解决”触发问题,我们可以确保脚本处理来自udev的多线程。
[root@sdw1 ~]# ls -l /dev/disk_type*
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type10 -> nvme0n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type11 -> nvme1n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type12 -> nvme2n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type13 -> nvme3n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type14 -> nvme4n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type15 -> nvme9n1
lrwxrwxrwx 1 root root 7 Apr 2 18:56 /dev/disk_type20 -> nvme7n1
lrwxrwxrwx 1 root root 8 Apr 2 18:56 /dev/disk_type21 -> nvme13n1
lrwxrwxrwx 1 root root 8 Apr 2 18:56 /dev/disk_type22 -> nvme16n1
lrwxrwxrwx 1 root root 8 Apr 2 18:56 /dev/disk_type23 -> nvme14n1