Монтирование USB-дисков автоматически (как это работает)

12

Предыстория: я пытаюсь смонтировать диск USB только для чтения, но моя установка Ubuntu монтирует его rw, когда я подключаю диск.

Я могу размонтировать диск вручную и перемонтировать его вручную только для чтения с помощью команд umount и mount, но это не интересно. Может кто-нибудь дать мне быстрое объяснение того, как именно монтируются usb автоматически в типичной системе linux (udev? Историческая справка тоже хороша) и, возможно, как я могу настроить этот процесс, чтобы позволить мне читать диск ro?

Благодарю.

Редактировать: я использую GNOME, если это вообще помогает.
Edit2: в спешке я забыл предоставить немного больше информации. Вот как выглядит диск из вывода 'mount'.

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

Edit3: это также может быть относительным по-своему. В выводе mount у меня также есть следующее:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

Я думал, что это может быть связано с вышеупомянутым креплением fuseblk, но я обнаружил, что это так.

Gvfs - это виртуальная файловая система Gnome. Это виртуальная файловая система, созданная поверх уже существующего ядра VFS. gvfs использует библиотеку GIO (которая является API-интерфейсом VFS) для доступа к файлам, устройствам, удаленным сетевым расположениям и т. д. В этом случае выше ('gvfs-fuse-daemon') gvfs использует FUSE для монтирования файлов / расположений / устройств. По сути, это то, что происходит, когда вы монтируете удаленное сетевое соединение в Nautilus. Он будет использовать FUSE для монтирования (внутри?) Каталога .gvfs, а затем будет связываться с уровнем виртуальной файловой системы gnome для связи с новым монтированием.

По сути, эта структура позволяет пользователю динамически монтировать новые локации и взаимодействовать с ними через nautilus.

Просто для справки: FUSE - это файловая система пользовательского пространства, она также позволяет пользователю запускать монтирование, даже если этот пользователь не является пользователем root)

Так, где это оставляет меня? Ну, диск LaCie монтируется с типом fuseblk. Это просто блочное устройство с предохранителем. Таким образом, какой-то демон автоматически обнаружил диск, когда он был подключен, а затем пошел вперед и запустил fuse для монтирования моего блочного устройства. Так что же это за демон и как он настроен (я думаю, это какая-то внутренняя вещь гнома) - это самый важный вопрос. Вторичный вопрос - как система автоматически обнаружила недавно вставленный USB-диск, но я думаю, что это немного в стороне и гораздо более низкий уровень здесь (читай: udev?).

Ссылки:

fthinker
источник
существует ли запись fstab для файловой системы / media / LaCie и / или устройства / dev / sdb1? В любом случае / dev / sdb1 помечен (e2label / dev / sdb1)?
Ток
Нет, там нет записи fstab. Я считаю, что он помечен, как он монтируется в / media / LaCie. Мне нужно установить ntfslabel, чтобы наверняка узнать, но я только собираюсь уйти с работы. Это также появляется на моем рабочем столе как LaCie.
fthinker

Ответы:

3

Я пытался сделать это на моем компьютере, и это работает :)

Сначала я получаю имя для моего устройства:

ls -l /proc/disk/by-id/

В моем случае это / proc / disk / by-id / usb-09a6_8001

Я добавил эту строку в / etc / fstab:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

И это работает, когда я подключаю свой usbkey, он монтируется ro и принадлежит моему пользователю.

Profy
источник
Спасибо, profy :) Но главное в моем вопросе - снять крайнее разочарование, которое я испытываю каждый раз, когда мне приходится понимать, как работает автомонтирование и usb-устройства. Я здесь, чтобы расшифровать магию, которая скрывается за этими сложными системами. Кроме того, использовать устройства fstab и usb немного сложно, потому что они не всегда гарантированно подключаются при запуске!
fthinker
1
Я не знаю, как это работает, но я уверен, что новые устройства обнаруживаются по правилам udev, посмотрите на /etc/udev/rules.d/ и /lib/udev/rules.d/.
Профи
2

В настоящее время решения по умолчанию - насколько я знаю udisk, демон, обеспечивающий API- интерфейс dbus, а также интерфейс командной строки . Есть также несколько обёрток udisks и автомонтер.

Как правило, вы не конфигурируете udiskсебя, поскольку он просто делает то, что ему говорят, поэтому вам нужно заглянуть в Gnome. Возможно, Gnome Disk Utility позволяет вам изменять / изменять флаги монтирования.

Ульрих Дангел
источник
2

Как сказал Ульрих Дангел, в настоящее время удиски должны быть эталоном. Я еще не видел, как он уведомляется (udev-> dbus-> udisks?), Но вручную его можно использовать для подключения устройства с нужными вам опциями.

Udisks говорит с polkit, чтобы узнать, что пользователю разрешено делать с томами. Я предполагаю здесь, но если бы мы могли найти место для установки свойств для именованного диска / устройства, оно должно работать.

Используя udisksctl, ваш пользователь должен иметь возможность смонтировать устройство с нужными вам опциями, примерно так:

udisksctl mount -b / dev / sdxy -o ro / точка монтирования

Пока не знаю, где разместить варианты.

ОБНОВЛЕНИЕ: Следуя советам Ульриха, я обратился к дисковой утилите Gnome и достиг того, что вам нужно, но не уверен, является ли это наиболее элегантным решением или нет. Я использую Kororaa 17 (на основе Fedora 17) с Cinnamon + Gnome3, перешел к утилите «Диски» и изменил параметры монтирования для моего usb-накопителя, добавил «ro» и сохранил.

Он добавляет запись в fstab (вот где я не рассматриваю это как элегантное решение, я думаю, что он должен оставаться в конфигурации пользователя, а не для всей системы), я подключаю диск, и он автоматически монтируется в выбранной точке монтирования с опциями Я сохранил в Gnome диски утилиту.

TripleDES
источник
Что вы имеете в виду, когда вы должны увидеть, как он уведомлен? Какой шаг отсутствует?
Ульрих Дангел
И это не udev→dbus→udiskтолькоudev/uevent→udisk→dbus
Ulrich Dangel
Я имел в виду, что не был уверен, и хотел это проверить, но теперь я вижу, что я не был на 100% неправ.
тройной
[strike] Пожалуйста, покажите строку, которая была добавлена ​​в fstab. Я хотел бы подтвердить, что я думаю. [/ Strike] Значит, строка fstab соответствует ответу @ profy? т.е. с roвозможностью.
инвертировать
-1

На тему того, как ядро ​​обнаруживает аппаратное обеспечение, вот очень хорошая статья о том, что происходит .

В итоге:

  • ядро постоянно сканирует шины вашего ПК и сопоставляет устройства с виртуальной файловой системой, как правило, в /sys/.
  • ядро отправляет сообщение, что udev доступно новое оборудование, которое:
    • обрабатывать правила udev на устройстве
    • ссылка на устройство в /dev/
    • загрузить драйверы устройства
    • уведомить пользовательское пространство устройства через dbus

На данный момент устройство готово к использованию в пространстве пользователя. Gvfs и FUSE - это пользовательские файловые системы.

инвертировать
источник
Нет, udevкак правило, не уведомляет приложения, dbusэто делается сторонними приложениями. Если вы используете, qdbus --systemвы не увидите никаких имен udev. Обычно приложения просто подписываются ueventsили отправляют свои собственные правила
Ульрих Дангел
Спасибо за указание на это @ulrich. Мое резюме дает очень простую схему, исключающую множество промежуточных шагов. См. Связанную статью для песчаных деталей.
инвертировать
2
статья также является ложной, поскольку обычно не проводится опрос для контроля за автобусами
Ульрих Дангел