web-dev-qa-db-ja.com

マウントポイントとしてサブディレクトリを持つNFS共有を適切にエクスポートおよびインポートする方法

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

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

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

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

マウントポイントとしてサブディレクトリを持つNFS共有を適切にエクスポートおよびインポートする方法

23
mbaitoff

クライアントから見えるようにするには、すべてのマウントサブポイントを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) 
8
mbaitoff

crossmntはあなたの友達です。

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

Diskless Arch のガイドに従っているときに私はこの問題に遭遇しましたが、本当に遅くなりました。ここで私の発見を共有します。これが他の人のために機能するかどうか知りたいのです。

ディスクレスガイドに従って、/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]

Arch 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のmanページでこのオプションが表示されるまで、ほぼすべてを試しました。

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)

Manページのエントリを読んだら、これは前のコードと同じ効果があると思いますが、変更を登録するためにexportfs -ravを再度実行すると、クライアントから再マウントしようとしましたが、うまくいきました!

10
v25

私も本当にこれをやりたかったのですが、NFSクライアントはファイルのiノード番号がクライアントの内で一意であると期待しているため、このアイデアには問題があるようです単一のマウントのビュー。

問題の詳細は、このブログ投稿(私ではありません)に記載されています。 http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

私はファイルシステムを個別にマウントし、それらを一緒にシンボリックリンクすることにしました。これはすべてのNFSクライアントで機能するはずです。

2
Bluby

注:単一ユーザーのみが有効

追加されるのは、サーバー側とクライアント側の一連の編集です。サーバー側では、/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
    
1
Ed Iglehart