サブディレクトリもマウント ポイントとして持つ NFS 共有を適切にエクスポートおよびインポートするにはどうすればよいですか?

サブディレクトリもマウント ポイントとして持つ NFS 共有を適切にエクスポートおよびインポートするにはどうすればよいですか?

サーバーはオプション で NFS 経由でAディレクトリをエクスポートします。 内のサブディレクトリは、オプションを使用した NFS サーバー上の別の場所へのマウント ポイントです。/srvnohide/srv/srv/foo--bind

server# mount --bind /bar/foo/ /srv/foo/

クライアントはNFS を使用して をBインポートしA:/srv、マウントします/mnt/srv。 の内容は/mnt/srvの内容ですA:/srv

問題は、 が/mnt/srv/foo空であるのに、そこに内容が表示されることを期待していることですA:/bar/foo/

サブディレクトリもマウント ポイントとして持つ NFS 共有を適切にエクスポートおよびインポートするにはどうすればよいですか?

答え1

crossmntあなたの友だちです。

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)

答え2

私はこの問題に遭遇した。ディスクレスアーチガイドを読んでいて、本当に遅くなりました。これが他の人にも有効かどうか興味があるので、ここで私の発見を共有します。

ディスクレス ガイドに従って、ディスクレス クライアントのルート ファイル システム (エクスポートする必要がある実際のデータ) をループバック イメージにマウントします/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ディスクレス ルート ファイル システムが存在するはずでしたが、空のディレクトリであることがわかりました。

この段階では、マニュアル ページのこのオプションにたどり着くまで、ほぼすべてを試しました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 Sylvia 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 Tara 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
    

関連情報