Найти в Дзене
Universe of Open Source

А как в Linux монтировать сетевые ресурсы Linux?

Этим вопросом я задался некоторое время назад когда мне понадобилось монтировать ресурс из моего сетевого NAS на сервере с установленнм Plex. Сначала я подумал что пропишу все в fstab, но fstab монтируется гораздо раньше, до запуска служб сети и в посте загрузки Debian я увидел сбой монтирования. Такой вариант подходит только если ввести команду mount -a уже после загрузки операционки. Это оказалось очень не удобно. Забудешь ввести, сядешь кино посмотреть, а Plex говорит что не может воспроизвети файл. Тогда я нашел другое решение через SystemD Automount. SystemD Automount надстраивается над SystemD Mount - встроенного механизма монтирования файловых систем, и позволяет производить монтирование только в тот момент времени, когда вы фактически решаете обратиться к точке монтирования, например чтобы скопировать какой-нибудь файл. При чем не важно, что это за файловая система и где она находится: жестий диск, флэшка, NFS, сетевой ресурс MS Windows и т.д.. Такой способ монтирования может
Оглавление

Этим вопросом я задался некоторое время назад когда мне понадобилось монтировать ресурс из моего сетевого NAS на сервере с установленнм Plex.

Сначала я подумал что пропишу все в fstab, но fstab монтируется гораздо раньше, до запуска служб сети и в посте загрузки Debian я увидел сбой монтирования. Такой вариант подходит только если ввести команду mount -a уже после загрузки операционки. Это оказалось очень не удобно. Забудешь ввести, сядешь кино посмотреть, а Plex говорит что не может воспроизвети файл.

Тогда я нашел другое решение через SystemD Automount.

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 point for cifs

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

  1. "Description=" - это просто описание.
  2. "What=" указывает что будем монтировать
  3. "Where=" указывает куда будем монтировать
  4. "Type=" описывает на тип файловой системы
  5. "Options=" указывает какие параметры монтирования следует применить.

Назовем его "mnt-winshare.mount" и положим в /lib/systemd/system

Проверим на этом этапе что всё работает хорошо. Это можно сделать тремя командами:

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

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

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

systemctl status mnt-share.mount

SystemD Automount

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

[Unit]
Description
=Automount unit for cifs

[Automount]
Where
=/mnt/winshare

[Install]
WantedBy
=remote-fs.target

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

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

systemctl daemon-reload
systemctl enable mnt-winshare.automount

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