FreeBSD: Автомонтирование файловых систем NFS и SMBFS с помощью AMD

AMD Как известно, перед началом использования файловых систем NFS и SMBFS их нужно смонтировать, а когда все необходимые действия будут выполнены — размонтировать. Обычно для монтирования / размонтирования используются команды mount(8) / umount(8), и никто не задумывается об автоматизации данных операций. На мой взгляд, это не самый оптимальный подход, особенно если учесть тот факт, что в состав операционной системы FreeBSD входит специальный демон автоматического монтирования.

Постановка задачи

Демон автомонтирования операционной системы FreeBSD amd(8) предназначен для прозрачного монтирования абсолютно любых файловых систем по мере обращения к расположенным на них файлам и папкам, а также для последующего размонтирования этих файловых систем при отсутствии активности в течение заданного интервала времени. Данная статья посвящена настройке amd для автоматического монтирования файловых систем, экспортируемых NFS-серверами, и общих папок, предоставляемых SMB-серверами. Кроме этого, она описывает диагностику amd с помощью утилиты amq(8) и выделение ему собственного лога с помощью штатных средств управления логами syslogd(8) и newsyslog(8).

Исходные данные

Для решения рассматриваемой задачи не потребуется дополнительное программное обеспечение, однако Вам придется создать файл конфигурации утилит SMBFS, позволяющий суперпользователю root монтировать выбранные общие папки, предоставляемые SMB-серверами, без ввода пароля.

Автоматическое монтирование файловых систем NFS

Для обеспечения автоматического монтирования файловых систем NFS достаточно добавить в файл /etc/rc.conf строку:

amd_enable="YES"

и запустить amd командой /etc/rc.d/amd start. По умолчанию amd будет использовать альтернативную папку /.amd_mnt, направлять сообщения о своем состоянии в раздел daemon системного журнала и позволять монтировать файловые системы NFS к папкам локальной файловой системы /host и /net согласно карте монтирования /etc/amd.map (эта карта монтирования входит в состав операционной системы FreeBSD и содержит правила, регламентирующие порядок монтирования и размонтирования файловых систем NFS с помощью Network Host Filesystem). Если перевести сказанное на человеческий язык, то сразу после запуска amd Вы сможете обращаться к файловой системе share, экспортируемой NFS-сервером nfsserver, как к обычной локальной папке с именем /host/nfsserver/share или /net/nfsserver/share. При любом таком обращении и отсутствии необходимой файловой системы в списке смонтированных файловых систем amd создаст точку монтирования /.amd_mnt/nfsserver/host/share, подмонтирует к ней файловую систему share, создаст папку /host/nfsserver или /net/nfsserver и добавит в нее символическую ссылку на вышеупомянутую точку монтирования. Если папка /host/nfsserver/share или /net/nfsserver/share не будет использоваться на протяжении 5 минут, amd размонтирует файловую систему share, а затем удалит ставшие ненужными папки и символическую ссылку.

Автоматическое монтирование файловых систем SMBFS

Для обеспечения автоматического монтирования файловых систем SMBFS придется создать одну или несколько дополнительных карт монтирования, каждая из которых должна содержать правила, базирующиеся на использовании Program Filesystem. Для получения возможности обращения к общим папкам по шаблонным именам вида /smbfs/smbserver/share следует выделить каждому SMB-серверу отдельную карту монтирования. Например, для указания правил монтирования общих папок share1 и share2, предоставляемых SMB-сервером smbserver, можно создать карту монтирования с именем /etc/amd.map-smbserver (Вы может изменить данное имя согласно собственным вкусам) и добавить в нее строки:

share1 type:=program;fs:=${autodir}/${path};mount:="/sbin/mount mount -t smbfs \\\/\\\/user@smbserver/share1 ${fs}";
share2 type:=program;fs:=${autodir}/${path};mount:="/sbin/mount mount -t smbfs \\\/\\\/user@smbserver/share2 ${fs}";

Указанные правила заставят amd монтировать общие папки к точке монтирования ${autodir} (переменная ${autodir} содержит имя альтернативной папки) командами /sbin/mount -t smbfs //user@smbserver/share.... Отсутствие параметра umount или unmount предполагает использование команд размонтирования по умолчанию umount ${fs} (переменная ${fs} содержит имя точки монтирования).
Для связывания созданной карты монтирования с точкой монтирования /smbfs/smbserver необходимо добавить в файл /etc/rc.conf строку:

amd_flags="$amd_flags /smbfs/smbserver /etc/amd.map-smbserver"

и перезапустить amd командой /etc/rc.d/amd restart. Сразу после выполнения этих действий Вы сможете обращаться к общим папкам share1 и share2, предоставляемым SMB-сервером smbserver, как к обычным локальным папкам /smbfs/smbserver/share1 и /smbfs/smbserver/share2.

Анализ состояния amd с помощью утилиты amq

Для быстрого выяснения текущего состояния amd можно использовать команду amq -m, предназначенную для отображения списка смонтированных файловых систем, включающего количество ссылок на каждую из них и содержащего сведения об ошибках монтирования, примерно в таком виде:

"root"                                                                      root    1 localhost is up
/etc/amd.map                               /host                            toplvl  1 localhost is up
/etc/amd.map                               /net                             toplvl  1 localhost is up
/etc/amd.map-smbserver                     /smbfs/smbserver                 toplvl  1 localhost is up
nfsserver:/host/nfsserver                  /.amd_mnt/nfsserver              host    1 nfsserver is up
mount -t smbfs //user@smbserver/share1 ... /.amd_mnt/smbfs/smbserver/share1 program 1 localhost is up

Первый столбец этой таблицы содержит имя карты монтирования для точек монтирования или опции монтирования для смонтированных файловых систем, второй — имя точки монтирования, третий — тип файловой системы amd, четвертый — количество ссылок на точку монтирования или файловую систему, пятый — имя компьютера, на котором находится файловая система, шестой — состояния точки монтирования или файловой системы, седьмой — сообщения об ошибках монтирования (при отсутствии ошибок седьмой столбец не отображается). В связи с тем, что amd и запускаемый им rpcbind(8) поддерживают TCP Wrappers, результатом выполнения команды amq -m могут стать примерно такие сообщения об ошибках:

amq: localhost: RPC: Port mapper failure - RPC: Authentication error
amq: localhost: RPC: Authentication error; why = Failed (unspecified error)

Для устранения данных ошибок следует добавить в файл /etc/hosts.allow правила, разрешающие доступ к amd и rpcbind с localhost‘а:

amd : 127.0.0.1 : allow
amd : ALL : deny
rpcbind : 127.0.0.1 : allow
rpcbind : ALL : deny

Предоставление amd собственного лога

Параметры запуска по умолчанию, заданные в файле /etc/defaults/rc.conf, заставляют amd направлять сообщения о своем состоянии в раздел daemon системного журнала. Если Вы хотите предоставить amd отдельный лог с именем /var/log/amd.log, придется перенаправить эти сообщения в другой раздел системного журнала (в моем случае — в раздел local6), а также соответствующим образом изменить конфигурацию демона syslogd.
С учетом всех изменений в файлах конфигурации, описанных в данной статье, для перенаправления сообщений amd в лог /var/log/amd.log нужно, во-первых, привести определение переменной amd_flags в файле /etc/rc.conf к такому виду:

amd_flags="-a /.amd_mnt -l syslog:local6 /host /etc/amd.map /net /etc/amd.map /smbfs/smbserver1 /etc/amd.map-smbserver1"

и перезапустить amd командой /etc/rc.d/amd restart, а во-вторых, добавить в файл /etc/syslog.conf строку:

local6.* /var/log/amd.log

создать пустой лог командой touch /var/log/amd.log и перезапустить syslogd командой /etc/rc.d/syslogd restart.
Для предотвращения разрастания лога amd следует включить его ротацию с помощью утилиты newsyslog. Например, для ежесуточного усечения лога /var/log/amd.log с сохранением семи предыдущих копий, сжатых архиватором bzip2(1), следует добавить в файл /etc/newsyslog.conf строку:

/var/log/amd.log 644 7 * @T00 JC

Заключение

После выполнения действий, которые описаны в этой статье, Вам больше не придется следить за необходимостью монтирования и размонтирования файловых систем NFS и SMBFS. Я надеюсь, что Вы оцените такую возможность как полезную и обязательно обратите свое внимание на amd.

Понравилась статья?

 Подпишитесь на RSS или почтовую рассылку

 Присоединяйтесь в Google+ или Twitter

 Поделитесь ссылкой в социальной сети или блоге

FreeBSD: Автомонтирование файловых систем NFS и SMBFS с помощью AMD: 4 комментария

  1. Подскажите, пожалуйста, новичку — где задаются значения переменных fs, autodir и path?

    • По умолчанию в файле /etc/amd.map, а вообще в файлах, список которых передается демону amd с помощью переменной amd_flags в файле /etc/rc.conf.

Оставить комментарий