![如何为具有两个分区的 USB 闪存创建 udev 规则以在 /dev 下创建持久节点?](https://linux22.com/image/1058118/%E5%A6%82%E4%BD%95%E4%B8%BA%E5%85%B7%E6%9C%89%E4%B8%A4%E4%B8%AA%E5%88%86%E5%8C%BA%E7%9A%84%20USB%20%E9%97%AA%E5%AD%98%E5%88%9B%E5%BB%BA%20udev%20%E8%A7%84%E5%88%99%E4%BB%A5%E5%9C%A8%20%2Fdev%20%E4%B8%8B%E5%88%9B%E5%BB%BA%E6%8C%81%E4%B9%85%E8%8A%82%E7%82%B9%EF%BC%9F.png)
我有一个 USB 闪存,我在上面创建了两个分区,连接时有时会使用 sda、sda1 和 sda4,而不是 sdb、sdb1、sdb4。为了避免这种混淆,我决定创建一个 udev 规则,以将其永久地符号链接到 /dev 下。
我创建了以下规则
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4d81", SYMLINK+="myusb"
当我重新启动时,它会在下面创建符号链接/dev/myusb
,但我无法挂载它。
sudo mount /dev/myusb /media/myusb
mount: /dev/bus/usb/002/003 is not a block device
我认为我收到该错误是因为它包含两个分区。那么我该怎么办?
答案1
我认为问题在于您无法一次挂载带有多个分区的整个驱动器。您必须自己挂载每个分区。挂载意味着访问文件系统,这在两个不同的分区上可能非常不同。您如何将两个文件系统放入一个目录中?您必须至少有两个子目录,例如/media/myusb/part1
。
也就是说我们回到了 UUID 和标签。
您可以创建一个 udev 规则,触发一个脚本,通过 uuid 挂载两个分区,例如
#!/bin/bash
mount /dev/disk/by-uuid/xxxxx-xxxx-xxxxx-xxxxxx /media/myusb/part1
mount /dev/disk/by-uuid/yyyyy-yyyy-yyyyyy-yyyyy /media/myusb/part2
或者,您可以将分区放入 /etc/fstab,然后让 udev 执行mount -a
。
使用“blkid”打印设备的通用唯一标识符;这可以与 UUID= 一起使用,作为一种更强大的设备命名方式,即使添加和删除磁盘也能正常工作。
也许你可以尝试一下:
对于分区一:
KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4d81", SYMLINK+="myusb1"
对于分区二
KERNEL=="sd?4", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4d81", SYMLINK+="myusb2"
不确定它是否有效,但你可以尝试一下。
https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux https://wiki.ubuntuusers.de/udev/
答案2
首先我要感谢所有回复的人,他们引导我走上正确的道路。
首先我检查了设备以定位 USB 驱动器
fdisk -l
Disk /dev/sda: 15.5 GB, 15512174592 bytes
234 heads, 12 sectors/track, 10789 cylinders, total 30297216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00055ec3
Device Boot Start End Blocks Id System
/dev/sda1 * 16128 30297215 15140544 c W95 FAT32 (LBA)
/dev/sda4 2142880 5194399 1525760 0 Empty
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000517fa
Device Boot Start End Blocks Id System
/dev/sdb2 * 2048 40959079 20478516 83 Linux
/dev/sdb3 40959998 234436544 96738273+ 5 Extended
/dev/sdb5 40960000 52956093 5998047 83 Linux
/dev/sdb6 52957184 221904895 84473856 83 Linux
/dev/sdb7 221906944 234436544 6264800+ 83 Linux
我的 USB 记忆棒被抓住sda
sda1
了sda4
(我还没有找到将 sda 分配给主磁盘的方法)
然后我做了一个attribute-walk
获取相关参数
udevadm info -a -p $(udevadm info -q path -n /dev/sda)
udevadm info -a -p $(udevadm info -q path -n /dev/sda1)
udevadm info -a -p $(udevadm info -q path -n /dev/sda4)
我使用 ATTRS{serial}
和 作为区分ID ATTR{partition}==1
。ATTR{partition}==2
KERNEL=="sd*", ATTRS{serial}=="0019E06B5883CCA187BC2C59", ATTR{partition}=="1", SYMLINK+="usbdevices"
适用于分区 1