标签: udev

区分 Linux 上相同的 USB 设备

我在我的 Linux 系统上使用两个相同的 USB 到串行适配器。所以取决于谁先插入,其中一个用名称 /dev/ttyUSB0 表示,另一个用 /dev/ttyUSB1 表示。有什么技巧可以让名字持久化吗?我有三个USB端口。是否可以将名称链接到物理端口?

谢谢,

linux usb udev

5
推荐指数
1
解决办法
2593
查看次数

在 `rm` 之后恢复 /dev

在从 livevd 安装 gentoo 期间,有一个步骤可以创建一个 dev 目录,稍后在目标的 chroot 中用于安装

它是这样完成的

mount --rbind /dev /mnt/gentoo/dev
Run Code Online (Sandbox Code Playgroud)

在安装过程中,我决定重新开始……所以我就这样做了

rm -fr /mnt/gentoo/*
Run Code Online (Sandbox Code Playgroud)

没想到它(“将再次解压缩 stage3 tar 球”)我从我的实际 /dev 中删除了大部分设备文件,因为 chroot 中的那些只是绑定到真实设备。

现在,简单的解决方案是:重新启动。我知道如果我重新启动它们会再次出现。但这是一个没有持久性的livevd。因此,如果我重新启动,我将失去大约 1 小时的固件准备时间,等等,

现在我将重新启动。但我想学习如何恢复 /dev 如果这样的情况再次发生(因为现在我需要知道即使我永远不会再使用它)


更新:只记得 LFS。从头开始阅读 linux 文档,我认为最简单的解决方法是调用

 /etc/init.d/udev restart
Run Code Online (Sandbox Code Playgroud)

大多数文件现在似乎都在那里。

linux gentoo rm udev dev

5
推荐指数
1
解决办法
4336
查看次数

将 udev 环境变量传递给 systemd 服务执行

我正在迁移绑定到块设备的更改操作并运行给定脚本的现有 udev 规则。

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", RUN+="/usr/local/bin/script"
Run Code Online (Sandbox Code Playgroud)

在此配置中,udev 传递了与硬件设备相关的环境变量,例如ID_CDROM_MEDIA-0ID_FS_LABEL。我已经更新了 udev 规则以使用 systemd 在硬件更改时启动服务。

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", TAG+="systemd", ENV{SYSTEMD_WANTS}=="drive-change.service"
Run Code Online (Sandbox Code Playgroud)

systemd 服务文件:

[Unit]
Description=changes to dvd drive

[Service]
Type=oneshot
ExecStart=/usr/local/bin/script

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

此时服务在更改事件上运行,但 udev 中 RUN 命令传递的环境变量不会传递给服务的执行。

是否可以将环境从 udev 传递到 systemd 的执行环境,还是需要显式传递参数?

linux udev systemd

5
推荐指数
1
解决办法
5252
查看次数

为什么升级后eth0重命名为enx78e7d1ea46da?

我认为这与可预测的网络接口名称有关。该设备是运行kali(kali-next)的Raspberry Pi B型号

  1. 包含固件/BIOS 的名称为板载设备提供索引号(例如:eno1)
  2. 包含固件/BIOS 提供的 PCI Express 热插拔插槽索引号的名称(例如:ens1)
  3. 包含硬件连接器物理/地理位置的名称(例如:enp2s0)
  4. 包含接口 MAC 地址的名称(例如:enx78e7d1ea46da)
  5. 经典的、不可预测的内核原生 ethX 命名(例如:eth0)

默认情况下不使用策略 4),但如果用户选择它,则可用。

我在哪里可以禁用策略 4?我不知道为什么首先启用它。固件/BIOS 似乎没有提供以太网接口的索引/位置信息。

$ udevadm test-builtin net_id /sys/class/net/enx78e7d1ea46da 2> /dev/null
ID_NET_NAME_MAC=enx78e7d1ea46da
ID_OUI_FROM_DATABASE=Raspberry Pi Foundation
Run Code Online (Sandbox Code Playgroud)

networking linux udev

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

从 udev RUN 命令写入文件

我正在创建一个 udev 规则集,每次插入某个 USB 驱动器时都会写入日志文件。我的规则集存储在 中/etc/udev/rules.d /99-log-USB-drive.rules,当前包含以下内容:

# Skip if not the expected USB drive
ENV{ID_FS_UUID}!="SOMEUUID", GOTO="end"

# Try different ways of interacting with the file system
ACTION=="add", RUN+="/usr/bin/touch /home/myusername/udevtest.txt"
ACTION=="add", RUN+="/bin/chmod 664 /home/myusername/udevtest.txt"
ACTION=="add", RUN+="/bin/echo 1 | /usr/bin/tee /home/myusername/udevtest.txt"
ACTION=="add", RUN+="/bin/echo 2 >> /home/myusername/udevtest.txt"

# Exit
LABEL="end"
Run Code Online (Sandbox Code Playgroud)

touch 和 chmod 命令都按预期工作,但是当我尝试写入文件时,我什么也没得到。使用 udev 启用调试

udevadm control --log-priority=debug

将以下输出呈现为/var/log/syslog

Dec  3 18:00:49 Hostname systemd-udevd[9629]: starting '/bin/echo 1 | /usr/bin/tee /home/myusername/udevtest.txt'
Dec  3 18:00:49 Hostname systemd-udevd[9612]: '/bin/echo 1 …
Run Code Online (Sandbox Code Playgroud)

linux redirection pipe udev

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

如何让 udev 在插入或重新启动后挂载某些 USB 磁盘?

我刚刚升级到 Fedora 15。我使用Bacula进行备份已有几年了,它运行良好。但是现在我遇到了一个问题,可能是因为 Bacula 现在以用户 bacula 而不是 root 身份运行。

我的备份媒体是两个 USB 磁盘驱动器(我在场外保留一个,大约一个月更换一次)。但是,Fedora 会自动挂载 USB 驱动器,其挂载点由我的 UID 拥有,模式为 700,大概是因为我已登录,这对于大多数 USB 存储设备来说都是正确的。但是,在这种情况下,并不是因为 Bacula 无法访问它。

如果我正确理解了事件的顺序,udev 会创建 /dev/sdb 和 /dev/sdb1 设备节点,然后这些由 udisk(这是一个 Gnome 组件)自动挂载。udisk 决定了挂载参数是什么。

我想要的是任何标有“BACKUP*”的磁盘都安装在 bacula:bacula 拥有的挂载点上,模式 700。我想我需要在 /etc/udev/rules.d 中有一个自定义的 udev 规则文件。我已经阅读了 udev(7) 页面和“编写 udev 规则”。到目前为止,这是我在一个名为“10-backup-disk.rules”的文件中提出的内容。它正在被 udev 解析好,但不起作用:磁盘仍然归我所有。有人能告诉我我做错了什么吗?

谢谢。

KERNEL!="sd[a-z][0-9]", GOTO="backup-disk_auto_mount_end"
ENV{ID_FS_LABEL}!="BACKUP*", GOTO="backup-disk_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get disk label
ENV{dir_name}="%E{ID_FS_LABEL}"

# Global mount options
ACTION=="add", ENV{mount_options}="relatime,rw"
# Filesystem-specific mount options
ACTION=="add", …
Run Code Online (Sandbox Code Playgroud)

fedora udev

2
推荐指数
1
解决办法
4571
查看次数

udev 规则未执行

我有以下udevadm列出的设备:

查看设备'/devices/pci0000:00/0000:00:1c.7/0000:09:00.0/usb6/6-2/6-2:1.0/ttyUSB0/tty/ttyUSB0':KERNEL==“ttyUSB0”子系统==“tty”驱动程序==“”

查看父设备 '/devices/pci0000:00/0000:00:1c.7/0000:09:00.0/usb6/6-2/6-2:1.0/ttyUSB0': KERNELS=="ttyUSB0" SUBSYSTEMS== “usb 串行”驱动程序==“pl2303”ATTRS{port_number}==“0”

查看父设备 '/devices/pci0000:00/0000:00:1c.7/0000:09:00.0/usb6/6-2/6-2:1.0': KERNELS=="6-2:1.0" SUBSYSTEMS ==“usb”驱动程序==“pl2303”ATTRS{bInterfaceNumber}==“00”ATTRS{bAlternateSetting}==“0”ATTRS{bNumEndpoints}==“03”ATTRS{bInterfaceClass}==“ff”ATTRS{bInterfaceSubClass }==“00”ATTRS{bInterfaceProtocol}==“00”ATTRS{supports_autosuspend}==“1”

所以我创建了规则:

内核==“ttyUSB0”,子系统==“tty”,子系统==“usb串行”,驱动程序==“pl2303”,内核==“6-2:1.0”,SYMLINK + =“cc128serial”

这是行不通的。

但是如果我这样做:

内核==“ttyUSB0”,子系统==“tty”,子系统==“usb串行”,驱动程序==“pl2303”,SYMLINK + =“cc128serial”

然后就可以了。我尝试过KERNELS=="6*"等等,但没有可用

有任何想法吗 ?

谢谢

linux udev

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

/dev/xvda1 full ,虽然没有临时文件

我有 AWS ec2 微型实例,突然它显示内存已满。我已经使用df -h命令检查了文件夹。结果如下所示。

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  7.1G  257M  97% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            285M  8.0K  285M   1% /dev
tmpfs            59M  184K   59M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            295M     0  295M   0% /run/shm
none            100M     0  100M   0% /run/user
Run Code Online (Sandbox Code Playgroud)

我已经清除了所有临时文件夹和日志文件,但它仍然显示相同的大小。为什么会发生这种情况?如何删除不需要的文件?并增加空间?

udev amazon-web-services ubuntu amazon-ec2

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

在linux上用sftdisk创建分区后等待内核

我正在linux下用sfdisk创建一个分区。创建分区后,我想创建一个文件系统。

这会因 mkfs.ext3 找不到分区而失败:

echo ",,L" | sfdisk $DEVICE
mkfs.ext3 $PARTITION
Run Code Online (Sandbox Code Playgroud)

但这有效:

echo ",,L" | sfdisk $DEVICE
sleep 1
mkfs.ext3 $PARTITION
Run Code Online (Sandbox Code Playgroud)

我怀疑,在 udev 有机会创建设备节点之前,内核需要一些时间来更新它的内部数据结构,或者我的脚本再次被调度。

如何准确等待设备节点创建完成?对于每个恒定时间,可能有一个系统处于负载状态,而这个时间不够用。

linux partitioning udev linux-kernel

0
推荐指数
1
解决办法
717
查看次数