Autofs (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Autofs. Дата последней синхронизации: 17 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

AutoFS даёт возможность автоматического монтирования съёмных носителей и сетевых ресурсов при вставке или обращении к ним.

Установка

Установите пакет autofsAUR.

Примечание: Загружать модуль autofs4 больше не нужно.

Настройка

AutoFS использует для конфигурирования шаблоны, расположенные в /etc/autofs. Основной шаблон называется auto.master, он может указывать на один или несколько других шаблонов для конкретных типов носителей.

  • Откройте /etc/autofs/auto.master своим любимым редактором. Вы увидите что-то подобное:
/etc/autofs/auto.master
#/media /etc/autofs/auto.media

Первое значение в каждой строке определяет базовый каталог, в который носители будут монтироваться, второе значение - шаблон который будет использован. По умолчанию базовый путь /media, но вы можете изменить путь на любое другое значение по вашему желанию. Например:

/etc/autofs/auto.master
/media/misc     /etc/autofs/auto.misc     --timeout=5
/media/net      /etc/autofs/auto.net      --timeout=60
Примечание: Убедитесь в наличии пустой строки в конце файла шаблона (нажмите ENTER после последнего слова). Если нет корректного EOF (end of file), демон AutoFS не загрузится корректно.
Совет: Дополнительный параметр timeout устанавливает количество секунд, после истечения которых каталоги будут размонтированы. Значение 0 отключает таймаут.

Базовый каталог будет создан, если он не существует. Он станет точкой монтирования, отображающей в себе динамически подключаемые носители, что означает, что существующее содержимое базового каталога будет недоступно, пока autofs работает. Однако это обратимо, так что если вы случайно настроили автомонтирование в непустой каталог, то можно просто прописать другой путь в auto.master и перезапустить AutoFS — содержимое существующего каталога вернётся на место.

Если вы всё равно хотите автомонтирование в непустой каталог и при этом иметь доступ к его содержимому даже во время работы autofs, вы можете настроить autofs на другой каталог (например, /var/autofs/net) и создать символические ссылки на неё:

# ln -s /var/autofs/net/share_name /media/share_name

В качестве альтернативы вы можете настроить монтирование носителей в конкретные каталоги вместо использования общего каталога:

/etc/autofs/auto.master
/-     /etc/autofs/auto.template
/etc/autofs/auto.template
/path/to/folder     -options :/device/path
/home/user/usbstick  -fstype=auto,async,nodev,nosuid,umask=000  :/dev/sdb1
Примечание: Это может вызвать проблемы с блокировкой ресурсов, если соединение до ресурса оказалось потеряно. При обращении к каталогу программы будут зависать в ожидании ответа, и придётся дожидаться возвращения соединения или убивать процесс, чтобы размонтирование стало возможным. Чтобы избежать этого, используйте только если вы всегда подключены к общему ресурсу, и не используйте домашний каталог или другие часто используемые каталоги, чтобы ваш файловый менеджер не пытался читать содержимое отключенного каталога.
  • Откройте файл /etc/nsswitch.conf и добавьте запись для автоматического монтирования:
automount: files

Теперь устройства автоматически монтируются при обращении и остаются примонтированными всё то время, пока вы их используете.

Съёмные носители

Съемным устройствам назначаются имена блочных устройств в соответствии со следующим доступным местом, например если /dev/sd{a,b,c} уже заняты, съёмный носитель подключится как блочное устройство /dev/sdd. Вместо назначения точки монтирования на основе ненадежного пути к блочному устройству более надежным подходом является использование UUID или PARTUUID съемного носителя в качестве местоположения в map-файле.

Например, чтобы примонтировать определённый USB-диск в путь /mnt/black, настройте файл шаблона и map-файл:

/etc/autofs/auto.master
# основной шаблон
/mnt     /etc/autofs/auto.mnt   # [опции тут]

Используйте blkid чтобы найте UUID нужного раздела, затем сгенерируйте map-файл:

 # _ID=$( blkid --output value --match-tag PARTUUID /dev/sdXY )
 # printf "%s %s\n" "black -fstype=auto :PARTUUID=" "${_ID}" >/etc/autofs/auto.mnt

Монтирование NFS

AutoFS предоставляет способ автоматического обнаружения и монтирования NFS-ресурсов на удалённых серверах (шаблон конфигурирования сетевых ресурсов /etc/autofs/auto.net был удалён в autofs5). Чтобы включить автоматическое обнаружение и монтирование сетевых ресурсов со всех доступных серверов без необходимости дополнительного конфигурирования, вам необходимо добавить следующее в файл /etc/autofs/auto.master:

/net -hosts --timeout=60
Примечание: Каждое имя хоста должно быть разрешимым (resolvable), например, любой IP-адрес в /etc/hosts или заданный через DNS. Убедитесь, что у вас установлен и настроен пакет nfs-utils. Также нужно включить rpcbind для просмотра общих каталогов.

К примеру, есть удалённый сервер fileserver (название каталога является именем хоста сервера) с ресурсом NFS, который называется /home/share, вы можете получить доступ к ресурсу просто набрав:

# cd /net/fileserver/home/share
Примечание: Please note that ghosting (i.e. automatically creating directory placeholders before mounting shares) is enabled by default; although, AutoFS installation notes claim to remove that option from /etc/conf.d/autofs in order to start the AutoFS daemon.

Опция -hosts использует механизм, похожий на команду showmount, для обнаружения удалённых ресурсов. Вы можете посмотреть экспортированные ресурсы с помощью этой команды:

# showmount <имясервера> -e 

Замените <имясервера> на имя вашего собственного сервера.

Ручная настройка NFS

Чтобы примонтировать NFS-ресурс file_server, располагаемый по удалённому пути /srv/shared_dir, в локальный путь /mnt/foo, добавьте новый файл конфигурации, например file_server.autofs:

/etc/autofs/auto.master.d/file_server.autofs
/mnt   /etc/autofs/auto.file_server --timeout 60
/etc/autofs/auto.file_server
foo  -rw,soft,rsize=8192,wsize=8192 file_server:/srv/shared_dir

Samba

Одиночные ресурсы

Добавьте в /etc/autofs/auto.master:

/media/[мой_сервер] /etc/autofs/auto.[мой_сервер] --timeout 60 --browse

где --timeout определяет, сколько секунд ждать перед размонтированием. Опция --browse создаёт пустые каталоги для каждой точки монтирования для избегания таймаута, если не удаётся связаться с сетевым ресурсом.

Затем создайте файл /etc/autofs/auto.[мой_сервер]

[любое_имя] -fstype=cifs,[другие_опции] ://[удалённый_сервер]/[имя_удалённого_ресурса]

Можно указать имя пользователя и пароль для общего ресурса в опциях:

[любое_имя] -fstype=cifs,username=[имя_пользователя],password=[пароль],[другие_опции] ://[remote_server]/[имя_удалённого_ресурса]
Примечание: Экранируйте $ и другие спецсимволы обратным слэшем по необходимости.

Несколько ресурсов

Вы можете указать несколько общих ресурсов в /etc/autofs/auto.[мой_сервер], например:

[любое_имя] -fstype=cifs,[другие_опции] /photos ://[удалённый_сервер]/photos /music ://[удалённый_сервер]/music /video ://[удалённый_сервер]/video

Автообнаружение

Смотрите комментарии в /etc/autofs/auto.smb.

FTP и SSH (через Fuse)

Доступ к удалённым FTP- и SSH-серверам может быть легко получен с AutoFS через FUSE, слой виртуальной файловой системы.

Удалённые FTP

Во-первых, установите пакет curlftpfs.

Загрузите модуль fuse:

# modprobe fuse

Создайте файл /etc/modules-load.d/fuse.conf с содержимым fuse для загрузки его при каждом запуске компьютера.

Далее, добавьте новую запись для FTP-серверов в /etc/autofs/auto.master:

/media/ftp        /etc/autofs/auto.ftp    --timeout=60

Создайте файл /etc/autofs/auto.ftp и добавьте сервер в формате ftp://myuser:mypassword@host:port/path:

servername -fstype=curl,rw,allow_other,nodev,nonempty,noatime    :ftp\://myuser\:mypassword\@remoteserver
Примечание: Ваши пароли может видеть каждый, кто запустит df (только для примонтированных серверов) или откроет файл /etc/autofs/auto.ftp.

Если Вы хотите немного больше безопасности, можете создать файл ~root/.netrc и указать пароли там. Пароли по-прежнему написаны в текстовом формате, но Вы можете задать права 600, и команда df их не покажет (неважно, примонтирован сервер или нет). Этот способ также менее чувствителен к специальным символам (которых иначе необходимо избегать) в паролях. Придерживайтесь такого формата:

machine remoteserver  
login myuser
password mypassword

Строчка в /etc/autofs/auto.ftp выглядит как эта, без имени пользователя и пароля:

servername -fstype=curl,allow_other    :ftp\://remoteserver

Создайте файл /sbin/mount.curl с кодом:

/sbin/mount.curl
 #! /bin/sh
 curlftpfs $1 $2 -o $4,disable_eprt

Создайте файл /sbin/umount.curl с кодом:

/sbin/umount.curl
 #! /bin/sh
 fusermount -u $1

Установите права для обоих файлов:

# chmod 755 /sbin/mount.curl
# chmod 755 /sbin/umount.curl

После перезапуска Ваш новый FTP-сервер должен быть доступен через /media/ftp/servername.

Удалённые SSH

The factual accuracy of this article or section is disputed.

Reason: All the ssh* commands should be executed as the same user, as before this edit. It should not matter if it is root or unprivileged. (Discuss in Talk:Autofs (Русский))

Здесь базовые инструкции по доступу к удалённой файловой системе через SSH с помощью AutoFS.

Примечание: Аутентификация без пароля может быть удобной, но также имеет последствия для безопасности. Подробнее смотрите в SSH keys.

Установите пакет sshfs.

Загрузите модуль fuse:

# modprobe fuse

Создайте файл /etc/modules-load.d/fuse.conf с содержимым fuse чтобы загружать его при каждом запуске системы, если вы не создали ранее.

Установите openssh.

Сгенерируйте ключ SSH:

$ ssh-keygen

Когда генератор запросит фразу-пароль, просто нажмите ENTER. Использование ключей SSH без фразы-пароля менее безопасно, однако запуск AutoFS с паролем приводит к некоторым дополнительным трудностям, которые (пока) не были освещены в этой статье.

Далее, скопируйте публичный ключ на удалённый SSH сервер:

$ ssh-copy-id username@remotehost

Скопируйте личный ключ в домашнюю директорию пользователя root, чтобы AutoFS могла его найти:

# sudo cp ~/.ssh/id_rsa /root/.ssh/id_rsa

Вышеприведённое работает, если AutoFS запускается с правами root и по умолчанию не имеет доступа в домашнюю директорию пользователя, содержащую личный ключ.

Как root убедитесь, что вы можете войти на сервер:

# ssh username@remotehost
Примечание: Это добавит удалённый сервер в список известных хостов known_hosts. Также можно добавить его вручную в /etc/ssh/ssh_known_hosts.

Создайте новый вход для сервера SSH в /etc/autofs/auto.master:

/media/ssh		/etc/autofs/auto.ssh	--timeout=60

Создайте файл /etc/autofs/auto.ssh и добавьте SSH:

/etc/autofs/auto.ssh
servername     -fstype=fuse,rw,allow_other,IdentityFile=/home/username/.ssh/id_rsa :sshfs\#username@host\:/

После перезапуска Ваш сервер SSH должен быть доступен через /media/ssh/servername.

MTP

Media Transfer Protocol (MTP) используется на некоторых устройствах Android.

Установите пакет mtpfs.

Создайте новую запись для MTP в /etc/autofs/auto.misc:

android -fstype=fuse,allow_other,umask=000     :mtpfs

Решение проблем и советы

Эта секция содержит несколько решений самых распространённых проблем с AutoFS.

Using NIS

AutoFS с версии 5.0.5 имеет более продвинутую поддержку NIS. Чтобы использовать AutoFS вместе с NIS, добавьте yp: в начало имён шаблонов в /etc/autofs/auto.master:

/home   yp:auto_home    --timeout=60 
/sbtn   yp:auto_sbtn    --timeout=60
+auto.master

В более ранних версиях NIS (до 5.0.4), вам нужно добавить nis в /etc/nsswitch.conf:

automount: files nis

Опциональные параметры

Вы можете установить параметры, такие как timeout, на общесистемном уровне для всех медиаустройств AutoFS в /etc/default/autofs:

  • Откройте файл /etc/default/autofs и отредактируйте строку OPTIONS:
OPTIONS='--timeout=5'
  • Чтобы сделать возможным ведение логов (по умолчанию его нет), добавьте --verbose в строку OPTIONS в /etc/default/autofs, например:
OPTIONS='--verbose --timeout=5'

После перезапуска демона autofs вы увидите подробный вывод в состоянии юнита или журнале.

Распознавание нескольких устройств

Если Вы используете несколько устройств USB и хотите легко отсоединять их, Вы можете использовать AutoFS чтобы определять точки монтирования и udev чтобы давать имена Вашим устройствам USB. Посмотрите udev#О правилах udev для инструкций по настройке правил udev.

Права доступа AutoFS

Если AutoFS не работает правильно, убедитесь в том, что права доступа для файлов шаблонов установлены правильно, иначе AutoFS не будет запускаться. Это может случиться, если Вы сделали резервную копию способом, который не сохраняет права. Вот как должны быть установлены права доступа для файлов конфигурации:

  • 0644 - /etc/autofs/auto.master
  • 0644 - /etc/autofs/auto.media
  • 0644 - /etc/autofs/auto.misc
  • 0644 - /etc/conf.d/autofs

В общем, скрипты (такие как вышеупомянутый auto.net) должны быть исполняемыми, а списки монтируемых устройств не должны.

Если Вы получаете ошибки в /var/log/daemon.log, подобные этим, значит у Вас проблемы с правами доступа:

May  7 19:44:16 peterix automount[15218]: lookup(program): lookup for petr failed
May  7 19:44:16 peterix automount[15218]: failed to mount /media/cifs/petr

Проблемы с fusermount

В некоторых версиях util-linux у вас может не получиться размонтировать файловую систему fuse, которую примонтировал autofs, даже с опцией "user=". Смотрите обсуждение здесь: https://sourceforge.net/p/fuse/mailman/fuse-devel/thread/k3a8pi%2457r%241%40ger.gmane.org/

Отладка проблем с автомонтированием

Для более удобной отладки вы можете запустить automount на переднем плане (не как демон).

Остановите службу autofs.service, затем выполните:

# automount -f -v

Или если вы хотите больше отладочной информации:

# automount -f --debug

Альтернативы

  • Systemd может автоматически монтировать файловые системы по запросу; смотрите see здесь для описания и статью sshfs как пример.
  • Thunar Volume Manager — система автомонтирования для пользователей файлового менеджера Thunar.
  • PCManFM — легковесный файловый менеджер с встроенной поддержкой удалённых общих ресурсов.
  • udisks — минималистичная служба автоматического монтирования дисков.

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