![ライブラリのバージョンを更新した後、inodeベースのファイルシステムで再起動が必要ないのはなぜですか? [コピー]](https://linux33.com/image/48852/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81inode%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%A7%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
inodeとは何か知りたいです。しかし、この詩は以下に由来します。ウィキペディア私を混乱させる:
inodeファイルシステムを使用して新しいライブラリをインストールするのは非常に簡単です。実行中のプロセスはライブラリファイルにアクセスでき、他のプロセスはファイルを置き換えて新しいinodeを作成し、その後ライブラリにアクセスしようとすると新しいバージョンを取得するために新しいファイルにまったく新しいマッピングが存在します。 。この機能は、再起動を必要とせずに現在マップされているライブラリを置き換えます。したがって、プログラムを更新するための最良の方法は、古い実行可能ファイルを削除してから更新されたバージョン用の新しいinodeを作成して、以前のバージョンを実行しているすべてのプロセスが中断することなく続行できるようにすることです。
答え1
Unixスタイルのファイルシステムでは、システムがファイルについて知っているすべてのファイル(ファイル名を除く)がinodeまたはinodeが指す場所に保存されます。これには、コンテンツ、所有権、変更日、権限が含まれます。 Unixディレクトリエントリは単に名前とinodeへのポインタであり、プロセスがファイルを開くときにのみ使用されます。ファイルが開かれると、ディレクトリエントリは関連しません。
つまり、ファイルを読み書きするプロセスを中断することなく、現在開いているファイルを削除できます。ファイルを削除すると、単にディレクトリエントリが削除されます。 inode は、すべてのプロセスがファイルを閉じるまで保持されます。この時点で、inodeと他のすべてのファイルデータは削除されます(または少なくとも廃止され、リサイクル可能としてマークされます)。これは、inode構造の一部である「リンク数」というフィールドによって処理されます。
したがって、実行中のプログラムで使用されている共有ライブラリをアップグレードするには、そのライブラリファイルを削除するだけです。プログラムはすでにファイルを開いているため、これは影響を受けません。次に、新しいバージョンのライブラリを新しいファイルとしてインストールします(新しいinodeを取得します)。