Инструменты пользователя

Инструменты сайта


how-to:nfs

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

Подключаем NFS шару в Windows Server 2012 R2

Ошибки

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

Ссылки

how-to/nfs.txt · Последнее изменение: 127.0.0.1