NFS
В зависимости от дистрибутива пакет для серверной части может называться по разному. Для Debian nfs-kernel-server Для CentOS nfs-utils
Чтобы не запоминать какие где пакеты используйте поиск в менеджерах пакетов с утилитой grep\
apt search nfs | grep server
dnf search nfs | grep server
После установки нужных пакетов у вас в папке /etc появится файл exports как правило там уже содержатся закоментированные примеры конифгов. Примеры /etc/exports
#публикуем папку /opt/nfs/ro только для чтения, для сети 192.168.0.0/24
/opt/nfs/ro 192.168.0.0/24(ro,sync,no_subtree_check)
#публикуем папку /opt/nfs/rw для чтения и записи, для любой сети
/opt/nfs/rw *(rw,sync,no_subtree_check)
Кроме настройки разрешений на уровне сервера nfs вам необходимо настроить ещё разрешения для файловой системы, если у вас будут ограничения для записи на уровне файловой системы, то писать в папку всё равно не получится
Также не забываем проверить запущен ли у вас данный сервис (для дебиан systemctl status nfs-server), не мешает ли ему firewall и огрничения связанные c selinux иди apparmor. Данные вещи на начальном этапе настройки проще отключить.
В зависимости от дистрибутива пакеты для клиентской части могу отличаться названием например для Debian это nfs-common Для CentOS сервер и клиент входят в один пакет nfs-utils
После установки нужных пакетов мы можем примонтировать папку с другого сервера командой mount Например примонтируем папку opt с сервера 192.168.0.10 в папку /opt/nfs/1
mount -t nfs 192.168.0.10:/opt /opt/nfs/1
Само собой папка на сервере должна быть опубликована, сервер должен быть доступен, а на клиентской машине должна быть создана папка /opt/nfs/1
Для того, чтобы при перезапуске машины папка автоматически подключалась можно прописать автомонтирование либо в /etc/fstab либо через systemd
Пример ниже описывает строку, которую надо добавить в /etc/fstab, если вы хотите делать через него. Обращаю внимание, что данную строчку надо лишь добавить в конец файла!
192.168.0.10:/opt /opt/nfs/1 nfs rw,sync 0 0
Минусом данного метода является то, что при косяке в данном файле у вас может не загрузиться машина, трудности могут возникнуть при проблемах сетевого характера
Другой способ подразумевает описание юнитов через systemd Для нашей задачи нам понадобится описать 2 юнита - это юнит для монтирования шары и юнит для автомонтирования.
Юниты надо располагать в папке /etc/systemd/system Также для них существуют специальные правила наименования файлов: они должны содержать путь к точке монтирования в которой все слеши, кроме начального, заменяются на дефис. Например, если точка монтирования у нас /opt/nfs/ro, то имя файла юнита должно быть opt-nfs-ro.mount
Пример такого юнита /etc/systemd/system/opt-nfs-ro.mount
[Unit]
Description=NFS share
[Mount]
What=192.168.0.10:/opt
Where=/opt/nfs/ro
Type=nfs
Options=ro
Секция Unit содержит строку с описанием вашего сервиса.
Секция Mount содержит описание что мы монтируем и куда, а также опции монтирования
В конец можно добавить секцию [Install] которая содержит уровень загрузки:
[Unit]
Description=NFS share
[Mount]
What=192.168.0.10:/opt
Where=/opt/nfs/ro
Type=nfs
Options=ro
[Install]
WantedBy=multi-user.target
В этом случае наша папка будет подключатся всегда при загрузке.
После написания юнита необоходимо перечитать конфигурацию systemd systemctl daemon-reload Если необходима автозагрузка и добавлена секция [Install] то ещё добавляем в автозагрузку systemctl enable --now opt-nfs-ro.mount
Далее опишем юним автомонтирования /etc/systemd/system/opt-nfs-ro.automount Если хотим, чтобы оно происходило только при переходе в папку, если нам необоходимо автомонтирование всегда, то см выше - настройка там заканчивается
[Unit]
Description=NFS share
Requires=openvpn@vpn.service
Requires=network-online.target
After=openvpn@vpn.service
[Automount]
Where=/opt/nfs/ro
TimeoutIdleSec=301
[Install]
WantedBy=multi-user.target
Секция Unit содержит описание нашего юнита и службы, необходимые для нашего автомотирования. Обращаю внимание, что если вы описали службу, то она должна существовать, иначе ваше автомонтирование не запустится.
Секция Automount должна содержать куда происходит монтирование
Секция Install задаёт уровень запуска сервиса - в нашем примере это многопользовательский режим без графики, если запуск необходим только при графическом выходе в систему, то надо указать graphical.target
После создания юнита необходимо перечитать systemd systemctl daemon-reload и в случае отсутствия ошибок включить его в автозагрузку systemctl enable --now opt-nfs-ro.automount