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


21

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

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

クライアントBA:/srv/mnt/srvNFS を使用してインポートしてマウントします。のコンテンツ/mnt/srvはのコンテンツですA:/srv

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

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


おそらくAのシンボリックリンクを使用する方が簡単/srv/foo --> /bar/fooですか?
-ckhan

1
これを試してみました。これは、サーバーではなく/bar/fooクライアントマシンに到達しようとBしますA
mbaitoff

回答:



10

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た。diskless-root-filesystemがそこにあると予想したときに、空のディレクトリを見つけるためだけです。

この段階で、exportsmanページのこのオプションに何かが導かれるまで、あらゆることを試しました。

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、変更を登録するためにもう一度走ったとき、クライアントから再マウントを試みましたが、うまくいきました!


8

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

1
ルート上のcrossmnt?
meffect

2

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

問題は、このブログ投稿(私ではない)で詳しく説明されています:http : //utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

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


1
これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
slm

0

注:シングルユーザーのみ有効

追加されるのは、サーバー側とクライアント側の一連の編集です。サーバー側/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
これは何ですか?これは1つのファイルですか?多くのファイル?明確にするために、書式設定ツールを使用して回答を書式設定してください。回答が質問にどのように回答するかを編集して説明してください。
テルドン

(1)言葉を使う。(2)まだ提示されていないこのオファーは何ですか?
G-Manが「Reinstate Monica」と言う

そのために謝罪。
エドイグレハート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.