Хотя UUID не доступны напрямую через udev, по крайней мере, в Fedora и Ubuntu они задаются как переменные среды ( ENV
). Вы можете прочитать все переменные окружения устройства, позвонив udevadm info /dev/sdc
. Например, для NTFS на внешнем диске я получаю:
$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]
Все с E:
передом задается как переменная окружения.
Сопоставление с UUID
Вы можете сопоставить это с ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. В качестве первого фильтра я сопоставляю, KERNEL=="sd?2"
чтобы убедиться, что я работаю только с блочными устройствами с правильным номером раздела. Полное правило будет выглядеть так:
KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"
Команда logger полезна для подтверждения того, что правило действительно выполняется. Затем вы должны убедиться, что правило не содержит синтаксических ошибок с udevadm test /dev/sdc2
. Ваш файл правил должен быть указан в выводе, и рядом с ним не должно появляться сообщений об ошибках. Теперь вы можете запустить все правила для вашего устройства , чтобы проверить , работает ли ваше правило , как и планировалось: sudo udevadm trigger /dev/sdc2
. Если ваше правило соответствует, вы найдете пользовательское сообщение в системном журнале ( /var/log/syslog
или через journalctl -b
).
Редактировать: ali_m указал, что переменные среды установлены по предыдущим правилам и, следовательно, доступны только в том случае, если ваш .rules
файл имеет достаточно высокий лексикографический порядок . Начиная с "60" должно быть достаточно. Лично я начинаю свои правила с "zz" (если это возможно), чтобы сразу же отличить их от предопределенных правил.
Использование UUID в RUN
команде и в других местах
У Udev достаточно мощный синтаксис подстановки переменных и атрибутов . В частности, каждый случай $env{ID_FS_UUID}
будет заменен на UUID диска. Таким образом, чтобы смонтировать устройство под /media/
UUID
вы можете использовать это правило:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Вы, вероятно, хотите вместо этого настроить udisks, он специализирован для проблемного пространства, которое вы хотите решить. См. Https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia в качестве отправной точки.
Фактический пример использования для монтирования устройств с udev вместо /etc/fstab
udisks - это монтирование файловых систем zfs, которые имеют некоторые особенности, делающие их не совсем подходящими для обычных инструментов.