我想编写一个脚本,每次将 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