Автоматическое подключение файловых систем

Введение

Автоматическое подключение файловых систем - что это такое, и для чего это необходимо

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

Виды автоподключения

В Linux имеется два типа автоподключения: AMD и autofs. AMD - это автоподключающий демон, работающий подобно SunOS AMD. Он не является частью ядра, для которого не обязательно знать, как работает автоподключение. Если вы производите подключение NFS тома в систему, то демон AMD перенаправляет траффик автоматически подключенной файловой системы через систему NFS. Autofs - новая система, работающая с помощью ядра; это означает, что код ядра, отвечающий за работу с файловыми системами, знает, где расположены точки подключения в файловой системе, и система автоподключения узнает их с помощью этого кода. В этом документе описывается только autofs.

Установка

Ядро должно быть собрано с поддержкой autofs. В версии 2.0.хх поддержка autofs является экспериментальной, но работает стабильно. Начиная с версии 2.2.хх, поддержка autofs переведена в разряд стандартных возможностей.
Программа автоподключения и ее конфигурационные файлы необходимы для работы; самый простой способ - установить пакет из дистрибутива RedHat. Программа автоподключения должна запускаться rc скриптом из каталога /etc/rc.d/init.d. rpm устанавливает этот скрипт, но необходимо удостовериться в том, что он запускается либо создав ссылку на него из каталога rc?.d, либо воспользовавшись панелью управления RedHat. Не-rpm дистрибутивы также должны сделать это. И не старайтесь разобраться, что этот скрипт делает - если вы читаете этот документ, то, скорее всего, вам это ни к чему.

Настройка

Установка 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, /auto/zip и т.п. Вторая колонка - опции подключения; подробности смотрите в руководстве по подключению (man mount). Третья колонка указывает на устройство, где находится подключаемая файловая система. Строка "kernel" описывает подключение NFS. ":" в остальных строках сообщает, что это локальное устройство.

Долгое ожидание отключения

Многим пользователям, которым приходилось ждать отключения файловой системы флоппи-диска, могло показаться, что 60-секундная задержка - это просто вечность. Может лучше синхронизировать (sync) диски, извлечь дискету несмотря на то, что файловая система не отключена, и никто ничего не заметит? Позвольте мне предложить более безопасные способы. Прежде всего вы можете уменьшить задержку. Но отключать фаловые системы, к примеру, каждые 15 секунд, очень неэффективно. Если у вас есть на то права, можно просто дать команду umount. Кроме того, можно дать команду программе автоподключения на отключение файловой системы. Если вы дадите (командой kill) сигнал SIGUSR1 процессу autofs, он отключит все, что только сможет. Но подождите рисовать кнопки отключения в ваших менеджерах окон - тут есть маленькая проблема.

Процесс autofs выполняется root-ом, и будет воспринимать сигналы только от него. Один из самых больших плюсов использования автоподключения - это то, что вы можете подключать и отключать файловые системы, *не имея* прав root. Можно написать C программу, выполняющую всю грязную работу, и поставить ей флаг suid. Другой вариант - использовать sudo, чтобы разрешить пользователям посылать нужный сигнал с помощью kill. Единственная проблема в этом случае - невозможность использования ` для обработки команд (что вам придется делать для определения PID). Вам необходимо будет поставить программу killall, что позволит вам следующее: (благодарю за совет)
ALL     ALL=NOPASSWD:/usr/bin/killall -USR1 automount
Иначе вам придется разрешить пользователям посылать сигнал SIGUSR1 всем процессам, что может привести к нежелательным эффектам; например? выходу из xemacs.

Вопросы

Я не вижу точку подключения, например, /auto/floppy.

Если автоподключение настроено правильно, точка подключения будет там, где должна быть, хотя ее не будет видно, если она не используется. Если вы используете для просмотра каталогов графическую утилиту, то, возможно, придется указать имя вручную; большинство программ пробуют то, что вы им указываете, и устройство подключается. К сожалению, невозможность выбрать что-либо из доступных, но невидимых точек подключения является, наверное, самым большим недостатком autofs.

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

Как мне увидеть, что подключено?

Команда df.Команда mount без ключей сделает то же, и, к тому же, покажет опции подключения.

Я вставил диск Win95 ("vfat"), а он определился как диск с обычным FAT.

Это проблема не связана с автоподключением. При использовании типа файловой системы "auto" проверка на тип msdos производится раньше проверки на тип vfat. VFAT - это длинные имена Win95 и WinNT, врезанные в файловую систему FAT/MSDOS.

По словам одного из авторов утилиты mount, она является лишь промежуточным звеном между пользователем и системным вызовом, требующим явного указания типа файлового системы. Поэтому определение типа файловой системы - задача пользователя. Рассматривается вопрос о написании версии утилиты mount, которая проверяла бы тип подключаемой файловой системы в определенном порядке, взятом из списка, а не использовала "эвристический" алгоритм. Некоторые пользователи не включают поддержку файловой системы msdos в ядро, что предотвращает проверку на тип msdos до проверки на тип vfat. Это решение подходит для большинства пользователей. Мало кому действительно нужна файловая система msdos, но случалось, когда она была просто необходима, а под рукой ее не было, что весьма расстраивало меня.

Я уверен, что если кто-либо захочет связаться с автором(ами) mount, то его отзывы будут только приветствоваться. Ну а пока что, кроме случаев с исключением поддержки msdos, вы не можете подключать vfat, сохраняя возможность автоопределения остальных типов файловых систем. Надеюсь, когда-нибудь появится такая возможность настройки, и можно будет создавать точки подключения с различными типами файловых систем.

Моя файловая система /auto/grumblesmurf подключена, и kill -SIGUSR1 не отключает ее.

Она чем-то используется. Даже Root не сможет отключить ее. Если вы тот, кто вызвал ее подключение (например, рядом нет никого, кто мог бы сделать это), поищите shell, который, возможно, находится в этом каталоге. Если таких нет, то поищите что-нибудь еще, что могло, так сказать, подставить невидимую ногу между дверью и косяком. Если ваши поиски не дали никакого результата, то попробуйте утилиту fuser.
Что будет, если я сделаю / каталогом автоподключения

Ой-ой-ой-ой. У вас практически нет шансов, что все будет работать нормально. Я вас предупредил. Если вам нужен /grumblesmurf, то я советую использовать символьную ссылку. Так намного безопаснее.
Может ли быть у меня два файла с описанием точек подключения, ссылающихся на один каталог?

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

Я использую SuSE 6.0, и мне необходимо ---timeout вместо --timeout

Э-э. Ладно, я буду иметь это ввиду. Другое решение проблемы "таймаут не работает" ("timeout no working") - добавить ключ -t в скрипт autofs.
Как мне установить права и владельца на файловую систему (например, FAT)?

Посмотрите документацию (man page) на mount на предмет ключей, устанавливающих uid и umask. К сожалению, для файловой системы FAT отсутствует ключ, устанавливающий mode. Посоветуйтесь с людьми, отвечающими за подключение.

Кого благодарить за autofs?

Не меня. Мне не приходилось что-либо делать. Я просто хотел привлечь всеобщее внимание к той работе, что была проделана над autofs, и к тому, как легко его использовать. В сравнении с AMD, autofs очень хорошо документирован, за что я очень благодарен его разработчикам. Везде стоит copyright Transmeta, так что, к сожалению, я не могу привести список разработчиков. Однако, предполагаю, что Peter Anvin приложил свою руку к большой части этой работы. Кроме того, Peter прочитал лекцию на тему autofs на linuxworldexpo 3 марта 1999.