
Я хочу выйти за рамки этого превосходногорешениеот @AB, который позволяет автоматически монтировать заданную съемную ext3 FS с помощью udev
правила. В частности, я хотел бы указать нескольковарианты крепления: " nodev,noexec,x-gvfs-show
", желательно в рамках конкретного udev
правила, используемого для его монтирования, поскольку он имеет дело с одним вполне конкретным физическим носителем.
Если опция не указана, том монтируется следующим образом:
$ cat /proc/mounts | grep -e MYLABEL
/dev/mmcblk0p1 /mnt/MYLABEL ext3 rw,relatime,data=ordered 0 0
Чтобы указать параметры монтирования, я попытался расширить udev
правило из предыдущего решения следующим образом:
KERNEL=="mmc*", ENV{ID_FS_UUID}=="______", RUN+="/usr/local/sbin/mount_by.sh '%E{ID_FS_LABEL}' '%E{ID_FS_UUID}' 'nodev,noexec,x-gvfs-show'"
где /usr/local/sbin/mount_by.sh
включает в себя:
#!/bin/sh
/bin/mount "/dev/disk/by-uuid/$2" "/mnt/$1" -o "$3"
Вышеуказанный код тихо прерывается, поскольку параметры монтирования, определенные пользователем root, по-видимому, отклоняются, и том (SD-карта) молча монтируется в /media/MYUSER/MYLABEL.
В чем дело ?
Что я пытался сделать:
Во многих сообщениях, которые я видел, речь идет о трудностях спецификации опций монтирования при использовании udev
(например,1,2,...) остаются без ответа.
Одинимеет дело с опцией GVFS, x-gvfs-show
используемой в сочетании с udev
правилами, когда смонтированный том должен отображаться Devices
в графическом интерфейсе Nautilus, а пользователь без прав root должен иметь возможность размонтировать его. Чтобы хотя бы охватить этот последний аспект, я вернулся к НЕ указанию опции монтирования в моих правилах udev, но добавил запись /etc/fstab
, довольно уродливый хак, учитывая тот факт, что я параллельно сохраняю работающее udev
правило для того же тома uuid. Тем не менее, я добавил:
UUID=_________ /mnt/MYLABEL ext3 nodev,noexec,x-gvfs-show 0 2
FS смонтирован, но хотя он отображается в Nautilus так, как и задумано, cat /proc/mounts | grep -e MYLABEL
результат тот же, что и раньше... т.е. параметры, nodev,noexec
похоже, беззаботно игнорируются.
Неудивительно, что я также получаю сообщение об ошибке на экране:
Невозможно смонтировать MYLABEL. Устройство /dev/mmcblk0p1 уже смонтировано в `/mnt/MYLABEL'.
Есть у кого-нибудь мысли?
НАГРАДАПожалуйста, постарайтесь предоставить канонический ответ, который может послужить этому OP и всем тем людям, которые заинтересованы в указании опций монтирования через udev
правило. Если это невозможно, пожалуйста, объясните, почему, и предоставьте жизнеспособный обходной путь. Ура.
решение1
Сценарий
#!/bin/sh
export mount_point="/mnt/$1"
existing_device=$(awk '$2 == ENVIRON["mount_point"] {print $1; exit}' < /proc/mounts)
if [ -n "$existing_device" ]; then
exit 1
fi
mkdir -p "$mount_point"
sleep 1 # Perhaps not necessary, but in the test with the OP it was necessary
mount "/dev/disk/by-uuid/$2" "$mount_point" -o "$3"
exit 0
Должно отлично работать с таким правилом udev (нужно заменить UUID)
KERNEL=="mmc*", ENV{ID_FS_UUID}=="13ededb9-41e9-4674-b9dc-40ce178af91d", RUN+="/usr/local/bin/mount_by '%E{ID_PART_ENTRY_NAME}' '%E{ID_FS_UUID}' nodev,noexec"
Поскольку udev-rules запускается как root
, -o
будет использоваться .
Плохо то, что в моей системе определенно x-gvfs-show
нет в списке опций-o
решение2
Вам не следует использовать правило udev для этого. Во-первых, это конфликтует с udisks: они оба пытаются смонтировать диск в разных местах, и кто из них победит, остается только гадать. Также, когда вы закончите с диском, вы хотите иметь возможность щелкнуть по нему правой кнопкой мыши в графическом интерфейсе и извлечь его, но вы не можете этого сделать, если правило udev смонтировало его.
Если вы хотите, чтобы он был смонтирован с пользовательскими параметрами или в пользовательском расположении, вам просто нужно добавить для него запись в /etc/fstab и убедиться, что вы включили параметр «user», который позволяет пользователям, не являющимся пользователями root, автоматически монтировать его с помощью udisks, а затем они смогут его размонтировать.
решение3
Чтобы завершить ответ AB и занести его в протокол:
Варианты крепления может быть указан внутри правил udev ... при определенных условиях. Когда я запускал тесты, я заметил, что некоторые параметры:
- принято и исполнено:
ro
,rw
,nodev
,noexec
- принято и проигнорировано:
comment=x-gvfs-show
, - не принимаются, так как они нарушают правило udev:
mode=0XYZ
,x-gvfs-show
В последнем случае нарушение udev
правила означает udisk
автоматическое монтирование носителя с параметрами по умолчанию.
Тег , вы можете подумать udev
, MODE="0550"
эквивалентен вызовутолько для чтения( ro
) mount-option, игнорируется. Обратите внимание, что указание ro
or rw
не отображается в Nautilus, как можно было бы ожидать. Как ни странно, разрешения, отображаемые Nautilus, остаются неизменными, тогда как попытка записи, если ro
она установлена, приведет к предупреждающему сообщению и отказу в разрешении на запись. Ошибка ?
Последний, но тем не менее важный,неорганизуйте запись /etc/fstab
в то же время, когда вы указываете udev
правило монтирования для данного устройства. Это приведет к конфликту и сообщению об ошибке, поскольку udisk
будет конкурировать с вашим udev
правилом для монтирования устройства. Ничего удивительного. Устройство все равно будет смонтировано (в моем случае, по правилу udev
- пожалуйста, не спрашивайте почему...) и даже может быть доступно.
Немного HTH.