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