标签: udev

Udev:重命名我的网络接口

我刚刚在 Dell 1950 服务器上安装了RHEL 6.3。该服务器作为两个 GBit 端口,Gb0 和 Gb1。

出于某种晦涩的原因,udev选择命名Gb0 eth1Gb1 eth0。这对我来说绝对不是一个好发现,只会让人感到困惑。

所以我修改了配置/etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x14e4:0x164c (bnx2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
  ATTR{address}=="00:20:19:52:d3:c0",           \
  ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x14e4:0x164c (bnx2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
  ATTR{address}=="00:20:19:52:d3:be",           \
  ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
Run Code Online (Sandbox Code Playgroud)

我只是更改了文件上的“NAME”字段以反映我想要的内容。我重新启动了服务器,但没有奏效。

dmesg日志中,我可以阅读以下内容:

udev: renamed network interface eth1 to rename5
udev: renamed network interface eth0 to eth1
udev: renamed network interface rename5 to eth0
Run Code Online (Sandbox Code Playgroud)

知道这里有什么问题吗?为什么会这样udev切换?我有另一个类似的服务器,我没有这个问题。

linux rhel udev

20
推荐指数
3
解决办法
11万
查看次数

如何在 Linux 环境中根据供应商 ID 禁用 USB 设备?

我想在 Linux 环境中根据供应商 ID 禁用 USB 设备。我想根据供应商 ID 只允许特定的 USB 设备。

linux usb udev

17
推荐指数
3
解决办法
2万
查看次数

udev 调用时不执行 mount

我尝试创建一些 udev 规则来挂载和卸载我的 USB 闪存驱动器;目前的规则非常简单:

ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
Run Code Online (Sandbox Code Playgroud)

plug_flash_drive.sh 也很简单:

device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
    mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
Run Code Online (Sandbox Code Playgroud)

unplug_flash_drive.sh:

device_name=$1

umount "/dev/$device_name"
rmdir "/media/$device_name"
Run Code Online (Sandbox Code Playgroud)

我做了一些测试,所以我可以确定:

  • 插入时,检测到我的闪存驱动器;在 /dev 中创建了一个文件
  • plug_flash_drive.sh 被 udev 调用
  • 脚本的 mkdir 部分有效
  • 但是,脚本的“mount”部分似乎没有执行,所以我的驱动器没有安装
  • 当我在命令行上调用我的脚本时,它们完美地工作

有人知道为什么在 udev 调用时不执行 mount 吗?

28/08/14 编辑:我在脚本末尾添加了“grep -q /proc/mounts && echo success || echo failure”,以检查我的调试日志是否在脚本结束之前实际安装了设备。即使 udev 调用了该脚本,该设备似乎也安装在该点上。所以现在真正的问题是“当通过 udev 调用时,我的块设备似乎在挂载脚本结束后卸载了”:s

udev mount usb-drive

17
推荐指数
2
解决办法
8673
查看次数

是否有使用 `udev` 的替代方法?

虽然我理解 udev 的伟大并感谢开发人员的努力,但我只是想知道是否有替代方案。

例如,我可能会想象应该有一种方法来制作启动脚本,该脚本创建我的系统(不更改硬件)上的大多数设备节点无论如何都是相同的。

我想跳过的好处或原因与跳过udev相同dbus,即降低复杂性并通过增加我的更改来更安全地设置系统。

linux udev devices

17
推荐指数
4
解决办法
1万
查看次数

有没有办法更改 /dev 目录中的设备名称?

我写这个规则是为了测试目的:

SUBSYSTEMS=="usb", ATTRS{manufacturer}=="Kingston", ATTRS{serial}=="001CC0EC34A2BB318709004B", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1642", SYMLINK+="pen", NAME="pendrak"
Run Code Online (Sandbox Code Playgroud)

基于以下信息:

# udevadm info --name=/dev/sdb --attribute-walk

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host2/target2:0:0/2:0:0:0/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{ro}=="0"
    ATTR{size}=="30299520"
    ATTR{stat}=="     419 …
Run Code Online (Sandbox Code Playgroud)

udev devices

15
推荐指数
1
解决办法
4万
查看次数

如何在不重启的情况下重新生成 70-persistent-net.rules?

该文件/etc/udev/rules.d/70-persistent-net.rules是在带有 udev 的 Linux 系统上自动生成的,如果它不存在,则在重启期间。但我想知道如何在不重新启动服务器的情况下创建此规则文件(使用命令)。

我在谷歌上搜索了一段时间,发现规则文件是由这个脚本生成的:

/lib/udev/write_net_rules
Run Code Online (Sandbox Code Playgroud)

但是,无法从命令行运行此脚本,因为(我假设)它希望由 udev 启动,并正确设置了一些环境变量。手动启动它会打印错误消息“缺少 $INTERFACE”。即使我在脚本启动之前设置了 env 变量 INTERFACE=eth0,它仍然会打印错误“缺少有效匹配”。更不用说我有两个接口(eth0eth1),我希望为两者生成规则文件。

我也想触发这样的 udev 事件,希望它会从 udev 本身启动脚本,但没有任何改变:

udevadm trigger --type=devices --action=change
Run Code Online (Sandbox Code Playgroud)

那么,有人知道如何在/etc/udev/rules.d/70-persistent-net.rules不重启的情况下重新生成文件中的持久网络规则吗?

linux udev

15
推荐指数
1
解决办法
9万
查看次数

如何从 lsusb 输出或通过设备路径获取设备文件名

相关问题:USB 连接/断开通知

当设备插入/拔出时,我会收到即时通知,这很棒。但是为了使它(几乎)完美,我还想获得像 一样的设备文件名/dev/ttyUSB0,甚至更好的是,它的所有符号链接。

但是,我无法找到如何从udev、 或 从lsusb或以其他方式获取此信息。我拥有的设备的唯一 ID 是像/devices/pci0000:00/0000:00:1d.0/usb5/5-1. 如何从中获取设备文件名?

linux usb udev devices

14
推荐指数
2
解决办法
2万
查看次数

列出所有 udev 规则(例如对于设备)?

我想知道如何列出所有 udev 规则。

我知道它们可以作为行(一行 = 一个规则)*.rules存储在这些目录中的文件中

/etc/udev/rules.d
/lib/udev/rules.d
/run/udev/rules.d
/var/run/udev/rules.d
Run Code Online (Sandbox Code Playgroud)

因此,我虽然可以通过简单地连接*.rules这些目录中的所有文件来找到所有规则。这似乎不起作用(因为执行了一些规则,我在这些目录中找不到任何规则作为规则)。

充其量我认为 udevadm 界面有一个命令,它可以让我打印出 udev 当前拥有的所有规则。

可以肯定的是,我进行了审查,man udevadm尤其是关于部分udevadm info [parameters]似乎没有产生任何结果。

鉴于 udev 允许针对同一设备的大量文件和规则,不知道为设备编写所有规则的有效/可行方法令人沮丧。

udev

14
推荐指数
1
解决办法
3万
查看次数

来自 udev 规则中各种父设备的属性

我在理解规则中如何评估来自不同父设备的 udev 设备属性时遇到了一些麻烦。我想为特定的串口usb设备(HUAWEI Modem)写一个规则,属性walk如下:

$ udevadm info --attribute-walk --name=/dev/ttyUSB0

  looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="generic"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0':
    KERNELS=="1-1.3:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbserial_generic"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3':
    KERNELS=="1-1.3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1.3"
    ATTRS{idVendor}=="12d1"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="5"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="500mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0001"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="4561"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI"
    ATTRS{removable}=="removable"
    ATTRS{idProduct}=="1506"
    ATTRS{bDeviceClass}=="00"
    ATTRS{product}=="HUAWEI MOBILE"
Run Code Online (Sandbox Code Playgroud)

为了识别此设备,我尝试使用以下 …

arch-linux udev

14
推荐指数
1
解决办法
6495
查看次数

重命名我的 wlan 网络接口

我知道这个问题类似于“ Udev:重命名我的网络接口”,但我不认为它是重复的,因为我的接口不是通过 udev 规则命名的,并且该问题中的其他答案都不适用于我。

所以我在这台笔记本电脑上有一个 WiFi 适配器,我想将接口从 wlp5s0 重命名为 wlan0:

root@aj-laptop:/etc/udev/rules.d# iwconfig
wlp5s0    IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on

eth0      no wireless extensions.

lo        no wireless extensions.

root@aj-laptop:/etc/udev/rules.d# ifconfig wlp5s0
wlp5s0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 00:80:34:1f:d8:3f  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped …
Run Code Online (Sandbox Code Playgroud)

wifi udev

14
推荐指数
1
解决办法
4万
查看次数

标签 统计

udev ×10

linux ×5

devices ×3

usb ×2

arch-linux ×1

mount ×1

rhel ×1

usb-drive ×1

wifi ×1