Задача

Кто имеет дело с Samba-ресурсами в Linux, причём когда сами ресурсы доступны не всегда, как например в домашней сети с несколькими компьютерами без выделенного сервера, наверняка заметил существенный недостаток монтирования этих ресурсов через файл fstab. Если ресурс недоступен в момент включения машины, операционная система не продолжает загрузку пока не попробует смонтировать сетевые ресурсы. В Debian на это уходит порядка 30…45 секунд в зависимости от количества ресурсов. Если попытки завершились неудачей, при появлении ресурсов в сети, их возможно смонтировать только через команду mount, что не всегда удобно.

В данной статье предлагается способ автоматического монтирования Samba-ресурсов по требованию - т.е. по мере обращения к ресурсу. Это позволяет не тратить время на попытки монтирования при загрузке, а также монтировать ресурсы в процессе работы командами.

Дано: установленный и работающий дистрибутив Debian, настроена сеть и Samba-ресурсы в этой сети.
Задача: настроить автоматическое монтирование ресурсов по требованию.
Уровень пользователя: средний, умение работать с текстовыми редакторами.
Решение:

Задача будет реализована посредством пакета autofs, которая позволяет автоматически выполнять команду монтирования с параметрами при обращении к ресурсу. Для примера, будет рассмотрена сеть из 3-х компьютеров. К одному из них будут монтироваться ресурсы остальных двух, причём ресурс incoming будет монтироваться с логином\паролем. Исходные данные представлены в таблице ниже:

имя_компьютера ip-адрес ресурсы и права учётные_данные
pc1 192.168.1.1 video -- ro
incoming -- rw
pc2 192.168.1.2 docs -- ro
incoming -- rw
l: user p: passWord
pc3 192.168.1.3 клиент

Все действия по настройке проходят на машине pc3. Здесь главное разобраться и понять что и как работет, а дальше пользователь сможет сам настроить на базе этого простого примера нужное решение.

Autofs работает следующим образом: после запуска, демон читает конфигурационный файл /etc/default/autofs и находит в путь к мастер-файлу /etc/auto.master. В последнем прописано соответствие локального каталога и файла конфигурации, где прописан ресурс (или группа ресурсов) удалённого сервера. Например это будет файл /etc/auto.cifs.server1. Далее, в локальном каталоге создаются подкаталоги, описанные в /etc/auto.cifs.server1 и при обращии к ним происходит автоматическое монтирование ресурсов.

Шаг 1. Установка пакетов

Все действия выполняются от имени root`а. Устанавливаем пакет autofs с зависимостями:

 # apt-get update
 # apt-get install autofs

Если монтирование Samba-ресурсов небыло настроено раньше, то необходимо доустановить пакеты для работы с Samba-ресурсами:

 # apt-get install smbclient cifs-utils

После установки, демон autofs запустится автоматически, но на время конфигурирования его нужно отключить:

 # /etc/init.d/autofs stop

Шаг 2. Настройка

Прежде чем перейти к настройке autofs, если ещё не созданы точки монтирования, их нужно создать. Например, ресурсы pc1 нужно монтировать в /mnt/pc1 , а ресурсы pc2 в /mnt/pc2 в локальной файловой системе:

 # cd /mnt
 # mkdir pc1
 # mkdir pc2

Основные конфигурационные файлы autofs: /etc/default/autofs и /etc/auto.master.

Внимание! В конце конфигов обязательно оставляем пустую строку.

Открываем на редактирование файл /etc/default/autofs и вносим некоторые изненения:

MASTER_MAP_NAME="/etc/auto.master"
TIMEOUT=300
NEGATIVE_TIMEOUT=60
BROWSE_MODE="yes"
LOGGING="verbose"

Немного по опциям:

  • Опция BROWSE_MODE позволяет "видеть" ссылку на ресурс в файловой системе. Если выставить в no, то обращаться к ресурсу нужно будет вслепую или через символическую ссылку (т.е. ресурс создаётся в файловой системе только при обращении к нему), в некоторых случаях это не совсем удобно.
  • TIMEOUT - это сколько секунд ресурс ещё будет примонтирован после последнего обращения.
  • NEGATIVE_TIMEOUT - сколько секунд пытаться примонтировать недоступный ресурс.
  • LOGGING - уровень подробности вывода сообщений в лог-файл (/var/log/syslog); для настройки пока выставим в verbose - подробно, а потом можно отключить вывод в лог, путём установки в none.

Теперь открываем на редактирование файл /etc/auto.master и комментируем (или удаляем) в нём все строки. Добавляем в этот файл такие строки:

/mnt/pc1    /etc/auto.cifs.pc1
/mnt/pc2    /etc/auto.cifs.pc2

Эти строки говорят, что ресурсы, описанные в /etc/auto.cifs.pc1 нужно монтировать в каталог /mnt/pc1 , аналогично и с pc2.

Создаём файлы с параметрами монтирований для pc1:

video        -fstype=cifs,ro,guest,iocharset=utf8,uid=1000,gid=1000,file_mode=0644,dir_mode=0755   ://192.168.1.1/video
incoming     -fstype=cifs,rw,guest,iocharset=utf8,uid=1000,gid=1000,file_mode=0644,dir_mode=0755   ://192.168.1.1/incoming

Ресурс video монтируется как "гостевой", а incoming на pc2 монтируется с логином\паролем. Помещать учётные данные лучше в отдельный файл, а при монтировании указывать на него. Создаём файл с учётными данными, где будет прописан логин и пароль к ресурсу incoming на pc2:

smb.pc2.auth
username=user
password=passWord

Устанавливаем права для этого файла:

# chmod 600 /etc/smb.pc2.auth

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

Теперь создаём файл с параметрами монтирований для pc2:

auto.cifs.pc2
docs         -fstype=cifs,ro,guest,iocharset=utf8,uid=1000,gid=1000,file_mode=0644,dir_mode=0755   ://192.168.1.2/docs
incoming     -fstype=cifs,credentials=/etc/smb.pc2.auth,rw,iocharset=utf8,uid=1000,gid=1000,file_mode=0644,dir_mode=0755   ://192.168.1.2/incoming

Обратите внимание, что параметры uid и gid указывают в данном случае на uid и gid того пользователя, с правами которого будут отображаться файлы сетевого ресурса на локальном компьютере. Нужно указать параметры или псевдо-пользователя (объединяющего группы) или реального пользователя, работающего на данном компьютере.

Когда все конфигурационные файлы созданы, пробуем запустить autofs и проверяем его работу:

# /etc/init.d/autofs start

Шаг 3. Проверка

Если всё настроено правильно и ресурсы доступны, листринг директорий /mnt/pc1 и /mnt/pc2 должен показать наличие каталогов ресурсов:

 /mnt/pc1/
       |- video
       |- incoming

 /mnt/pc2/
       |- docs
       |- incoming

Если какого-то подкаталога нет, значит либо ресурс недоступен, либо не монтируется по причине неправильных параметров. Фрагмент /var/log/syslog при исправной работе:

...
Aug 27 13:24:06 pc3 automount[[1688]]: attempting to mount entry /mnt/pc1/video
Aug 27 13:24:06 pc3 kernel: [[|9676.110056]] CIFS: Unknown mount option _netdev
Aug 27 13:24:06 pc3 automount[[1688]]: mounted /mnt/pc1/video
Aug 27 13:24:06 pc3 automount[[1688]]: attempting to mount entry /mnt/pc1/incoming
Aug 27 13:24:06 pc3 kernel: [[|9676.327437]] CIFS: Unknown mount option _netdev
Aug 27 13:24:06 pc3 automount[[1688]]: attempting to mount entry /mnt/pc2/docs
Aug 27 13:24:06 pc3 automount[[1688]]: mounted /mnt/pc1/incoming
Aug 27 13:24:06 pc3 kernel: [[|9676.335415]] CIFS: Unknown mount option _netdev
Aug 27 13:24:06 pc3 automount[[1688]]: mounted /mnt/pc2/docs
Aug 27 13:24:06 pc3 automount[[1688]]: attempting to mount entry /mnt/pc2/incoming
Aug 27 13:24:06 pc3 kernel: [[|9676.342659]] CIFS: Unknown mount option _netdev
Aug 27 13:24:06 pc3 automount[[1688]]: mounted /mnt/pc2/incoming
... 
Aug 27 13:29:41 pc3 automount[[1688]]: expiring path /mnt/pc1/video
Aug 27 13:29:41 pc3 automount[[1688]]: expired /mnt/pc1/video
Aug 27 13:29:41 pc3 automount[[1688]]: expiring path /mnt/pc1/incoming
Aug 27 13:29:42 pc3 automount[[1688]]: expired /mnt/pc1/incoming
Aug 27 13:29:42 pc3 automount[[1688]]: expiring path /mnt/pc2/docs
Aug 27 13:29:42 pc3 automount[[1688]]: expired /mnt/pc2/docs
Aug 27 13:29:42 pc3 automount[[1688]]: expiring path /mnt/pc2/incoming
Aug 27 13:29:42 pc3 automount[[1688]]: expired /mnt/pc2/incoming

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

Опция _netdev указывает на то, что файловая система располагается в сети и если сеть не работает на машине, не нужно делать попыток монтирования. В разных дистрибутивах эта опция обрабатывается по-разному.

В логе видно как при обращении ресурсы монтируются, а если обращений нет или соединение к ресурсу закрыто, по таймауту делается демонтирование. На этом проверка завершена. Если всё работает как надо, можно убрать детальный вывод работы autofs в лог, изменив параметр LOGGING в файле /etc/default/autofs и перезагрузив демон.

Возможны ситуации, когда машина с удалённым ресурсом недоступна в сети. При входе в каталог, куда монтируются ресурсы, возможно "подвисание" программ (файловых менеджеров, ls и прочих) на секунд 10…15 - в это время autofs пробует смонтировать ресурс. Не стоит этого пугаться - это нормальная работа демона. Если ресурс недоступен, каталоги будут отображаться как "битые" символьные ссылки.

Смотрите также

Печать/экспорт