Навіть незважаючи на те, що 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]"
Команда реєстратора корисна для того, щоб стверджувати, що правило насправді виконується. Далі слід перевірити, чи правило не містить синтаксичних помилок із 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, які мають деякі ідіосинкразії, що робить їх не зовсім підходящими до звичайних інструментів.