NFS 共有をマウントしようとするたびに、次のメッセージが表示されます。
>> mount -t nfs gitlab-replica-storage.blah.com:/export/registry-gitlab-prod-data-vol /mnt/test
mount.nfs: Stale file handle
問題は、次のように削除できないことです。
>> umount -f -l /mnt/test
umount: /mnt/test: not mounted
マウントポイントを使用するプロセスがあるかどうかを確認しようとしましたが、そうではありませんでした。
この問題を解決するための他の選択肢はありますか?
説明すると:
- 他のコンピュータにインストールできます。
- 影響を受けたシステムの他のマウントポイントにはインストールできません。
答え1
サーバーにそのクライアントの古いエクスポートエントリがある場合、Amount -t nfs
は失敗します。Stale file handle
例のシナリオ:クライアントが最初にnfsボリュームをマウント解除せずにサーバーを再起動すると、これが発生する可能性があります。サーバーが返され、クライアントがアンマウントされてnfsボリュームをマウントしようとすると、サーバーは次のように応答できます。
mount.nfs: Stale file handle
/proc/fs/nfs/exports
これはまたはを見ると確認できます/proc/fs/nfsd/exports
。クライアントエントリがある場合は、古いエントリかもしれません。
サーバーからエクスポートを明示的にキャンセルし、関連エクスポートを再エクスポートすると、この問題を解決できます。たとえば、すべてのエクスポートに対してこれを行うには、次のようにします。
# exportfs -ua
# cat /proc/fs/nfs/exports
# exportfs -a
その後、クライアントはmount -t nfs ...
成功する必要があります。
マウントの作成ESTALE
やその他のシステムコール(たとえば、open/readdir/unlink/chdir...)は、ESTALE
古いエクスポートとファイルハンドルを返します。 NFSは古いファイルハンドルが発生しやすい(たとえば、クライアントにはファイルハンドルがありますが、ファイルはサーバーから削除されます)。
答え2
ESTALEバグは、元のファイルハンドル(サーバー上のファイルを一意に識別するためにNFSによって使用されます)がサーバー上の有効なファイルを参照しなくなった状況を処理するために導入されました。これは、サーバー上のアプリケーション、サーバーにアクセスする他のクライアント、または時には同じクライアントにマウントされている別のファイルシステムを介してサーバーからファイルが削除されたときに発生する可能性があります。 NFSサーバーは、エクスポートされなくなったファイルシステムにファイルがある場合でもこのエラーを返します。また、一部のNFSサーバーでは、ファイル名を変更するとファイルハンドルも変更されますが、この方法はお勧めできません。
このエラーは、クライアントが知らない間に同じ名前のファイルまたはディレクトリがサーバーに再生成される場合にも発生します。ファイルハンドルはファイルの特定のインスタンスを参照し、ファイルを削除して再作成すると、ファイルの新しいインスタンスが作成されます。
ESTALE エラーは、キャッシュされたディレクトリ情報を使用してパス名を dentry/inode ペアに変換するときによく発生します。後続のジョブがNFSサーバーに送信されたとき、その情報が古くなったか古いことが判明しました。これは、パス名を dentry/inode ペアに変換するためにキャッシュされた情報を使用するときに stat(2) などのシステム呼び出しで簡単に発生する可能性がありますが、サーバーへの GETATTR 呼び出しはファイルハンドルが無効になったことを発見します。
このエラーは、照会が探しているパス名のさまざまな部分の間、または正常な照会と後続の操作の間でサーバーが変更された場合にも発生する可能性があります。
ESTALEへのソースリンク:エスタルLWN。
NFSサーバー上のファイルとディレクトリを確認するか、NFSサーバー管理者にこれを行うように指示することをお勧めします。
NFSサーバーにいくつかの古いページキャッシュ、inode、dentryキャッシュエントリが含まれている可能性があります。それをきれいにして下さい:
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
答え3
私の場合、新しいボリュームをマウントするときに「mount.nfs:古いファイルハンドル」エラーも発生しました。これは、マウントされた古いボリュームが削除されたために発生します。マウント解除後にボリュームを使用し、
umount /mnt
再インストールすると問題が解決しました。
答え4
エクスポートが実際にマウントされていることを確認してください。
# cat /proc/mounts | grep nfs
古いファイルハンドルエラーは、NFSサーバーのエクスポートパスに古いバージョンのファイルがあることを意味します。 NFSサーバーを再起動すると役に立ちます。ただし、古いオペレーティングシステム(RHEL / CentOS 6.9)では、NFS4の代わりにNFS3に戻す方が良い場合があります。私の経験によれば、古いNFS4クライアントは最新のNFS4.1サーバーを使用するのに苦労することがあります。これはファイルロックの場合に特に当てはまります。