Linux 使用udev规则操纵内核设备名称
我有一个bash脚本,它接受一个内核设备名作为参数,并输出一个可以用作新内核设备名的新字符串Linux 使用udev规则操纵内核设备名称,linux,bash,device,udev,Linux,Bash,Device,Udev,我有一个bash脚本,它接受一个内核设备名作为参数,并输出一个可以用作新内核设备名的新字符串 Example: bash myScript sda output: sdaa 为此,我使用自定义udev规则 我不知道如何将参数传递到bash脚本中,并使用udev规则捕获结果输出 以下是我尝试过的一些规则 KERNEL=="sda", RUN+="/bin/bash /etc/udev/myScript '%E{KERNEL}'", NAME="%c" KERNEL=="sda", IMPOR
Example:
bash myScript sda
output: sdaa
为此,我使用自定义udev规则
我不知道如何将参数传递到bash脚本中,并使用udev规则捕获结果输出
以下是我尝试过的一些规则
KERNEL=="sda", RUN+="/bin/bash /etc/udev/myScript '%E{KERNEL}'", NAME="%c"
KERNEL=="sda", IMPORT{program}="/bin/bash /etc/udev/myScript --export %k", NAME="%c"
KERNEL=="sda", IMPORT{program}="/bin/bash /etc/udev/myScript --import %k --export %c", NAME="%c"
我使用回显将字符串输出到标准输出。设备属性可以通过设备属性(%k-设备内核名称,%p-设备的devpath)传递到脚本。有关所有可用的设备属性,请参阅udev的手册页 shell脚本的std输出由“%c”提供给udev规则。 . 这个规则怎么样:
KERNEL=="sda", RUN+="/bin/bash /etc/udev/myScript %k", NAME="%c"
无法更改设备节点的名称。只能创建其他符号链接 如果将值指定给
名称
键,则只能更改网络接口的名称
看。旧版也一样这也不起作用/dev/sda不再位于/dev/下。这意味着脚本的某些部分做了一些工作,但没有创建/dev/sdaa。我的脚本很简单,只包含一行,echo
echo$1|sed“s/${1:2:1}/${1:2:1}${1:2:1}/”
通过更改udev的日志级别来检查是否可以找到任何有用的日志。udevadm control--log priority=debuginitly,只需从脚本中输出一些常量,看看它是否更改了设备名称。如果我将sda的名称更改为sdb,我将看不到sda,而只看到sdb。这意味着sda已成为sdb。但如果我尝试将sda更改为类似备份的内容,则在启用调试日志后,/dev/found/udev相关日志(/var/log/messages)下看不到备份?删除了关于服务器故障的重复问题