マウントポイントにサブディレクトリもあるNFS共有を正しくエクスポートしてインポートするにはどうすればよいですか?

マウントポイントにサブディレクトリもあるNFS共有を正しくエクスポートしてインポートするにはどうすればよいですか?

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

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

クライアントはNFSを使用してそれをインポートしてBマウントします。内容は内容です。A:/srv/mnt/srv/mnt/srvA:/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シルビア32ビット
  • カーネル Linux 4.4.0-138-一般 i686
  • ASUS EEPC

    $ 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-typ x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    

関連情報