我在我的 Linux 系统上使用两个相同的 USB 到串行适配器。所以取决于谁先插入,其中一个用名称 /dev/ttyUSB0 表示,另一个用 /dev/ttyUSB1 表示。有什么技巧可以让名字持久化吗?我有三个USB端口。是否可以将名称链接到物理端口?
谢谢,
在从 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)
大多数文件现在似乎都在那里。
我正在迁移绑定到块设备的更改操作并运行给定脚本的现有 udev 规则。
SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", RUN+="/usr/local/bin/script"
Run Code Online (Sandbox Code Playgroud)
在此配置中,udev 传递了与硬件设备相关的环境变量,例如ID_CDROM_MEDIA-0和ID_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 的执行环境,还是需要显式传递参数?
我认为这与可预测的网络接口名称有关。该设备是运行kali(kali-next)的Raspberry Pi B型号
默认情况下不使用策略 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) 我正在创建一个 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) 我刚刚升级到 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) 我有以下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*"等等,但没有可用
有任何想法吗 ?
谢谢
我有 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)
我已经清除了所有临时文件夹和日志文件,但它仍然显示相同的大小。为什么会发生这种情况?如何删除不需要的文件?并增加空间?
我正在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 有机会创建设备节点之前,内核需要一些时间来更新它的内部数据结构,或者我的脚本再次被调度。
如何准确等待设备节点创建完成?对于每个恒定时间,可能有一个系统处于负载状态,而这个时间不够用。
udev ×9
linux ×7
amazon-ec2 ×1
dev ×1
fedora ×1
gentoo ×1
linux-kernel ×1
networking ×1
partitioning ×1
pipe ×1
redirection ×1
rm ×1
systemd ×1
ubuntu ×1
usb ×1