SystemD Automount

11/16/2015

SystemD Automount надстраивается над SystemD Mount - встроенного механизма монтирования файловых систем, и позволяет производить монтирование только в тот момент времени, когда вы фактически решаете обратиться к точке монтирования, например чтобы скопировать какой-нибудь файл. При чем не важно, что это за файловая система и где она находится: жестий диск, флэшка, NFS, сетевой ресурс MS Windows и т.д.. Такой способ монтирования может сэкономить немало времени при загрузке компьютера, особенно если вы собираетесь монтировать сетевую файловую систему, ведь ей для работы нужен уже настроенный сетевой интерфейс. Каждая такая файловая система должны быть описана специальным unit-файлом, чтобы SystemD знал когда, что и куда нужно смонтировать. Именоваться такой файл должен исходя из точки монтирования (то, куда относительно корневого каталога должна быть смонтирована файловая система), иметь суффикс ".mount" и располагаться в каталоге /lib/systemd/system. А automount unit-файл должен делать всё то же самое, только иметь суффикс не ".mount", а ".automount". Соответственно активным из этих двух файлов должен быть automount unit-файл, а второй просто ждать, когда его вызовет automount.

SystemD Mount

Рассмотрим синтаксис unit-файлов типа ".mount"

[Unit]
Description=
 
[Mount]
What=
Where=
Type=
Options=

В секции "[Unit]" одна единственная дирректива "Description=" не делает ничего, просто оставляет комментарий. Гораздо интересенее секция [Mount] - в ней диррективы "What=" указывает на то, что будем монтировать, "Where=" указывает на то, куда будем монтировать, "Type=" описывает на тип файловой системы и "Options=" указывает какие параметры монтирования следует применить. Пользуясь примером из статьи Как подключить сетевой диск Windows в Linux напишем unit-файл типа .mount для сетевого SMB ресурса MS Windows

[Unit]
Description=Mount point for cifs
 
[Mount]
What=//SERVER_IP/SHARE_NAME
Where=/mnt/winshare
Type=cifs
Options=user=WIN_USER_NAME,password=WIN_USER_PASSWORD

Дадим ему имя "mnt-winshare.mount" и положим в /lib/systemd/system

Перед тем, как приступить к созданию unit-файла типа .automount, желательно убедиться, что уже на этом этапе всё работает хорошо. Это можно сделать тремя командами

systemctl daemon-reload
systemctl start mnt-winshare.mount
ls /mnt/winshare

Первая команда говорит о том, что SystemD следует перечитать свою конфигурацию, так мы там что-то поменяли, вторая запускает то, что описано в unit-файле mnt-winshare.mount, и третья отображает содержимое свежепримонтированного ресурса. Если вы допустили ошибку в написании unit-файла, при его запуске SystemD может выругаться, и никакого содержимого папки мы уже не увидим. Помочь понять, что же произошло может команда

systemctl status mnt-share.mount

Она кроме всего прочего выведет последнии сообщения журнала этой службы, которые помогут понять природу ошибки. Например можно получить сообщение вида "mount error(13): Permission denied", которое указывает на неверно заданные имя пользователя и пароль к сетевому ресурсу. Ошибок бывает много и разных - внимательно читайте журнал сообщений.

SystemD Automount

Отмонтируйте ресурс, подключенный к нашей файловой системы из прошлого примера

umount /mnt/winshare

Теперь рассмотрим синтаксис unit-файлов типа ".automount", пользуясь информацией из уже созданного unit-файла mnt-winshare.mount

[Unit]
Description=Automount unit for cifs
 
[Automount]
Where=/mnt/winshare
 
[Install]
WantedBy=remote-fs.target

Синтаксис понятен. Как обычно "Description=" - это просто описание, "Where=" указывает на папку, которую SystemD будет мониторить в ожидании обращения к ней, чтобы автоматически смонтировать файловую систему, описанную в соответствующем unit-файле, а вот "WantedBy=remote-fs.target" в секции [Install] указывает на то, что unit-файл типа .automount будет активирован в момент времени, когда система будет готова к монтированию сетевых файловых систем, а именно после того, как будут сконфигурированы сетевые интерфейсы, так как цель "remote-fs.target" зависит от цели "network.target"

Всё. Не забудьте перечитать конфигурацию SystemD и активировать ваш automount unit-файл командами

systemctl daemon-reload
systemctl enable mnt-winshare.automount

Если не хотите перезагружаться, можно активировать unit вручную

systemctl start mnt-winshare.automount

Теперь при первом же обращении к папке /mnt/winshare SystemD смонтирует туда сетевой SMB ресурс.

Темы: