Предисловие.
С переходом дистрибутивов Linux на Systemd, мы не редко сталкиваемся с особенностями/багами реализации в этой системе инициализации той или иной привычной нам вещи. Хоть Systemd и пытается сохранять совместимость с привычными нам способами настройки системы, но часто в итоге получается не так всё красиво, как на картинке. В данной заметке, речь пойдёт о том, как в Systemd взаимодействует с файлом /etc/fstab, почему сетевые диски, прописанные в этом файле раньше монтировались, а с приходом новой системы инициализации перестали и рассмотрим родной, для Systemd, способ монтирования дисков.
Всё ниже описанное актуально для Systemd 201 и и основанного на нём дистрибутива Alt Linux P7. Так как Systemd ещё находится в фазе активной разработки, то со временем исправят описанные баги и изменят/добавят опции или синтаксис (или уже возможно что-то изменилось, так как текущая версия Systemd — 216), но в общем информация будет полезна.
Приступим!
Стандартная строка из /etc/fstab:
//192.168.1.10/Document /mnt/Document cifs noexec,noperm,iocharset=utf8,credentials=/etc/fileserver 0 0
До перехода на Systemd, она выполняла функцию монтирования сетевого адреса //192.168.1.10/Document в локальную директорию /mnt/Document с перечисленными опциями при загрузке ОС. В Alt Linux P7, этого не происходит благодаря давней особенности/багу Systemd — она пытается монтировать сетевой диск до того, как происходит подключение к сети. Решается это добавлением опций noauto и x-systemd.automount в указанную выше строку файла fstab. Всё бы хорошо, но тут мы встречаемся с очередной особенностью/багом Systemd — монтирование происходит 2 раза:
$ df -ha | grep Doc
systemd-1 1,9T 158G 1,7T 9% /mnt/Document
//192.168.200.10/Document 1,9T 158G 1,7T 9% /mnt/Document
В принципе, можно было бы и забить, но мы копнём глубже:
$ systemctl -a | grep Doc
mnt-Document.automount loaded active running mnt-Document.automount
mnt-Document.mount loaded active mounted /mnt/Document
mnt-Document.automount и mnt-Document.mount — генерируемые при загрузке ОС юниты Systemd, переводящие построчно файл /etc/fstab в формат, понятный Systemd. Располагаются они в директории /run/systemd/generator/. Там же располагаются юниты, отвечающие за монтирование home,swap,tmp и всего остального, что имеется у вас в fstab. Ознакомимся с содержимым юнита mnt-Document.mount:</spa n>
$ cat /run/systemd/generator/mnt-Document.mount
# Automatically generated by systemd-fstab-generator
[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
After=remote-fs-pre.target
After=network.target
After=network-online.target
Wants=network-online.target
Conflicts=umount.target
Before=umount.target
[Mount]
What=//192.168.200.10/Document
Where=/mnt/Document
Type=cifs
FsckPassNo=0
Options=noauto,x-systemd.automount,noexec,noperm,iocharset=utf8,credentials=/etc/fileserver
Как можно заметить, это та же самая строка из fstab, приведённая выше, разбавленная большим количеством лишних символов и переведённая на понятный Systemd язык. Взяв этот файл за основу, можно сделать автономный юнит, не требующий записи в fstab, который будет отвечать за монтирование нашего сетевого диска основываясь на родном формате Systemd. Всё, что нужно сделать, это:
- Скопировать этот юнит в директорию /etc/systemd/system/ или /lib/systemd/system/ (первая — предпочтительнее).
- Добавить в него секцию [Install] со строкой WantedBy=remote-fs.target, для того, чтобы можно было его активировать при загрузке системы, привязав к цели, стартующей после активации сетевого подключения.
- Активировать его командой systemctl enable mnt-Document.mount.
- Закомментировать строку отвечающую за данный сетевой диск в файле fstab.
- Перезагрузиться.
Конечный файл выглядит так:
$ cat /etc/systemd/system/mnt-Document.mount
# Automatically generated by systemd-fstab-generator
[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
After=remote-fs-pre.target
After=network.target
Wants=network.target
After=network-online.target
Wants=network-online.target
Conflicts=umount.target
Before=umount.target
[Mount]
What=//192.168.200.10/Document
Where=/mnt/Document
Type=cifs
FsckPassNo=0
Options=noauto,x-systemd.automount,noexec,noperm,iocharset=utf8,credentials=/etc/fileserver
[Install]
WantedBy=remote-fs.target
После перезагрузки, обнаруживаем смонтированный средствами Systemd, без задействования fstab, ОДИН раз, сетевой диск. Для управления диском используются стандартные команды Systemd — systemctl start/stop/enable/disable/status mnt-Document.mount.
Таким же способом можно смонтировать например /home или любой другой раздел.
Автор: Yar4e