Как правильно экспортировать и импортировать общие ресурсы NFS, имеющие подкаталоги в качестве точек монтирования?

Как правильно экспортировать и импортировать общие ресурсы NFS, имеющие подкаталоги в качестве точек монтирования?

Сервер 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
    

Связанный контент