Сервер A
экспортирует каталог /srv
через NFS с опцией nohide
. Подкаталог внутри /srv
, /srv/foo
, является точкой монтирования для другого расположения на сервере NFS с использованием --bind
опции, например
server# mount --bind /bar/foo/ /srv/foo/
Клиент B
импортирует A:/srv
и монтирует его /mnt/srv
с помощью NFS. Содержимое /mnt/srv
— это содержимое A:/srv
.
Проблема в том, что /mnt/srv/foo
он пуст, хотя я ожидаю увидеть там содержимое A:/bar/foo/
.
Как правильно экспортировать и импортировать общие ресурсы NFS, имеющие подкаталоги в качестве точек монтирования?
решение1
crossmnt
твой друг.
/srv *(rw,fsid=0,no_subtree_check,crossmnt)
решение2
Я столкнулся с этой проблемой, следуяБездисковая аркаруководство, и это действительно замедлило меня. Я собираюсь поделиться своими выводами здесь, так как мне интересно, сработает ли это для кого-то еще.
Согласно руководству по Diskless, у меня есть корневая файловая система бездискового клиента (фактические данные, которые мне нужно экспортировать) в образе loopback, который был смонтирован на /srv/des1
:
/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)
Затем я создал точку монтирования, /nfs/des1
запустил монтирование и убедился, что все вижу:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
Ссылаясь наАрка NFS/etc/exports
руководство, затем я размещаю на сервере следующее :
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
Затем я запустил exportfs -rav
на сервере, чтобы применить эти изменения.
Однако затем я смонтировал общий ресурс на тестовом клиенте с помощью: mount server:/des1 /mnt/tmp
и обнаружил, что это пустой каталог, хотя я ожидал, что там будет diskless-root-filesystem.
На этом этапе я перепробовал практически все, пока что-то не привело меня к этой опции на exports
странице руководства:
crossmnt
This option is similar to nohide but it makes it possible for clients
to move from the filesystem marked with crossmnt to exported filesystems
mounted on it. Thus when a child filesystem "B" is mounted on a parent "A",
setting crossmnt on "A" has the same effect as setting "nohide" on B.
Итак, перепробовав все остальное, я поменял местами, и теперь мой вариант /etc/exports
выглядит так:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
Прочитав запись на странице руководства, можно было подумать, что это будет иметь тот же эффект, что и предыдущий код, но когда я exportfs -rav
снова запустил его, чтобы зарегистрировать изменения, а затем попытался перемонтировать его с клиента, это сработало!
решение3
Похоже, что каждая подточка монтирования должна быть экспортирована сервером NFS, чтобы быть видимой для клиентов. В ситуации выше файл /etc/exports
должен выглядеть следующим образом:
/srv *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo *(rw,nohide,no_subtree_check)
Затем импорт /srv
на клиент с опцией -t nfs
сделает оба /srv
и /srv/foo
доступны должным образом.
редактирование OP
эта линия
/srv/foo *(rw,fsid=0,nohide,no_subtree_check)
сработало в моем случае вместо
/srv/foo *(rw,nohide,no_subtree_check)
решение4
ПРИМЕЧАНИЕ:включен только один пользователь
Он добавляет набор правок на стороне сервера и на стороне клиента. На стороне сервера /etc/exports
и /etc/fstab
на стороне клиента.
Серверная часть
- Linux Mint 18.3 Сильвия 32-бит
- Ядро Linux 4.4.0-138-generic i686
Asus eeepc
$ cat /etc/exports #insert shares (one for each mounted partition sub-folder): /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt) /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check) /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check) $ cat /etc/fstab #shared media files on /media/ed/ /media/ed/ /nfsshare/ nfs bind 0 0 /media/ed/media/ /nfsshare/media/ nfs bind 0 0 /media/ed//extra /nfsshare/extra/ nfs bind 0 0
Сторона клиента
- Linux Mint 19 Тара 64-бит
Ядро Linux 4.15.0-38-generic x86_64
$ cat /etc/fstab #NFS Shares line added 192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show