NFS
Сервер
sudo apt-get install nfs-kernel-server
Настройка сервера делается в файле /etc/exports
Например:
/ubuntu *(ro,sync,no_root_squash,no_subtree_check) /common 192.168.0.1/24(rw,sync,no_subtree_check) 192.168.0.200(noaccess)
- доступ к директории /ubuntu получат доступ все на чтение
- доступ на чтение/запись к /common получит вся сеть 192.168.0.0/24 кроме 192.168.0.200
Для применения изменений первый раз перегружаем nfs, а затем достаточно команды:
sudo exportfs -r
Опции
- ro (rw) - Разрешает только запросы на чтение ( чтение/ запись).
- subtree_check (no_subtree_check) - Если экспортируется подкаталог фаловой системы, но не вся файловая система, сервер проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Отключение проверки уменьшает безопасность, но увеличивает скорость передачи данных.
- sync (async) - указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря информации.
- wdelay (no_wdelay) - указывает серверу задерживать выполнение запросов на запись, если ожидается последующий запрос на запись, записывая данные более большими блоками. Это повышает производительность при отправке больших очередей команд на запись. no_wdelay указывает не откладывать выполнение команды на запись, что может быть полезно, если сервер получает большое количество команд не связанных друг с другом.
- noaccess - запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.
- all_squash (no_all_squash) - все подключения будут выполнятся от анонимного пользователя или от заданных в параметре anonuid/anongid.
- root_squash (no_root_squash) - при заданной опции root_squash, запросы от пользователя root отображаются как от анонимного uid/gid, либо от пользователя, заданного в параметре anonuid/anongid.
- anonuid=UID и anongid=GID - Явно задает UID/GID для анонимного пользователя.
- secure (insecure) - требует, чтобы запросы NFS поступали с защищенных портов (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
- fsid=num|root|uuid - NFS должна иметь возможность идентифицировать каждую файловую систему, которую она экспортирует. Поскольку не все файловые системы хранятся на устройствах и не все файловые системы имеют идентификаторы UUID, иногда необходимо явно указывать NFS, как идентифицировать файловую систему. fsid не должны повторяться.
http://winitpro.ru/index.php/2013/04/22/nfs-server-na-windows-server-2012/
https://linux.die.net/man/5/exports
Debug
Проверить поддерживаемые версии nfs сервером:
cat /proc/fs/nfsd/versions
Изменить режим логирования, в файле /etc/default/nfs-kernel-server изменить RPCMOUNTDOPTS на:
RPCMOUNTDOPTS="--manage-gids --debug all"
Сервер в контейнере LXC
Создать в гипервизоре proxmox профиль lxc-container-default-with-nfsd для apparmor:
cat > /etc/apparmor.d/lxc/lxc-default-with-nfsd << 'EOF' # Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which # will source all profiles under /etc/apparmor.d/lxc profile lxc-container-default-with-nfsd flags=(attach_disconnected,mediate_deleted) { #include <abstractions/lxc/container-base> # the container may never be allowed to mount devpts. If it does, it # will remount the host's devpts. We could allow it to do it with # the newinstance option (but, right now, we don't). deny mount fstype=devpts, mount fstype=nfsd, mount fstype=rpc_pipefs, mount fstype=cgroup -> /sys/fs/cgroup/**, } EOF
Перечитать профили apparmor:
apparmor_parser -r /etc/apparmor.d/lxc-containers
Активировать профиль lxc-container-default-with-nfsd (для контейнера 100 на гипервизоре a01):
echo 'lxc.apparmor.profile = lxc-container-default-with-nfsd' >> /etc/pve/nodes/a01/lxc/100.conf
Перегрузить контейнер:
lxc-stop -n 100 lxc-start -n 100
https://gist.github.com/rwenz3l/0907385f6a6690c34eb8e36fa73d8405
Клиент
sudo apt-get install nfs-common
Посмотреть шары на хосте:
showmount -e fs.domain.com
Подключение с помощью mount:
sudo mount example.domain.com:/ubuntu /local/ubuntu sudo mount -t nfs -o rw,hard,intr 192.168.0.1:/common ~/net/disk1 sudo mount nfsserver:/share/soft/ISO /mnt -o nfsvers=3,udp
или fstab:
example.domain.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr 192.168.0.1:/common /home/user2/net/disk3 nfs defaults 0 0 nfsserver:/share/soft/ISO /mnt nfs nfsvers=3,udp
Ошибки
rpc.nfsd[453]: error starting threads: errno 38 (Function not implemented)
При запуске сервера NFC в контейнере LXC
Решение: Сервер в контейнере LXC
clnt_create: RPC: Unknown host
При запуске showmount
Решение:
apt install netbase
clnt_create: RPC: Program not registered
Не запущен/Не доступен сервер nfs
