如何让 udev 识别 USB 设备,无论它插入哪个 USB 端口?

如何让 udev 识别 USB 设备,无论它插入哪个 USB 端口?

我想编写一个脚本,每次将 USB 设备插入随机 USB 插槽时都会备份 USB 设备上的数据。现在我知道了KERNEL=sdX标识符,但问题是,根据插槽以及是否已插入其他设备,标识符sdX会发生变化。在 udev 中识别我的 USB 设备的最佳方法是什么?我一直在考虑使用partuuid,但我不知道如何使用,也不知道partuuid首先存储在哪里,也不知道它是如何计算出来的。

答案1

gdisk如果您使用而不是对设备进行分区fdisk,您将创建一个 GPT 样式的分区表,对于每个分区,该分区表可以保存 PARTUUID 和 PARTLABEL。c中的命令允许gdisk您设置分区名称,即PARTLABEL。

当您通过在分区上创建新的文件系统来重新格式化分区时,这些分区 ID 不会更改。

大多数文件系统允许您在文件系统上获取或设置 UUID 和 LABEL。这样做的方法取决于文件系统类型,例如对于 ext3/4,它是tune2fs-U-L。它们在 Linux 中显示为 UUID 和 LABEL。

不要混淆这 2 组 id。blkid将显示所有这些:

/dev/sdb1: LABEL="MYLABEL" UUID="A369-D716" TYPE="vfat" PARTLABEL="My new partition" \
  PARTUUID="f0817245-d3ce-408b-9457-e33dfc04aebe"

您可以使用以下命令查看 udev 属性

$ udevadm info -p $(udevadm info -q path -n /dev/sdb1)
...
E: ID_FS_LABEL=MYLABEL
E: ID_FS_LABEL_ENC=MYLABEL
E: ID_FS_UUID=A369-D716
E: ID_FS_UUID_ENC=A369-D716
E: ID_PART_ENTRY_UUID=f0817245-d3ce-408b-9457-e33dfc04aebe
E: ID_PART_TABLE_UUID=7301d696-b66d-4f85-8272-7dd5e29175ae
E: ID_PART_ENTRY_NAME=My\x20new\x20partition

答案2

我使用 USB 设备的 UUID(通用唯一标识符库)做了类似的事情。

您可以使用 blkid 命令查看 UUID:

# blkid

您可以通过查看它的手册页找到有关 blkid 的更多信息

# man blkid

相关内容