запустить монтирование как root внутри правила udev

Имена файлов патчей не должны иметь значения. Что (обычно) имеет значение, так это имя файла патча, как оно определено в первых двух строках самого файла патча.

В качестве примера

--- /tmp/file.original  2015-10-08 13:02:28.171436259 +0100
+++ /tmp/file   2015-10-08 13:02:31.167408397 +0100
@@ -1,3 +1,3 @@
 This is the file
-This is the original file
+This is the patched version of the file
 This is the file

Здесь показано, что файл для патча - /tmp/file, и патч может быть применен с помощью patch -p0 < patch_file.

0
23.03.2018, 17:59
2 ответа

Для обычного пользователя, чтобы смонтировать том (, даже если у него есть полный доступ к файлу устройства ), необходима запись в /etc/fstab. Это явно не работает с динамическими именами устройств.

udev может только добавлять символические ссылки, но не изменять имя блочного устройства. Но для записи в fstab нужно настоящее имя.

Но вместо имени устройства можно использовать UUID файловой системы. udev может сделать устройство доступным для чтения для вашего пользователя и установить символическую ссылку, чтобы ваш пользовательский скрипт мог определить UUID.

запись fstab

UUID=8186709a-ab1f-4d18-80bb-b219cb126398 /mnt/tmp   ext4       defaults,noauto,user,nofail 0 0

скрипт монтирования

current_uuid=$(blkid --output export /dev/myusb | grep ^UUID=)
mount "$current_uuid"

сопоставитель устройств

Другой подход заключается в размещении устройства отображения устройств поверх USB-устройства(man dmsetup). Преимущество заключается в том, что таким образом вы получаете статическое имя, например. /dev/mapper/myusb. Но я не знаю, как отреагирует DM устройство, если выдернуть флешку. Для этого вам могут понадобиться правила отключения udev. Это кажется намного более сложным и, вероятно, не стоит статического имени.

2
28.01.2020, 02:32

Я решил свою проблему, не касаясь /etc/fstab, с помощью программы pmount . Эта программа, по-видимому, доступна в репозиториях пакетов нескольких дистрибутивов Linux.

В Ubuntu автоматически создает папки внутри /mediaи монтирует в них диски. Кажется, нет возможности монтировать диски вне /media, но лично я с этим смирился.

Программа принимает идентификатор раздела (, например.sdb1)в качестве аргумента. $DEVNAME, доступный в скрипте udev, предоставляет идентификатор диска (, например.sdb). С флешками разумно ожидать, что диск будет иметь только первый раздел(sdb1).

Таким образом, рабочая версия скрипта в вопросе будет:

LOG_FILE=/home/<username>/usb_log
echo "New usb device detected at $DEVNAM doing stuff
pmount "{$DEVNAME}1" &>> $LOG_FILE
ret=$?
echo "$ret" >> $LOG_FILE

В качестве последнего замечания :сценарий запускается от имени пользователя root, и файл сценария должен принадлежать пользователю root. (в Ubuntu)

0
28.01.2020, 02:32

Теги

Похожие вопросы