Журнал LinuxFormat - перейти на главную

LXF73:Автомонтирование USB

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

HAL автоподключение USB-устройств

Отбросив все сомнения в собственный силах, Нейл Ботвик (Neil Bothwick) обучает HAL понимать свой iRiver.

кажется, любая вещь теперь имеет USB-порт: фотоаппарат, музыкальный плеер, брелок для ключей, часы. Осталось недолго ждать появления холодильников с разъемом для USB (в конце концов, существуют же микроволновые печи с Интернет-подключением). к счастью, USB относится к тем немногим вещам, в которых здравый смысл преобладает над коммерческими секретами производителей, и подавляющее большинство устройств отвечают строго определенным стандартам. Это значит, что почти любое из них вы можете подключить к компьютеру с Linux в виде съемного носителя информации.

методы монтирования

ЕЩЕ О СИСТЕМАХ МОНТИРОВАНИЯ

Изначально supermount была задумана для работы с CD-ROM. Это патч к ядру, добавляющий псевдофайловую систему. Supermount реагирует на установку диска в CD или DVD привод, и монтирует его. Хотя она и предназначена для работы с оптическими дисками в режиме «только чтение», команда может использоваться также с USB-носителями, при некоторых ограничениях. Она тоже требует наличия записи в /etc/fstab, поэтому устройство должно монтироваться с постоянным именем. Это не вызывает проблем, если Udev у вас присутствует и настроен соответствующим образом.

Supermount требует, чтобы устройство монтировалось с опцией sync. Это обеспечивает немедленную запись данных на устройство, без кэширования в оперативную память. Когда необходимость в работе с устройством отпадает, безопаснее всего позволить supermount самостоятельно отмонтировать его. Без sync это может повредить файловую систему. Подходящая запись для /etc/fstab выглядит так:

none /mnt/flash supermount fs=auto,dev=/dev/usb/flash,--,users,sync,noatime,umask=000 0 0

Опция umask позволяет устройству быть доступным для чтения и записи всем пользователям. Это необходимо, поскольку устройство монтируется с административными привилегиями. Sync обязательна для обеспечения непосредственности записи на устройство. Так как у USB нет способа подать сигнал системе о предстоящем отключении, supermount может отмонтировать его только после фактического разъединения. Поэтому так и важна непосредственная запись на устройство. Хотя эта программа и работает достаточно прилично, она далеко не идеальна. HAL намного лучше. Впрочем, одно преимущество у supermount все-таки есть: она работает с ядрами 2.4.

Autofs – часть ядра, вместе с программами уровня пользователя обеспечивающая автомонтирование сетевых устройств по запросу. Реально воспользоваться ею для монтирования съемных устройств не получится. Subfs или submount подходят для работы с этими устройствами, и тоже способны работать со старыми ядрами. Как и supermount, submount нужна запись в /etc/fstab, поэтому необходимо позаботиться о том, чтобы у устройства было постоянное имя.

Вначале был /etc/fstab. если вы хотели смонтировать устройство как обычный пользователь, то сначала root должен был добавить строчку в /etc/fstab, затем вводились команды mount или umount всякий раз, когда устройство монтировалось или размонтировалось. Ясно, что этот подход для пользователя неудобен, поэтому появилось множество альтернатив. Свои способы автоматического монтирования предоставляют Supermount, subfs и autofs. если вы хотите узнать о них больше – прочтите врезку «еще о системах монтирования» на следующей странице.

Лучший на сегодняшний день метод использует Слой аппаратной абстракции (Hardware Abstraction Layer (HAL)) и систему сообщений DBus от http://freedesktop.org. Эти компоненты предоставляют ОС средства для уведомления системы о подключении нового устройства. Затем средствами пользовательского ПО производится собственно его монтирование. делается это либо с помощью отдельной утилиты типа Ivman, либо встроенным монтировщиком KDE и Gnome. Использование трех или четырех программ для обработки подключения на первый взгляд может показаться очень сложным делом. В действительности, задача оказывается весьма обыденной, при этом все работает надежно. для работы HAL и D-Bus нужны две вещи. Необходимо свежее ядро, по крайней мере 2.6.8 (2.6.10 или выше подойдет идеально). еще понадобится Udev для управления директорией /dev. В большинстве современных дистрибутивов все это уже есть, однако проверьте версию ядра, набрав в терминале:

uname –r

Чтобы проверить, есть ли у вас Udev, наберите:

ps ax | grep udevd

Вы должны увидеть что-то вроде 895 ? S<s 0:00 udevd. Если вы не видите ответа команды, значит, у вас нет Udev. Посетите сайт разработчика вашего дистрибутива, форумы, FAQ, и выход найдется. Убедившись, что базовые условия соблюдены, через менеджер пакетов проверьте, инсталлированы ли HAL и D-Bus. Опять же, новейшие версии большинства популярных дистрибутивов устанавливают и включают их по умолчанию. Если же в вашем дистрибутиве их нет, на нашем диске вы найдете исходные коды. Пакеты взяты из последних версий проверенных временем дистрибутивов. Разумеется, более свежие версии тоже существуют, но наше руководство базируется именно на пакетах с диска LXF.

Если в вашем дистрибутиве нет HAL и D-Bus, и менеджер пакетов о них «ничего не знает», можно установить их из архивов с диска. Для инсталляции D-Bus, откройте терминал и наберите:

su
<give root password>
tar xzf /path/to/files/on/cd/dbus-0.23.4.tar.gz
cd dbus-0.23.4
./configure && make && make install

Для инсталляции HAL повторите процесс, заменив dbus-0.23.4 на hal-0.4.8.

И HAL, и D-Bus являются службами, так что удостоверьтесь, что они запускаются при старте системы. Пользователи Gentoo могут инсталлировать HAL и D-Bus, добавить соответствующие скрипты и гарантировать поддержку HAL во всех современных программах, добавив hal к флагам USE в /etc/ make.conf и запустив:

emerge --update --ask --verbose --deep --newuse world (или
emerge -uavDN world)
rc-update add hal default

ВСЯ ВЛАСТЬ – ПОЛЬЗОВАТЕЛЮ

Теперь весь процесс происходит в пользовательском пространстве, и больше нет нужды в каких-либо привилегиях. Однако монтирование устройств, не описанных в /etc/fstab, может делать только суперпользователь (root). HAL обходит это ограничение запуском программы fstab-sync при обнаружении нового устройства. Fstab-sync создает точку монтирования в /media и добавляет строчку в /etc/fstab, так что запрос на монтирование может исходить от обычного пользователя. Программа также способна «прибирать за собой», удаляя записи в /etc/fstab и точки монтирования, обычно при перезагрузке.

Основная проблема состоит в том, что /etc/fstab – критически важный системный файл, и вмешиваться в него без особой необходимости не стоит. Вообразите, что может произойти, если система обрушится в тот момент, когда fstab-sync производит запись в /etc/fstab, и в результате он станет нечитаемым при перезагрузке. Есть также доводы против записи в /etc/fstab «на лету» (без участия пользователя) с точки зрения безопасности.

Существует альтернатива в виде pmount. Эта программа позволяет обычным пользователям монтировать устройства, не перечисленные в /etc/fstab, соблюдая некоторые ограничения. Она монтирует устройства только в /media и работает только со съемными устройствами, хотя есть и обходные пути, если ваш подключенный USB-диск не распознается как съемное устройство. Pmount создаст для него точки монтирования так, как это необходимо. Программа также есть на нашем диске. Это не самая последняя версия, но зато она совместима с нашей версией HAL. Устанавливается pmount также, как HAL и D-Bus: распакуйте архив и запустите ./configure && make && make install. После инсталляции сообщите HAL об использовании pmount вместо fstab-sync. Вернитесь на свой root-терминал, и наберите:

cd /etc/hal/device.d/
rm 50-fstab-sync.hal
ln -s $(which pmount-hal) 60-pmount.hal

HAL и KDE

Если HAL и D-Bus установлены и запущены, то больше ничего не требуется для работы с ними при условии, что KDE скомпилирован с поддержкой HAL. С инсталлированным из бинарных пакетов KDE проблем не должно быть, так как эти пакеты в основном собираются с включением всех необходимых функций. Е сли же вы собираете KDE из исходных кодов, то при запуске ./configure необходимо использовать опцию – with-hal., иначе понадобится повторить компиляцию. Если у вас Gentoo, позволяющий включать и выключать hal описанным выше методом, все должно заработать сразу же.

ЦИФРОВЫЕ ФОТОАППАРАТЫ

Смонтировать так много разных устройств при одной и той же ОС оказывается возможным благодаря тому, что все они поддерживают общий стандарт хранения информации, а модуль ядра «usb-storage» написан с учетом этого стандарта. К сожалению, как и во всех стандартах, исключения здесь тоже есть. Многие аппараты соответствуют стандартам USB и могут монтироваться точно так же, как Flash-диски, MP3-плейеры или переносные жесткие диски. Но есть и другие, не соблюдающие стандартов, например Canon. Не все, однако, потеряно, и KDE/Gnome вкупе с Ivman справятся и здесь. KDE выдает значок и позволяет просматривать фото с помощью Konqueror (camera:/kioslave). Gnome показывает диалоговое окно с предложением загрузить фото, однако не позволяет просматривать их до полной загрузки – учитывая низкую скорость подключения к моему Canon SLR, это даже неплохо, ведь просмотр снимков через USB был бы утомительно медленным.

По умолчанию, у Ivman нет таких функций, но его можно настроить с помощью следующего правила в ~/.ivman/IvmConfigActions.xml:

<ivm:Match name=”hal.camera.libgphoto2.support”
value=”true”>
<ivm:Option name=”exec” value=”digikam”>
</ivm:Match>

Теперь подключите съемный USB-носитель, например, Flash-диск или MP3-плеер. Воздержитесь пока от использования фотоаппаратов, так как не все они работают как съемные устройства (см. врезку «ЦИФРОВЫЕ КАМЕРЫ» ниже). Через несколько секунд вы должны увидеть появившийся на рабочем столе значок. Наведите на него курсор, чтобы получить некоторую информацию об этом, еще не смонтированном устройстве. Щелкните значок, KDE смонтирует его, откроет окно или вкладку Konqueror (в зависимости от настроек KDE) и покажет его содержимое. Если значка не видно, щелкните правой кнопкой мыши рабочий стол и выберите «Configure Desktop» (Настройка рабочего стола). Перейдите в секцию «Behaviour» (Поведение), во вкладку «Device Icons» (Значки устройств) и убедитесь, что галочки «Show Device Icons» (Отображать значки устройств), «Mounted Removable Medium» (Смонтированные сменные носители) и «Unmounted Removable Medium» (Отмонтированные сменные медиа) установлены.

Устройства также можно просмотреть из боковой панели Konqueror. Выберите вкладку «Service» (Сервис) (внизу), выберите «Devices» (Устройства) из списка в боковой панели, и вы должны увидеть перечень подсоединенных устройств. В прежних версиях KDE была вкладка «Устройства», расположенная под «Bookmarks» (Закладками). Для KDE 3.4 вы можете найти это во вкладке «Services» (Сервисы) в «Media» (Носители).Если у вас KDE, обновленный с ранних версий, вы можете отредактировать эту вкладку, заменив адрес devices:/ на media:/. Если вкладки «Устройства» нет, а вам хотелось бы иметь отдельную вкладку для съемных носителей, щелкнете правой кнопкой на навигационной панели, выберите Создать > Папку (Add New > Folder) и установите адрес на media:/.

Чтобы не повредить данные, содержащиеся на устройстве, безопаснее все-таки размонтировать его перед отсоединением от компьютера. Чтобы сделать это в KDE, щелкните правой кнопкой мыши на его значке и выберите «Безопасное отключение» (Safely Remove) из выпадающего меню. Как только значок примет вид значка размонтированного устройства или исчезнет – можно смело отключать его от компьютера.

Автоматическое монтирование в gnome

Это так же просто, как работа с HAL в KDE, если даже не проще. Вам понадобится установленный Gnome-volume-manager. Вероятно, он уже есть в вашем дистрибутиве, а если нет, то его можно взять с нашего диска. Это не самая последняя версия, но она совместима с предлагаемыми нами HAL и D-Bus.

Gnome оказался более «продвинут» в этом направлении, чем KDE, и предоставляет некоторый контроль над тем, как он обращается с устройствами «горячего подключения». В то время как KDE просто показывает значок и монтирует устройство, когда вы его открываете, Gnome можно настроить на автоматическое монтирование во время физического подключения. Менеджер разделов Gnome (Volume Manager) продвигается еще на шаг вперед, позволяя настраивать действия, автоматически выполняемые при обнаружении нового устройства (к тому моменту, когда вы будете читать эти строки, вероятно, уже появится KDE 3.5, в котором будут исправлены некоторые из этих недостатков, – прим.ред.).

Это делается с помощью Gnome-volume-properties. Хотя в основном его используют для запуска аудио- или видеоплеера в то время, когда вставляется CD или DVD, возможна работа и со съемными устройствами. Например, можно запускать любимый фотоальбом при подключении фотоаппарата. Очевидно, KDE приобретет это новшество при ближайшем значительном обновлении. Пока же в этой области возможности выбора у пользователей Gnome шире, чем у пользователей KDE. Будут ли пользователи Gnome, имея больше опций, радоваться или ужасаться – тема, открытая для дискуссий.

IVMAN способен на большее

В то время как в KDE и Gnome есть встроенная поддержка устройств «горячего» подключения, многие предпочитают иметь дело с одним из оконных менеджеров, просто добавив ему необходимые качества. Ivman предоставляет возможности, сравнимые с Менеджером разделов Gnome, но в виде отдельного пакета, независимого от оконного менеджера. Он умеет больше, чем Менеджер разделов, поэтому пользователи как KDE, так и Gnome могут заинтересоваться им.

Ivman есть на нашем диске, устанавливается она так же, как HAL и DBus. Для того чтобы Ivman заработал, необходимо, чтобы все три программы запускались при загрузке. Порядок запуска такой: dbus, hald, ivman («d» после hal означает «daemon» – служба). Должна быть также установлена утилита pmount, иначе Ivman будет использовать fstab-sync со всеми ее недостатками (последние версии ivman могут использовать только pmount, – прим.ред.).

Ivman умеет делать много больше, чем простое автоподключение, но ему нужны два компонента. Первый запускается при загрузке от имени root, обычно из /etc/init.d и управляет автоматическим подключением устройств. Это уже настроено в стандартных файлах конфигурации в /etc/ivman. Второй компонент запускается от лица обычного пользователя так же, как ваш оконный менеджер запускает любую программу. если сомневаетесь, поместите его в ~/.xinitrc. конфигурация компонента находится в файле ~/.ivman. если такой директории нет во время первоначального запуска Ivman, она будет создана и заполнена стандартными конфигурационными файлами. Сами по себе они не добавят функциональности, пока вы не отредактируете их. Сделав это, вы сможете добавить такие свойства, как автозапуск какой-либо программы при подключении определенного устройства. Например, вот как можно запускать MPlayer или Xine для проигрывания DVD:

<ivm:Match name=”hal.volume.disc.type” value=”dvd_rom”>
<ivm:Option name=”execdvd” value=”umount $hal.block.device$
&amp;&amp; mplayer dvd://1 -really-quiet -fs” />
</ivm:Match>

или

<ivm:Match name=”hal.volume.disc.type” value=”dvd_rom”>
<ivm:Option name=”execdvd” value=”umount $hal.block.device$
&amp;&amp; xine -f -g dvd:$hal.block.device$” />
</ivm:Match>

в ~/.ivman/IvmConfigActions.xml.

Эта, а также некоторые другие идеи, уже заложены в файле конфигурации по умолчанию, созданном в ~/.ivman, просто они закомментированы. Здесь ничего не заработает по умолчанию. С некоторыми другими решениями для размещения в ~/.ivman (Custom Rules) можно ознакомиться в списке FAQ Ivman, расположенном здесь: http://ivman.sourceforge.net/wiki/Custom_Rules, там можно найти некоторые другие примеры: взять хотя бы возможность автоматической синхронизации вашей домашней директории с выбранным каталогом USB-диска при его подключении. Возможности ограничены только вашим собственным воображением.

завершающие штрихи

Подсказки
  • если подключаемое в первый раз устройство не отображается, обратитесь к системному журналу и посмотрите, каким образом оно определяется. При отсоединенном устройстве наберите tail -f /var/log/messages в терминале с правами root. Затем просмотрите сообщения системы во время подключения. В течение нескольких секунд устройство должно быть обнаружено, затем система его распознает и присваивает ему название. В зависимости от службы ведения журнала, установленной в вашей системе, путь к файлу журнала может быть /var/log/everything или /var/log/current.
  • Устройства IEEE1394 (FireWire) также надежно работают с HAL и другим ПО, описанным здесь. если вы компилируете ядро самостоятельно, убедитесь, что включили поддержку IEEE1934_SBP2. В случае стандартного ядра,установленного вместе с дистрибутивом, вероятнее всего, все уже сделано за вас. Нас интересует модуль для управления жесткими дисками IEEE1934. Вам может понадобиться вручную загрузить модуль sbp2 либо набрав modprobe -v sbp2 с правами root, либо добавив эту команду в /etc/modules.conf (или /etc/modules.autoload для пользователей Gentoo).

По соображениям безопасности, pmount предназначена для работы только со съемными устройствами. если она решит, что к системе подключен не съемный, а обычный жесткий диск, она может отказаться монтировать его, и это может стать проблемой. если диск не монтируется, можно проверить это запуском pmount с терминала. дайте следующую команду:

pmount /dev/sda1#

(или sdb, sdc – т.е. имя вашего устройства в системе)

если возвращено сообщение «device is not removable», это значит, HAL определил устройство как стационарное. Устраняется проблема добавлением имени устройства (не точки монтирования) в /etc/pmount.allow.

когда HAL находит устройство, он использует его имя при монтировании, поэтому USB-диск, определенный как dev/sda1, должен быть смонтирован на /media/sda1. если вы предпочитаете более вразумительные имена, можно добавить правила в /etc/udev/rules.d/10-udev.rules, и имена станут человеко-понятными. HAL работает только с фактическими именами, игнорируя символические ссылки, поэтому правило вроде:

BUS="usb", KERNEL="sd?1", SYSFS{product}="iRiver H300 Series", NAME="%k", SYMLINK="iriver"

приводит к монтированию на /dev/sda1 (или столь же понятного имени, выбранного ядром), тогда как перестановки вроде:

BUS="usb", KERNEL="sd?1", SYSFS{product}="iRiver H300 Series", NAME="iriver", SYMLINK="%k"

означают, что устройство будет смонтировано на /media/iriver. Здесь приведено правило Udev, которым я пользуюсь для моего MP3/Ogg плейера iRiver. если вы хотите узнать больше о написании правил udev, обратитесь к http://www.reactivated.net/udevrules.php.

если файловая система устройства (обычно MS DOS FAT) имеет метку тома, то эта метка будет отображена как подпись к значку. если метки тома нет, подпись будет содержать название устройства. Это еще один довод в пользу понятных имен, особенно если у вас несколько разных USB-устройств. Можно добавить или изменить метку тома для существующего раздела без переформатирования файловой системы с помощью Mlabel, части пакета Mtools (созданного для доступа к дискам MS DOS из Unix без их монтирования).

если вы разрешаете HAL определять и монтировать устройства в вашей системе, не нужно прописывать их в /etc/fstab. если они будут там представлены, pmount будет использовать указанные параметры, но монтировать будет как текущий пользователь, вместо того чтобы связывать точку монтирования с именем устройства. В общем случае, вам ни к чему указывать устройство в /etc/fstab, просто знайте, что возможность отменить предустановки существует.

Персональные инструменты
купить
подписаться
Яндекс.Метрика