web-dev-qa-db-ja.com

NFS経由でFuseをエクスポートできない

マウントポイント/export/example/mountでNFSサーバーにマウントする自己記述型のFuseファイルシステムを持っています。次に、NFS経由でFuseの親ディレクトリをエクスポートします。 /etc/exportsにはオプションnohide,crossmnt,subtree_check,ro,no_root_squashが含まれており、全員に無料でアクセスできます。

/export/example *(nohide,crossmnt,subtree_check,ro,no_root_squash)

このエクスポートをNFSクライアントにマウントしてアクセスできます。 NFS内のFuseにアクセスするとすぐに、NFSがumountになるまでクライアントがハングします(これを行うには、オプション-fを使用する必要があります)。

Fuseを作業ユーザーとして、またrootとしてマウントしてみました。結果は同じです。

サーバーはUbuntu 12.04、クライアントはSuSE 9.3を実行しています。 FuseはPython=で記述されており、ローカルで問題なく動作します。NFSを介したエクスポートのみが失敗します。信頼できるユーザーのみのプライベートネットワーク上にあるため、セキュリティ上の制限はありません。

誰かが私の問題を引き起こす可能性のあるアイデア、または問題を解決する方法を知っていますか?

NFSをSSHFSで置き換えて問題を回避することを考えましたが、クライアントシステムが古すぎてSSHFSをサポートできないため(Fuseに基づいており、Fuseはサポートされていないため)、それは機能しません。

8
Alfe

ほとんどのLinuxディストリビューションには、NFSv2またはNFSv3を使用してFuseマウントされたファイルシステムをエクスポートできないカーネルが同梱されています。選択肢は次のとおりです。1.ファイルシステムをカーネル空間に実装します。 2. NFSv4にエクスポートします。これには、fsid =が必要です。

私は自分自身を使用しています。2。下の図では、#で始まるコマンドはサーバーで実行され、$で始まるコマンドはクライアントで実行されます。

これは私のサーバー構成です。Fuseマウントポイントをエクスポートしています。

# mount | tail -n1
convmvfs on /mnt/gb2312 type Fuse.convmvfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
# grep gb2312 /etc/exports 
/mnt/gb2312     192.168.0.0/16(no_subtree_check,fsid=0)

これが私のクライアントでしたことです:

$ Sudo mount -t nfs4 server:/ /mnt/
$ ls /mnt
Downloads  IMAGES  Library  lost+found

NFS v2/v3でFuseをエクスポートしたことが原因で失敗したことを確認するには、NFS v4(fsid)を使用せずにそのマウントポイントをエクスポートし、エラーが発生するかどうかを確認します。

# exportfs -a
exportfs: /mnt/gb2312 requires fsid= for NFS export

サーバーでマウントポイントをマウント解除してマウントし、後でFuseでマウントすると、nfsクライアントを使用しようとした場合にログに表示されます。

# tail /var/log/syslog
Aug 18 03:54:31 server rpc.mountd[17183]: Cannot export /mnt/gb2312, possibly unsupported filesystem or fsid= required
Aug 18 04:00:52 server rpc.mountd[17183]: Caught signal 15, un-registering and exiting.
7
Tankman六四

デフォルトでは、nfsを介したサブマウントのエクスポートはオフになっています。推奨される一連のアクションは、サブマウントもエクスポートし、クライアントにもマウントすることです。

0
hildred