NFS経由でFUSEをエクスポート中に問題が発生しました。

NFS経由でFUSEをエクスポート中に問題が発生しました。

私はNFSサーバーのマウントポイントにマウントされたFUSEファイルシステムを直接作成しました/export/example/mount。その後、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)。

仕事用ユーザーとrootとしてFUSEをインストールしてみました。結果は同じです。

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

私に問題を引き起こす原因や解決策を知っている人はいますか?

問題を解決するために、NFSをSSHFSに置き換えようとしましたが、クライアントシステムがSSHFSをサポートするには古すぎる(FUSEベースであり、FUSEをサポートしていないため)、機能しませんでした。

答え1

ほとんどの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でヒューズをエクスポートしてエラーが発生したことを確認するには、特にNFS v4(fsid)なしでマウントポイントをエクスポートし、エラーが発生していることを確認してください。

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

サーバーにアンマウントされたマウントポイントをエクスポートし、後でサーキットブレーカーを使用してマウントする場合は、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.

答え2

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

関連情報