Как создать правило udev для подключения только USB-накопителя?

Я пытаюсь установить конкретный USB-накопитель, чтобы всегда устанавливать только чтение. Если я подключу его, он рассматривается как sdb с одним разделом, sdb1 . Вот некоторые соответствующие строки udevadm (не весь вывод, конечно):

 $ udevadm info -a -n /dev/sdb1 looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/host21/target21:0:0/21:0:0:0/block/sdb/sdb1': KERNEL=="sdb1" SUBSYSTEM=="block" DRIVER=="" ATTR{ro}=="0" ATTR{size}=="976768002" ATTR{stat}==" 473 30586 33938 3460 5 0 40 1624 0 2268 5084" ATTR{partition}=="1" 

Хорошо, поэтому я написал следующее правило udev и сохранил его как /etc/udev/rules.d/10-usbdisk.rules :

 SUBSYSTEM=="block", ATTR{size}=="976768002", MODE="0555" 

В соответствии с этим , использование size должно быть достаточно, но я также пробовал другие перестановки. В любом случае правило, похоже, читается (опять же, выбранные выходные строки, здесь вы можете увидеть весь вывод:

 $ udevadm test $(udevadm info -q path -n /dev/sdb1) 2>&1 [...] read rules file: /etc/udev/rules.d/10-usbdisk.rules [...] MODE 0555 /etc/udev/rules.d/10-usbdisk.rules:4 

Итак, похоже, что правило должно применяться, и похоже, что MODE="0555" является правильным синтаксисом. Однако, когда я фактически подключаю диск, я могу с удовольствием создавать / удалять файлы на нем.

ОС: тестирование Debian (LMDE)

Итак, что я делаю неправильно? Как смонтировать конкретный USB-накопитель в режиме чтения только автоматически, используя udev 1 ?

1 Я знаю, как это сделать с помощью fstab, но настройки fstab игнорируются gvfs. Моя цель состоит в том, чтобы это автоматически устанавливалось как прочитанное только в графическом интерфейсе. Предположительно, это должно быть сделано через udev или gvfs каким-то образом.

  • Избежание проблем с разрешениями на переносном жестком диске в Linux Mint
  • Linux на жестком диске, загрузчик на USB-накопителе
  • USB 3 Флэш-диск, обнаруженный как USB 2.10
  • Ubuntu 13.04 не распознает USB-накопитель
  • Как изменить имя одного раздела sdaX на sdaY?
  • Как подключить логически отключенное USB-устройство?
  • Как запустить скрипт при удалении USB?
  • Почему в руководстве по установке Debian предлагается выполнить «синхронизацию» после необработанной копии файла изображения на USB-ключ?
  • 3 Solutions collect form web for “Как создать правило udev для подключения только USB-накопителя?”

    Хорошо, резюме состоит в том, что Nautilus использует GVFS, и вам нужно сказать udev использовать GVFS при чтении записей fstab, вы можете сделать это, используя:

     /dev/block-device /mount/point auto x-gvfs-show,ro 0 0 

    x-gvfs-show покажет udev и всем, кто хочет использовать помощник GVFS для монтирования файловой системы, поэтому gvfs имеет все элементы управления, umounting, moving mount points и т. д.


    Давайте посмотрим, понимаем ли мы, как диски, установленные в современных Linux-системах, с графическим интерфейсом (в частности, Nautilus):

    Nautilus использует GVFS в качестве backend для монтирования FTP, SMB, блокирующих устройств, среди прочего, в файловую систему. Инструмент, который GNOME, предназначенный для таких предложений, называется так называемым диском, является тем, который изменяет поведение GVFS. Теперь вот весело.

    Nautilus игнорирует все, что не было смонтировано с помощью GVFS (например, с использованием fstab), и дает вам очень элементарный контроль над этим с помощью udev (Nautilus не просит GVFS размонтировать или смонтировать устройства, которые не управляются с помощью GVFS, включая udev, fstab, mount и любой другой blob), например, просто размонтировать и монтировать. Используя разрешения и параметры, хранящиеся в fstab / udev, вы можете использовать эти файловые системы соответственно, но вы не можете изменять поведение с помощью GVFS. Если что-то было смонтировано с использованием sudo mount -o rw /dev/sda3 , sudo mount -o rw /dev/sda3 сообщает udev, что у него нет прав на изменение точки монтирования, поэтому он передает ответственность udev, который в свою очередь просит polkit для разрешений. Если вы использовали GVFS, сам nautilus отключил устройство без разрешений, а также диалогов и т. Д.

    Я думаю, что проблема – SUBSYSTEM , вы должны изменить ее на usb вместо block . Я добавляю эту строку в свое правило, и это работает для меня:

     SUBSYSTEMS="usb", ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_MOUNT_OPTIONS}="ro" 

    Вы можете сделать блочное устройство только для чтения с помощью

     blockdev --setro /dev/sdb1 

    Вы можете сделать udev выполнить эту команду (IIRC RUN= ).

    Interesting Posts

    Передача строки сценария в ssh изнутри функции сценария bash – проблема с оценкой переменных

    Есть ли параллельный файловый архиватор (например, tar)?

    Arch Linux не загружается: ошибка: нет такого устройства

    Что заставило мой Linux Mint перезагрузиться?

    Устранение конечного пространства на обернутых линиях в терминале

    Могу ли я сделать историю не распечатывать временные метки для команд, которые были запущены до того, как я включил этот параметр?

    Настройка iptables по программному обеспечению

    Ошибка: команда не найдена

    Что такое PCI BAR номера 7,13,14,15 в Linux?

    Как изменить цвет символа при хвосте и tr

    Полный список сокращений языков для опции `set spelllang` для vim?

    Установка centos и freebsd с последовательной консолью

    Как просмотреть доступные пакеты в определенном репозитории на Debian?

    Gentoo как автоматически запускать программы при входе в систему?

    Показывать запущенные процессы без системных процессов

    Linux и Unix - лучшая ОС в мире.