Використовуйте UUID у правилах udev та монтуйте usb-накопичувач на / media / $ UUID


13

Я хочу встановити USB-накопичувач на /mediaоснові UUID диска. Як я можу використовувати UUID USB-накопичувача у файлі правил udev та що таке правило udev для монтажу usb-накопичувача з номером UUID як імені папки.

blkidКоманда виводить UUID диска , але тільки після монтажу.


1
Caveat 2019: У сучасних настільних системах Linux, що використовують systemd, правила udev не монтують файлові системи в звичайному просторі імен користувачів, тобто ви не можете монтувати файлову систему за допомогою команди mount в правилі udev. Крім того, у цих системах система запобіжників (файлових систем користувача) налаштована для обробки USB-кріплень за допомогою значка робочого столу, тому монтаж вручну, використовуючи правило fstab, певною мірою суперечить системі запобіжників. Для автоматичного монтажу файлових систем USB UUID на безголовому сервері, найкраще видалити конфігурацію запобіжника systemd та використовувати правила udev для запуску послуг одномоментного монтажу.
Джонатан Бен-Аврахам

Перегляньте це рішення за допомогою fstab, systemd та automount, протестованого на останніх Debian: unix.stackexchange.com/a/347007/31228
Джонатан Бен-Аврахам

Відповіді:


14

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


1
Один важливий момент, який потребував певного часу, щоб зрозуміти: для того, щоб відповідати змінним середовищам, ваше правило потрібно застосувати після налаштування цих змінних. Для цього ім’я вашого .rulesфайла потрібно починати з числа> 60 .
ali_m

@ali_m: Дякую, я додав вашу інформацію у відповідь.
Персейди

У Ubuntu 18.04, деякі команди udevadm можна вказувати на / dev / sdXX (наприклад, інформація o udevadm), інші потрібно чомусь вказувати на / sys / block / sdXX (наприклад, тест udevadm).
Грег Белл

0

В голові приходить грубе рішення. Встановіть узгоджений запис fstab, який ідентифікується UUID. І в правилах udev виконуйте mount -aщоразу, коли додається новий пристрій sd *.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.