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