11

低レベル API を使用して FUSE ファイルシステムを実装する予定で、現在そのfuse_entry_param構造を理解しようとしています。

unsigned long fuse_entry_param::generationいったい何を意味するのだろう。ドキュメントにはino、 /ペアはファイルシステムの存続期間中一意である必要があるとだけ書かgenerationれていますが、詳細には触れていません。

inode 世代のセマンティクスとその使用方法は?

たとえば、(ある種の名前空間のような)generation追加ビットとして考えて、それらを自由に使用して、任意の生涯固有の 128 ビット ( x86_64 上) の値を inode にマップできますか? それとも、世代は順次インクリメントされることを意図していますか? i ノード番号が衝突し、世代番号が異なる場合はどうなりますか?ino2*sizeof(unsigned long)

4

1 に答える 1

13

inode 番号ジェネレーターが同じオブジェクトに対して異なる時点で異なる i ノード番号を生成する可能性がある場合、「世代」フィールドは重要です。これはオンディスク ファイル システムでは一般的ではありませんが、ネットワーク ファイル システム (NFS など、1を参照) では発生する可能性があります。

1で、サーバーは再起動後に (融合) inode 番号/(nfs) ファイルハンドルの異なるセットを使用する可能性があると述べられています。その場合、サーバーの再起動前に割り当てられた inode 番号とは異なる方法で、新しい inode 番号がオブジェクトにマップされる可能性があります。

クライアントは、再起動前の inode のセットと再起動の inode のセットに異なる世代番号を使用して、どちらの inode が意図されているかを明確にすることができます。

ファイル システムに inode の静的生成スキームがある場合 (inode 番号が常に同じオブジェクトを指している場合)、世代番号を使用する必要はなく、inode 番号を拡張するために使用できます。

于 2012-06-19T09:02:09.347 に答える