Linuxの「古いファイルハンドル」とはどういう意味ですか?


100

ターミナルを開いているとします。そのターミナルを介してcd、あるディレクトリに移動しました。別のターミナルを介して、そのディレクトリを削除し、同じバックアップから復元します。vim同じディレクトリ内の最初のターミナルからファイルを試行すると、古いファイルハンドルに関するエラーが発生するのはなぜですか?どういう意味ですか?(余談ですが、この問題を回避することが可能であることがわかりましたcd $(pwd)。)


ホストAからホストBにディレクトリをNFSマウント(adirという名前)してから、ホストAのadirに対して削除と復元を実行すると、ホストのadirにアクセスしたときに「古いファイルハンドル」というエラーが表示されることもあります。 B. touchホストAでコマンドを使用すると、正常になります。
rustyhu

回答:


82

ディレクトリが削除されると、iノードそのディレクトリのための(とその内容についてのinode)がリサイクルされています。シェルがそのディレクトリのiノード(およびその内容のiノード)を指すポインタは、無効になりました。ディレクトリがバックアップから復元されるとき、古いiノードは(必ずしも)再利用されません。ディレクトリとその内容はランダムなiノードに保存されます。同じままである唯一のことは、ディレクトリが復元されたディレクトリに対して同じ名前を再利用することです(そうしたため)。

これで、元のシェルがまだ指しているディレクトリのコンテンツにアクセスしようとすると、そのリクエストは元のiノードのリクエストとしてファイルシステムに通信されます。現在はまったく異なります)。stale file handle存在しないデータを要求したため、メッセージが表示されます。

cd操作を実行すると、シェルは指定された宛先のiノードの場所を再評価します。シェルがディレクトリの新しいiノード(およびそのコンテンツの新しいiノード)を認識したので、そのコンテンツに対する将来の要求は有効になります。


ああ、これは無効/ヌルのiノードポインタを処理するシステムの方法にすぎませんか?
IDDQD 2013年

はい。たとえば、すでに別の場所を指すようにリサイクルされているiノードを参照しようとした場合に何が起こるかを知るための詳細については、よくわかりません。それでも古いファイルハンドルを取得できますか?または、予期しないデータを取得しますか?
dg99 2013年

1
誰かが実際にそのIノードを現在のディレクトリとして使用しているため、システムが再利用することはないと思います。
SamuelÅslund2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.