Как-то так исторически сложилось, что я не подружился с Samba. Ну, не могу настроить конфиг с первого раза, чтобы всё заработало. Бесит =) И как-то оно всегда у меня медленно работает и через «край земли»… Не нравится, в общем. Это субъективно.
Что такое NFS (Network File System)
NFS первых версия запили в компании Sun Microsystems ещё в 1984 году, когда современные буратины были ещё саженцами. Запилили они его чтобы обеспечить обмен, точнее общий достп к файлам, по сети. Версий было несколько, самая последняя — NFS4.
Есть мнение, что работает NFS следующим образом:
- Клиент NFS запрашивает у сервера NFS файл/папку через удалённый вызов RPC
- Сервак проверяет наличие файла и разрешение на доступ конкретному клиенту
- Сервер удалённо монтирует запрошенный файл/каталог на машине клиента
- Сервер предоставляет доступ через виртуальное соединение
- Клиент обращается к файлу как к локальному ресурсу
Ещё у NFS есть возможность кеширования файлов, чтобы побыстрее было, блокировка файлов для одновременной записи, синхронизация обновления атрибутов файла.
Чем NFS лучше Samba
В целом, те же яйца, только в профиль.
Говорят, что между невиндовыми машинами лучше использовать NFS, так как Samba — мастдайная технология, но я бы в это не очень верил. И для больших файлов NFS вроде как лучше.
Но по моему субъективному мнению — проще, строже и не лагает. По крайней мере у меня. НАТИВНЕЕ! Ух! =)) Я же тут валю с Window понемногу, по крайне мере в области HomeLab сервера.
Что надо уметь чтобы настроить NFS
- Надо уметь править текстовые файлы. Возможно, из-под root’а.
- Печатать без ошибок
- Понимать, чего ты хочешь от Linux
Пора бы приступить к настройке
Точно, а то что-то я тут «растёкся мыслью по древу». Настроение поболтать, видимо.
Для простоты предположим, что входные данные у нас такие:
- Сервер у нас идёт с адресом 192.168.1.10
- Клиент с адресом 192.168.1.100
- Расшаривать будем папку «/home/serveradmin/share folder» (тут специально пробел, в методических целях. Так-то шлите пробел нахер, он всегда подкинет вам проблем)
- Монтировать папку на клиенте будем в /mnt/server_folder
Адреса сервера и клиента в любой уважающей себя сети должны и будут, конечно, статичными (гуглите и нагуглите)
Настроить сервер NFS
Для начала нужно на СЕРВЕРЕ отредактировать файл /etc/exports . В linux это можно сделать несколькими способами, в зависимости от версии оного и от установленных пакетов.
Но для начала нужно убедиться, чтобы этот файл у вас был. Его может не быть, и скорее всего, не будет. Убедиться в этом просто:
cat /etc/exports
Если выведет:
cat: /etc/exports: No such file or directory
Значит, файла у вас нет. Нужно выполнить несколько команд, понятных каждому:
sudo apt update
sudo apt install nfs-common
sudo apt install nfs-kernel-server
Файл /etc/exports должен появиться.
Важно! Есть мнение, что перед установкой nfs-kernel-server нужно создать папку для шаринга, но у меня и так всё работало всегда.
Итак, редактируем файл. Это можно сделать несколькими способами:
либо sudo nano /etc/exports
либо sudo vim /etc/exports
либо sudo mcedit /etc/exports
В сам файл (В КОНЕЦ файла!) записывает строку, которая и сделает нашу «шару» общедоступной папкой для клиента:
"/home/serveradmin/share folder" 192.168.1.100(rw,sync,no_subtree_check,root_squash)
Тут важны кавычки, как раз из-за пробела в названии папки. Если бы пробела не было в пути, то вавычки можно было бы не ставить. ip можно указывать как маску: 192.168.1.* тогда все машины из подсети смогут использовать шару. Но я люблю адресно указывать клиентов, например, вот так, просто через пробел в этой же строке:
«/home/serveradmin/share folder» 192.168.1.100(rw,sync,no_subtree_check,root_squash) 192.168.1.101(rw,sync,no_subtree_check,root_squash) 192.168.1.102(rw,sync,no_subtree_check,root_squash)
Параметры в скобках тоже очень важны:
- rw (ro) — модификатор доступа. rw — чтение и запись. ro — только чтение.
- sync (async) — не обрабатывать запрос на запись, пока предыдущая запись не будет зафиксирована на диске. Можно делать async, он быстрее. Но и менее безопасный с точки зрения стабильности и сохранности файла. Но async вроде более щадящий для SSD, т.к. не дёргает диск по каждому поводу. Но sync более медленный, особенно на HDD.
- no_subtree_check(subtree_check) — отключение проверки наличия доступа ко всему поддереву. subtree_check медленнее, но безопаснее.
- root_squash — это про безопасность. Чтобы админ Клиента не обладал админскими правами на Сервере. Установка no_root_squash наделит админа Клиента соответствующими правами на сервере, подменив его UID
Всё, считайте Шара готова. Осталось чуть-чуть:
sudo exportfs -rv
#на всякий случай можно перезапустить сервис NFS, но у меня и так на этом этапе всегода работало:
sudo systemctl restart nfs-kernel-server #не обязательно =)
После ввода этой команды, если всё прошло без ошибок, то ваша шара уже торчит наружу из вашего сервера.
Как использовать NFS на Клиенте
Конечно же нужно поставить NFS:
sudo apt update
sudo apt install nfs-common
Чтобы разово (до перезагрузки) примонтировать шару вводим команду (не помню, нужны ли кавычки в данном случае вокруг серверного пути. Пробуйте сами!) :
sudo mount -t nfs 192.168.1.10:/home/serveradmin/share folder /mnt/server_folder
Чтобы навсегда примонтировать шару на Клиенте есть два способа:
- Отредактировать /etc/fstab
- Создать демона, который будет монтировать шару сам
Говорят, первый способ не очень стабильный и может подвесить Клиента при загрузке. Но я не встречался с такой бедой.
Итак, первый способ:
sudo nano /etc/fstabn
В файл дописываем строчку:
192.168.1.10:/home/serveradmin/share folder /mnt/server_folder nfs defaults 0 0
Сохраняем, закрываем, вводим команду:
sudo mount -a #так же, вроде, можно sudo mount /mnt/server_folder
Итак, второй способ:
Нужно создать текстовый файл в папке /etc/systemc/system/ с названием, отражающим точку монтирования ( это важно! ). В нашем случае будет mnt-server_folder.mount
cd /etc/systemd/system
sudo touch mnt-server_folder.mount
#открыть файл на запись:
sudo nano mnt-server_folder.mount
В файле записать следующие стоки:
[Unit]
Description=Mount nfs share
After=network.target
[Mount]
What=192.168.1.10:/home/serveradmin/share folder
Where=/mnt/server_folder
Type=nfs
[Install]
WantedBy=multi-user.target
Сохранить и закрыть файл. И заставить systemd перечитать всех демонов:
sudo systemctl daemon-reload
Затем, запустить нашего:
sudo systemctl start mnt-server_folder.mount
Чтобы сделать так, чтобы демон загружался сам при загрузке машины, то нужно выполнить команду:
sudo systemctl enable mnt-server_folder.mount
Проверить успех сразу же можно командой:
ls -l /mnt/server_folder
Доступ к NFS папке с Windows
Запускаем PowerShell без повышения прав.
Для доступа к общей папке нужно будет выполнить команду:
New-PSdrive -PSProvider FileSystem -Name D -Root \\192.168.1.1\mnt\nfs\doc -Persist
Где, D — имя будущего сетевого диска (без двоеточия!), 192.168.1.1 — ip-адрес сервера, \mnt\nfs\doc — путь до папки(абсолютный)
Отключить диск можно как из GUI — просто отключить сетевой диск, так и командой в PowerShell без привелегий:
Remove-PSdrive -Name Z
Заключение
Основой материала для заметки послужили собственный опыт, набитые шишки, а также следуюзие статьи:
- https://www.ev3dev.org/docs/tutorials/setting-up-an-nfs-file-share/
- https://www.opennet.ru/docs/HOWTO-RU/NFS-HOWTO-6.html
- https://bluexp.netapp.com/blog/azure-anf-blg-linux-nfs-server-how-to-set-up-server-and-client
- https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-20-04-ru
- https://redos.red-soft.ru/base/server-configuring/other-utilites/nfs/