Automount mini-Howto Данный документ переведен в рамках проекта Russian Linux Documentation Project v0.4, 17 April 1999 Этот документ рассказывает о системе автоматического монтирования autofs, её конфигурировании и указывает на проблемы, которых следует избегать. Введение О Russian Linux Documentation Project Данный документ был переведен в рамках проекта Russian Linux Documentation Project. Цель данного проекта - перевод документации, посвященной различным аспектам настройки и использования ОС Линукс на русский язык. Более подробно узнать о проекте вы можете на нашем веб сайте http://www.linux.ru.net/~RLDP. В переводе данного HOWTO участвовали: Александр Михайлов. alexmikh@linux.ru.net Автору оригинальной английской версии можно написать по адресу: don@sabotage.org. Автоматическое монтирование - что и как Автоматическое монтирование - это процесс автоматического монтирования (и размонтирования) конкретных файловых систем, с помощью демона. Если файловая система размонтирована, и пользователь пытается получить к ней доступ, она будет автоматически (пере)смонтирована. Это особенно полезно в крупных сетевых cредах и для кросс-монтирования файловых систем между несколькими машинами (особенно тех, которые не всегда в онлайн). Оно также может быть весьма полезно для сменных накопителей, и для нескольких других вещей, таких как переключение между монтирование dos fs с включенным ascii преобразованием и без него. Типы автоматического монтирования В линукс cуществует два типа систем автоматического монтирования; AMD и autofs. AMD - это демон автоматического монтирования, который работает как AMD для SunOS. Он работает на пользовательском уровне, т.е. не является частью ядра. Ядро не обязано поддерживать автоматическое монтирование, если вы используете NFS монтирование для локальной машины, через AMD, который перенаправляет весь траффик автоматически монтируемых файловых систем, через систему NFS. Autofs это новая система поддерживаемая ядром, т.е. код файловой системы в ядре, знает где находятся точки автоматического монтирования в файловой системе, и программа автоматического монтирования получает эти сведения именно отсюда. В этом документе описывается только autofs. Установка Т.к. autofs работает в пространстве ядра, ваше ядро должно её поддерживать. В ядрах серии 2.0.xx это экспериментальная возможность, которая однако показала себя достаточно стабильной. В ядрах серии 2.2.xx это обычная опция. Также вам будет нужна программа automount и её конфигурационные файлы; использование rpm пакетов (в RedHat они являются частью инсталляции) это прекрасный способ установить её. Программа automount должна запускаться rc скриптом из директории /etc/rc.d/init.d. Этот скрипт входит в rpm пакет, но вам нужно будет убедится, что automount будет запускаться при инициализации системы, создав соответвующую ссылку в одной из rc?.d директорий. Вы также можете сделать это с помощью одной из конфигурационных програм (Например RedHat control-panel или tksysv). Пользователе не-rpm дистрибутивов должны сделать то, что применимо для их систем. И не старайтесь понять, что делает этот rc скрипт; если вы можете, то врядли вам будет интересно читать это howto :). Конфигурирование Если вы установили automount из rpm пакетов, то вероятно добрались до этой секции довольно легко, но здесь начинается часть, которая возможно вызовет у вас трудности, если вы никогда раньше этого не делали. В /etc находятся два конфигурационных файла, один называется auto.master а другой auto.misc. Мой файл auto.master выглядит так: /auto /etc/auto.misc --timeout 60 Первый столбец это не точка монтирования. Это место где будет находиться набор точек монтирования (описанных в файле указанном вторым столбцом). Третья опция говорит о том, что файловые системы могут попытаться размонтировать себя через 60 секунд после использования. Естественно, что они не могут быть размонтированы во время использования. Auto.misc это "файл карты". Файл карты может иметь любое имя; этот был назван auto.misc, т.к. изначально контролировал "/misc". В auto.master может быть указано несколько файлов "карт". Мой auto.misc выглядит следующим образом: kernel -ro,soft,intr ftp.kernel.org:/pub/linux cd -fstype=iso9660,ro :/dev/cdrom zip -fstype=auto :/dev/hdd4 floppy -fstype=vfat :/dev/fd0 Первая колонка ("ключ") это точка монтирования. В данном случае это будет /auto/floppy и т.д. Средняя колонка - это опции; прочитайте man страницу к mount, чтобы узнать о них больше. Последняя колонка указывает, где находится fs. Запись "kernel" это точка монтирования NFS. Двоеточие перед остальными означает, что они находятся на локальном устройстве. Размонтирования приходится слишком долго ждать Некоторые из вас могут посмотреть на 60 секундный таймаут и подумать, это слишком долго для того, чтобы просто вынуть дискету ... Может просто сделать sync и вынуть её не размонтируя и никто не заметит.. Осмелюсь предложить более разумные альтернативы. Во первых вы можете изменить таймаут. Но указать системе размонтировать файловые системы после 15 секунд бездействия, может оказаться неэффективным. В зависимости от ваших настроек, вы можете просто запустить umount, как обычный пользователь. Но есть и другой путь заставить automount размонтировать файловую систему. Если вы пошлете (с помощью kill) сигнал SIGUSR1 процессу automount, он размонтирует все файловые системы, какие сможет. Но, перед тем, как вы начнете делать кнопку размонтирования для вашего оконного менеджера, вы должны знать о одной проблеме. Процесс automount запускается суперпользователем, поэтому он будет принимать только сигналы посланные им. В то же время, одна из главных причин использования automount в том, что вам *нет* необходимости быть root, чтобы монтировать и размонтировать файловые системы с его помощью. Самое быстрое решение этого - это создать suid-root C программу, которая будет делать это за вас. В тоже время используя sudo можно разрешить пользователям посылать нужный kill сигнал. Единственная проблема состоит в том, что sudo не позволит вам использовать подкоманды процесса, которые вам понадобятся, чтобы найти текущий PID. У вас должна быть программа killall, которая позволит вам сделать это (спасибо за предложения): ALL ALL=NOPASSWD:/usr/bin/killall -USR1 automount. Иначе вам придется разрешить пользователям посылать -SIGUSR1 любым процессам. Этот сигнал оказывает различное воздействие на программы; он перезапускает некоторые оконные менеджеры,но убивает xemacs. Поэтому будем надеяться что в killall нет переполнений буфера .... Вопросы Я не вижу /auto/floppy, или какую либо другую точку монтирования, необходимую мне. Если automount настроен правильно, то точки монтирования которые вы ищите появятся когда вы попробуете получить к ним доступ, даже если вы не видели её до обращения. Если вы просматриваете директории одной из графических программ, вам может понадобиться ввести имя точки монтирования вручную;большинство программ попробуют проверить её наличие, и диск будет смонтирован прежде чем она это заметит. К сожаление невидимость точек монтирования это один их самых больших недостатков autofs. Если это вас действительно "достает", отредактируйте конфигурационные файлы. (Подсказка: те, которые оканчиваются на .c :) ) Возможный выход из этой ситуации, который практикуют некоторые люди, это создание символических ссылок на директории создаваемые automount. Это предотвратит жалобы программ на то, что директория не существует (если конечно монтирование работает правильно), но в тоже время просмотр содержимого директории будет вызывать монтирование всех файловых систем. Как я могу посмотреть, что смонтировано? Команда df. Mount без опций, сделает тоже самое, плюс покажет опции с которыми были смонтированы файловые системы. Я вставил win95 дискету ("vfat") и она была определена как обычный FAT диск. Это не проблема с automount. Просто тип файловой системы "auto", при проверке, примонтирует диск как msdos, до того как проверить наличие vfat. VFAT это расширение FAT/MSDOS используемое в Win95 и WinNT, которое позволяет использовать длинные имена файлов. Как обьясняет один из авторов mount, т.к. mount это всего-лишь враппер вокруг соответвующего системного вызова, то указание типа файловой системы это обязанность пользователя. Возможность обработки mount списка файловых систем в порядке отличающемся от текущей "иерархии", все ещё обсуждается. Некоторые пользователи просто не вкомпилируют поддержку msdos в ядро; это предотвращает проверку её наличия до проверки на наличие vfat. Это работает для большинства людей; хотя некоторым может понадобиться и msdos fs, например у меня это вызвало множество проблем, когда под рукой не оказалось нужного модуля. Я уверен что если у вас возникнет желание написать авторам mount по этому вопросу, они с удовольствием примут ваши комментарии. Так-что пока, если вы не откажетесь от поддержки msdos fs в ядре, вам придется отказаться от возможности монтирования vfat или от авто-определения типа файловой системы. Надеюсь, что однажды это станет более конфигурабельным. А пока вы можете создать различные точки монтирования, для разным типов файловых систем. Моя файловая система <Literal remap="tt">/auto/grumblesmurf</Literal> монтируется и <Literal remap="tt">kill -SIGUSR1</Literal> не может размонтировать её. Вероятно она кем-то(чем-то) используется. Даже root не сможет отмонтировать её в таком случае. Если вы смонтировали эту файловую систему (т.е. ей не может пользоваться никто другой) посмотрите не находится ли одна из запущенных вами shell в этой директории. Если нет, то поищите другие программы, которые могут использовать эту директорию, например программы навигации по файловой системе. Если это не принесет результатов, попытайтесь использовать программу fuser. Что случится если я укажу / в качестве директории для automounter Уфф. Ну исходя из статистических данных, полученных на личном опыте одной персоны :), вероятность успеха очень невелика :(. И не говорите потом, что вас не предупреждали. Если вам нужен /grublesmurf, то я предложил бы символическую ссылку. Это намного безопаснее. Могу я иметь два "файла карты", описывающие одну директорию? Нет, насколько я знаю. Попробуйте использовать один "файл карты", со специфичными опциями для отдельных пунктов. Я использую SuSE 6.0 и мне понадобилось использовать <Literal remap="tt">---timeout</Literal> вместо <Literal remap="tt">--timeout</Literal>. Уфф. Ок, я уже делал замечание об этом. Другое решение для проблем типа "таймаут не работает" это добавить -t time опцию в autofs скрипт. Как установить разрешения и владельца для файловой системы (например FAT)? Посмотрите man страницу к mount, там перечислены некоторые опции, например установка uid=значение или umask=значение. Одна из опций, недоступных для файловых систем FAT - это mode=значение. Проверьте список людей, которые могут монтировать эту файловую систему. Кого благодарить за autofs? Не меня. Я ничего не сделал для его разработки. Я просто хотел привлечь внимание к тому, какая прекрасная работа была проделана с autofs и как просто её использовать. В сравнении с AMD (они продавали его по явно завышенной цене с доисторическими версиями свободных инструментов), autofs прекрасно задокументирован, и я благодарю за это его авторов. Где я могу узнать больше о автоматическом монтировании? Вы можете найти пособие по autofs по адресу: http://www.linuxhq.com/lg/issue24/nielsen.html. Взгляните также на am-utils: http://www.cs.columbia.edu/~ezk/am-utils (Спасибо за URLs)