Автомонтирование Flash-накопителей в Linux средствами udev
Для начала, о ручном монтировании флешек.
У меня есть два жестких диска — /dev/sda и /dev/sdb, и флешка. После подключения флеш-накопителя к компьютеру, в системе появляется новое устройство — /dev/sdc. Его можно открыть в fdisk и создать новую партицию, а затем создать на ней файловую систему и примонтировать куда-нибудь: А теперь, об автомонтировании.
В userfriendly дистрибутивах автомонтирование работает «из коробки» и пользователь может и не знать, как оно там сделано. Но знать, как настроить автомонтирование флешек надо, если вы работаете не с DE, а с простым WM или вообще в консоли. Нижеописанный способ автомонтирования будет работать независимо от используемого оконного менеджера и даже без запущенных иксов.
Раньше автомонтирование осуществлялось средствами HAL, но сейчас он отбросил коньки и правильнее использовать настройку автомонтирования через udev. Об этом мы и поговорим.
Суть сводится к тому, чтобы указать udev-у при каком-то особом событии выполнять нужную команду. В нашем случае это монтирование флешки. Сделать это можно, создав правило для udev. Правила udev лежат в /etc/udev/rules.d/ . Вы можете заметить, что там уже есть несколько файлов с правилами. Имена этих файлов начинаются, обычно, с цифр. Это сделано потому-что udev читает файлы правил в алфавитном порядке. Т.е. файл 10-test.rules udev считает раньше, чем 30-blabla.rules. Запомните еще одну важную вещь — когда udev находит первое правило, подходящее для события, он прекращает дальнейший поиск.
Все, что нам надо — добавить следующие строки в файл /etc/udev/rules.d/10-automount.rules. На самом деле, имя может быть любым, а начинается оно с десятки, чтобы правило считывалось раньше других.
Разберем это по порядку. Во-первых, запомните — одно правило — одна строчка. В нашем файле два правила — одно на монтирование флешки при подключении ее к компьютеру, и второе — на отмонтирование ее при отключении.
SUBSYSTEM==»block» указывает класс блочных устройств. KERNEL==»sd*» — этот шаблон фильтрует устройства по именам. Вы можете использовать KERNEL=»sd[c-z]*» или что-то в этом духе. ACTION==»add» — событие добавления устройства. RUN+=»/bin/mount /dev/sdc1 /mnt/flash» — эта опция указывает, какую команду надо выполнять. Если честно, это не лучший вариант, но зато самый простой.
Во второй строке все аналогично. кроме того, что детектится событие не добавления, а удаления устройства, после чего выполняется команда umount.
Чтобы сообщить udev о добавлении новых правил, выполните команду Создайте каталог /mnt/flash (да-да, его надо создать вручную) и подключите флешку к компьютеру. Она должна примонтироваться.
Посмотрим, как можно улучшить наше правило udev для автомонтирования. Было бы не плохо, чтобы система сама создавала точку монтирования, а после отключения флешки — удаляла ее. И еще было бы хорошо подставлять текущее имя устройства в команду mount вместо ручного написания /dev/sdc1, т.к. имя устройства может и измениться. Для этого, приведем /etc/udev/rules.d/10-automount.rules к такому виду:
Для активации изменений не забудьте выполнить
Рассмотрим эти строки.
В первой строке создается каталог, в который будет осуществлено монтирование.
Во второй строке происходит само монтирование. Обратите внимание на uid=1000 — это uid вашего пользователя. Если у вас это значение отличается от 1000, измените его на нужное. «%k» в /dev/%k означает имя устройства, переданное ядром, т.е. sdc1.
В третьей и четвертой строке происходит отмонтирование флеш-накопителя и удаление каталога /mnt/flash.
Кому-то будет удобнее, если имя точки монтирования будет включать имя устройства, например /mnt/flash-sdc1. Как не трудно догадаться, для этого надо /mnt/flash заменить на /mnt/flash-%k:
Вот и все. Если что-то не получается, перепроверьте себя на опечатки.
Для вступления в силу изменений перезагружать компьютер не нужно.
PS:
Чуть не забыл рассказать об одной интересной команде.
Если хотите промониторить, что видит система при подключении/отключении устройства, выполните следующую команду: Теперь вставьте флешку в usb. На экран вывалится куча блоков текста. Вам нужен последний. В нем можно увидеть тип файловой системы, фирму-изготовитель, модель и серийный номер флешки, а так же много другой полезной информации, которая поможет при составлении правил для udev.
Возможно, эти материалы Вас заинтересуют:
Для активации изменений не забудьте выполнить
# udevadm config —reload-rules
Как примонтировать флешку в Linux
В наши дни очень большую популярность у пользователей набрали USB флешки. Они используются для обмена файлами, различными фильмами и документами, установки операционных систем, а также восстановления системы после сбоя. Чтобы работать с флешкой в Linux ее нужно примонтировать в корневую файловую систему.
Дело в том, что организация файловой системы Linux немного отличается от того, что мы привыкли видеть в Winodws. Здесь нет никаких дисков C,D,E и так далее, есть только корень, самая верхняя точка файловой системы, в подкаталоги которой подключаются все жесткие диски и внешние носители.
Если в системе используется окружение рабочего стола, то оно, как правило, берет на себя всю низкоуровневую работу чтобы выполнить монтирование флешки в linux. Система обнаруживает подключенную флешку и в системном лотке всплывает уведомление о подключенном устройстве. Дальше остается кликнуть по значку флешки, чтобы система выполнила все нужные для ее монитрования действия. Но если окружение рабочего стола не запущенно или вам нужно работать в консоли можно выполнить все действия по монтированию флешки вручную.
В этой инструкции мы рассмотрим монтирование usb флешки в linux через терминал, а также настройку автоматического монтирования для оконных менеджеров, которые не поддерживают такую возможность.
Монтирование флешки в Linux
Самое первое, что нужно сделать после того, как вы подключили флешку — узнать имя ее файла в системе. В Unix все устройства имеют свои файлы и именно через эти файлы система и программное обеспечение взаимодействуют с ними.
Файлы флешек и других устройств хранения данных находятся в каталоге /dev. Устройства нумеруются по алфавиту sda, sdb, sdc, sdd и т д. Так как флешка подключается последней у нее будет старшая буква. Например, sdb или sdc. Имя sda принадлежит жесткому диску. Можно, конечно, просто посмотреть содержимое каталога /dev/, но такой способ ненадежный. Мы воспользуемся утилитой fdisk.
Подключите флешку и выполните:
Как видите, здесь мы можем посмотреть детальную информацию об устройстве. Имя файла, список разделов, формат таблицы разделов, список разделов. А главное для нас, размер раздела и его файловую систему. Теперь не сложно понять какая из них флешка. В этом примере это /dev/sdc1
Создаем папку для монтирования:
Теперь монтируем флешку с помощью команды mount:
sudo mount /dev/sdc1 /mnt/usb
Если знаете файловую систему флешки, то лучше ее указать с помощью опции -t. Чаще всего используется FAT, так как ее легко открывают как Windows так и Linux системы:
sudo mount -t vfat /dev/sdc1 /mnt/usb
Монтирование осуществляется от суперпользователя, но если нужно чтобы отмонитровать флешку мог любой нужно указать опцию users:
sudo mount -t vfat -o users /dev/sdc1 /mnt/usb
По умолчанию владельцем файлов на флешке при монтировании устанавливается root, поэтому если вы захотите работать с флешкой через файловый менеджер, то нужно будет его запускать с правами суперпользователя или же сразу примонтировать флешку в linux таким образом, чтобы владельцем был ваш пользователь. Для этого укажите группу и id своего пользователя в опциях uid и gid:
sudo mount -o users,uid=1000,gid=1000 /dev/sdc1 /mnt/usb
Удостовериться что флешка подключена можно посмотрев содержимое каталога, в который мы ее монтировали:
Или выполнив команду mount:
После завершения работы с флешкой не забудьте ее отмонтировать. Потому что иначе данные могут быть не сохранны или вообще повреждена файловая система флешки:
sudo umount /dev/sdc1
Автоматическое монтирование флешки в Linux
Популярные окружения рабочего стола выполняют монтирование флешки linux автоматически, как только она подключена к системе или по клику на ярлыке. Мы можем это реализовать с помощью службы udisks2.
Udisks — это служба dbus, позволяющая другим программам и пользователю взаимодействовать с udev. Мы можем получать сообщения о только что подключенных устройствах, выполнять их монтирование и отключение. Окружения рабочего стола используют именно этот сервис для монтирования устройств.
Мы тоже можем использовать его для ручного монтирования. Здесь даже есть несколько плюсов. Во-первых, мы можем монтировать без прав суперпользователя, во-вторых, не нужно создавать папку.
Для монтирования используется такая команда:
udisksctl mount -b /dev/sdc1
Здесь /dev/sdc1 — файл нашей флешки, а опция -b указывает, что нужно монтировать блочное устройство. Так же как и в mount здесь можно задать опции монтирования -o и файловую систему -t. Флешка будет примонтирована в папку /run/имя_пользователя/uuid-флешки/
Для размонтирования используется аналогичная команда:
udisksctl unmount -b /dev/sdc1
Автоматическое монтирование usb флешки в linux можно настроить с помощью утилиты udiskie. Все новые подключенные флешки будут автоматически подключаться, после подключения устройства будет всплывать окно с предложением открыть файловый менеджер, а также значок, с помощью которого можно получить доступ к каждому из устройств.
Устанавливается утилита в Ubuntu командой:
sudo apt install udiskie
Дальше остается запустить программу:
Теперь все подключаемые устройства будут автоматически монтироваться с помощью udisks. Рассмотрим что значат опции:
- -a — выполнять автоматическое монтирование
- -n — показывать всплывающее уведомление
- -t — показывать значок в трее.
Выводы
Теперь монтирование флешки linux не вызовет у вас проблем. Даже если у вас не будет работать окружение рабочего стола и придется делать все вручную. Если остались еще вопросы, спрашивайте в комментариях.