9

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

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

2 ответа2

9

Хотя 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, которые имеют некоторые особенности, что делает их не совсем подходящими для обычных инструментов.

0

У меня в голове грубое решение. Установите соответствующую запись в fstab, которая идентифицируется как UUID. А в правилах udev выполняйте mount -a каждый раз, когда добавляется новое устройство sd *.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .