Эта страница была перенесена на
altlinux.org. Текст на freesource.info заморожен.
Автомонтирование устройств через связку ivman + subfs
К связке ivman&pmount у меня (лично) всегда было несколько претензий:
- необходимость держать два экземпляра (системный и пользовательский) ivman'а (что для однопользовательской машины излишне, а для машины, на которой одновременно залогинено несколько пользователей, грозит конфликтами «кто первый успеет»);
- необходимость говорить чего-то руками (pumount) для отмонтирования устройства;
- скудность параметров монтирования через pmount
Поведение же пакетов hal-fstab-sync&hal-mount-subfs меня всегда более, чем устраивало. Поэтому, после того, как в последних версиях hal был поставлен конфликт на hal-fstab-sync, и волей-неволей пришлось перейти на ivman, мне очень захотелось воссоздать старую привычную функциональность.
Краткое описание получившеся системы
hal детектит событие появления или пропадания устройств.
Ivman принимает решение, что в связи с этим событием сделать с устройством – смонтировать, размонтировать, или какую-нибудь программу запустить. Мы прописываем
ivmanу наши собственные команды монтирования/размонтирования – скрипты, которые и делают всю остальную работу.
Итак, по порядку:
Скрипты монтирования и размонтирования
Скрипт, занимающийся монтированием, является художественно переработанным примером с Gentoo Wiki.
Он выясняет желаемую точку монтирования, опции монтирования в зависимости от файловой системы устройства, создаёт уникальную точку монтирования и, собственно, монтирует устройство.
Скрипт размонтирования пытается размонтировать устройство, и, при успехе, изничтожает точку монтирования.
Настройки ivman
Система предназначена для работы с системным экземпляром демона
ivman. Чтобы не портить конфигурационные файлы самого
ivmanа, мы используем для хранения модифицированных xml-конфигов собственую директорию
/etc/ivman-mount-subfs. Суть их модификации – наши собственные команды монтирования/размонтирования, отключение задержки монтирования (так как не предполагается использования пользовательского варианта
Ivman), и включение обнаружения подключенных устройств при старте демона. Соответственно, для старта
ivmanа с использованием нашего варианта конфигов, используется отдельный init-скрипт
/etc/rc.d/init.d/ivman-mount-subfs.
По умолчанию, ivman работает от имени непривилегированного пользователя ivman. Чтобы он мог без проблем выполнять команды монтирования/размонтирования, мы должны или ставить на эти команды SUID, или делать вызовы через sudo. Сам ivman рекомендует в отладочных логах второй вариант. Так и сделано – в файле /etc/sudo.d/ivman-mount-subfs пользователю ivman разрешено безпарольно вызывать наши скрипты для монтирования и размонтирования.
Вызов этих скриптов в качестве программ монтирования/размонтирования добавлен в системный конфиг ivman'а Ivm Config Base.xml:
монтирование мы вызываем с UDI, по которому скрипт определяет все нужные для монтирования свойства устройства. А когда запускается скрипт размонтирования, устройство уже скорее всего удалено, и hal о нём может ничего не знать. Поэтому в качестве параметра передаётся извлеченное устройство. Проще было бы использовать точку монтирования, но иногда ivman наотрез отказывается её передавать.
Конфиги
Скрипт монтирования использует конфигурационный файл
/etc/sysconfig/subfs_mount_options, в котором хранятся опции монтирования для разных файловых систем:
Внимание: Формат и наполнение этого конфига, скорее всего, будет изменено и дополнено.
Кроме того, используется файл 95-ivman-mount-subfs-storage-policy.fdi, позаимствованный из пакета hal-fstab-sync. Это даёт нам как минимум двух мёртвых зайцев:
- список устройств, которые будет монтировать ivman. А то, к примеру, он отказывается монтировать USB-жесткие диски.
- желаемые точки монтирования для разных типов устройств.
Установка и использование
Вся система опакечена (скачать
RPM,
src.rpm). Устанавливаем пакет, редактируем
/etc/sysconfig/subfs_mount_options в своё удовольствие. Отключаем базовую версию
ivmanа (если запущена):
(последнее – для пользовательских вариантов ivman'a, если они есть. Тогда нужно так же отключить их автозапуск).
Конфигурируем автозапуск нашей системы:
Если есть необходимость заставить нашу систему работать с пользовательским вариантом ivmanа, нужно вручную прописать в пользовательский конфиг вызов команд монтирования/размонтирования и добавить пользователя в sudoers.
Земеченные глюки
У меня есть USB-HDD с четыремя разделами. И при монтировании
ivman'ом один из разделов, не обязательно один и тот же, постоянно монтировался «как бы дважды»: в выводе команды
mount он был перечислен только один раз, однако, команду
umount приходилось выполнять
дважды, чтобы точка монтирования освободилась. При монтировании
ivman ругался в логи вот так:
Кто здесь виноват – ivman, hal, subfs – я не знаю. Пока что решил проблему некоторым хаком в скрипте размонтирования.
Творческие планы
- Тестировать, тестировать, тестировать.
- Подумать в сторону удаления «подвисших» точек монтирования.
- скорее всего, расширить и улучшить конфиг: возможность раздельных опций по типам файловых систем, типам устройств и идентификаторам разделов с проверкой допустимых опций монтирования.
Пожалуйста, жду отзывов.
Литература: