Установка NFS на Ubuntu Server 20.04 и подключение клиентов

Справочный материал о настройке NFS на сервере и подключении к нему виртуальных машин KVM.

Предположим, что есть сервер с большим дисковым массивом, на котором работает несколько виртуальных серверов и необходимо предоставить им доступ к общим дисковому пространству хоста.

На хосте устанавливается сервер NFS.

Настраиваем брандмауэр, чтобы открыть порт NFS-сервера 2049 для клиентов из виртуальной сети 192.168.122.0/24:

sudo ufw allow from 192.168.122.0./24 to any port nfs

Устанавливаем пакет NFS:

sudo apt update 
sudo apt install nfs-kernel-server

Создаем на хосте каталог, который предполагаем сделать доступным для виртуальных машин.

mkdir /home/pacs/dicomarchive 

Для безопасности NFS преобразует любые операции root на клиенте в операции с учетными данными nobody:nogroup. В связи с этим, нам необходимо изменить владельца каталога для соответствия этим учетным данным.

sudo chown nobody:nogroup /home/pacs/dicomarchive

Открываем и редактируем файл /etc/exports:

sudo mcedit /etc/exports

Файл содержит комментарии, показывающие общую структуру каждой строки конфигурации. Синтаксис выглядит следующим образом:
directory_to_share client(share_option1,...,share_optionN)
Добавляем в него строчку:

/home/pacs/dicomarchive 192.168.122.0/24(rw,sync,no_root_squash,no_subtree_check)

Здесь /home/pacsadmin/dicomarchive - каталог, который мы "шарим" для всех виртуальных машин из сети 192.168.122.0/24 с такими опциями:
rw: эта опция дает клиенту доступ к чтению и записи на соответствующем томе. sync: эта опция принудительно заставляет NFS записывать изменения на диске, прежде чем отправлять ответ. В результате мы получаем более стабильную и согласованную среду, поскольку в ответе отражается фактическое состояние удаленного тома. Однако при этом снижается скорость операций с файлами. no_subtree_check: данная опция предотвращает проверку вложенного дерева, когда хост проверяет фактическую доступность файла в экспортированном дереве при каждом запросе. Это может вызвать много проблем в случае переименования файла, когда он открыт на клиентской системе. Проверку вложенного дерева в большинстве случаев лучше отключить. no_root_squash: по умолчанию NFS преобразует запросы удаленного пользователя root в запросы пользователя без привилегий на сервере. Это предназначено для обеспечения безопасности, чтобы пользователь root клиентской системы не мог использовать файловую систему хоста с правами root. Опция no_root_squash отключает такое поведение для определенных общих ресурсов.
После сохранения изменений закрываем файл и перезапускаем сервер:

sudo systemctl restart nfs-kernel-server

На клиентских машинах устанавливаем клиентский пакет NFS:

sudo apt install nfs-common

Создаем каталог для монтирования общего сетевого ресурса:

mkdir -p /home/dicom/archive

Монтируем:

sudo mount 192.168.122.1:/home/pacs/dicomarchive /home/dicom/archive

Если всё выполнено без ошибок, то можно убедиться, что сетевой ресурс промонтирован командой

df -h

Для того, чтобы сетевой диск монтировался автоматически при запуске виртуальной машины, создаем на ней два файла (имена файлов = название каталога в который монтируется NFS-шара, где вместо слеша — дефис) с таким содержимым.

sudo mcedit /etc/systemd/system/home-dicom-archive.mount
[Unit] 
Description=NFS 
Requires=network-online.target 
After=network-online.service
 [Mount] 
Where=/home/dicom/archive 
What=192.168.122.1:/home/pacs/dicomarchive 
Type=nfs 
[Install] 
WantedBy=remote-fs.target
sudo mcedit /etc/systemd/system/home-dicom-archive.automount
[Unit] 
Description=NFS 
Requires=network-online.target 
After=network-online.service 
[Automount] 
Where=/home/dicom/archive 
[Install] 
WantedBy=remote-fs.target

Сохраняем файлы. Включаем автозапуск:

sudo systemctl daemon-reload 
sudo systemctl enable home-dicom-archive.automount 
sudo systemctl enable home-dicom-archive.mount 

Перезагружаемся и убеждаемся, что в локальный каталог примонтирован сетевой диск хоста.
Пользуемся 🙂

 

Scroll to top