サーバーA
はディレクトリ/srv
をNFS経由でオプションnohide
でエクスポートします。 /srv
、/srv/foo
内のサブディレクトリは、--bind
オプションを使用したNFSサーバー上の別の場所のマウントポイントです。
server# mount --bind /bar/foo/ /srv/foo/
クライアントB
はA:/srv
をインポートし、NFSを使用して/mnt/srv
にマウントします。 /mnt/srv
の内容はA:/srv
の内容です。
問題は/mnt/srv/foo
が空であることですが、A:/bar/foo/
の内容がそこに表示されることを期待しています。
マウントポイントとしてサブディレクトリを持つNFS共有を適切にエクスポートおよびインポートする方法
クライアントから見えるようにするには、すべてのマウントサブポイントをNFSサーバーでエクスポートする必要があるようです。上記の状況では/etc/exports
ファイルは次のようになります。
/srv *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo *(rw,nohide,no_subtree_check)
次に、/srv
クライアント上のオプション-t nfs
は両方を作成します/srv
および/srv/foo
が適切に利用可能です。
この線
/srv/foo *(rw,fsid=0,nohide,no_subtree_check)
代わりに私のケースで働いています
/srv/foo *(rw,nohide,no_subtree_check)
crossmnt
はあなたの友達です。
/srv *(rw,fsid=0,no_subtree_check,crossmnt)
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
を再度実行すると、クライアントから再マウントしようとしましたが、うまくいきました!
私も本当にこれをやりたかったのですが、NFSクライアントはファイルのiノード番号がクライアントの内で一意であると期待しているため、このアイデアには問題があるようです単一のマウントのビュー。
問題の詳細は、このブログ投稿(私ではありません)に記載されています。 http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue
私はファイルシステムを個別にマウントし、それらを一緒にシンボリックリンクすることにしました。これはすべてのNFSクライアントで機能するはずです。
注:単一ユーザーのみが有効
追加されるのは、サーバー側とクライアント側の一連の編集です。サーバー側では、/etc/exports
および/etc/fstab
クライアント側。
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 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