使用udev规则和不支持%e

时间:2019-04-02 22:59:08

标签: linux ansible filesystems udev

我正在使用不支持%e naming for a device的udev版本(在Centos7上),但是我想使用它提供的功能。

具体来说,我有几种由两种不同类型组成的NVME设备,它们都可以在硬件群集上使用,但可能没有插入到确切的位置。我想枚举它们,以便可以继续使用Ansible或其他管理工具以编程方式进行分区,添加文件系统并安装驱动器。具体来说,我最终还是想做类似mkfs.ext4 /dev/type1nvme1 -L nvme1mkfs.ext4 /dev/type2nvme1 -L different_nvme1的事情-但是,为了做到这一点,我每次都需要将设备放在相同的/dev位置。

我已将此答案作为指导:

https://unix.stackexchange.com/questions/105144/udev-rule-for-assigning-known-symlinks-for-identical-usb-serial-devices

但是,最大的问题是,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"

# cat /usr/local/sbin/unique-num 
#!/bin/bash

if [ $# -ne 2 ]; then
    echo "Usage: $0 location prefix" >&2
    exit 1
fi

location="$1"
prefix="$2"

needindex=1
index=0

while [ $needindex -eq 1 ]
do
        if [ ! -e $location/$prefix$index ]; then
                needindex=0
                echo "$index"
        else
                (( index++ ))
        fi
done

udevadm trigger之后:

[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

因此,简而言之-对于不支持udev的版本,是否有任何方法可以得到udev的%e命名行为?

0 个答案:

没有答案