我计划使用低级API实现FUSE文件系统,目前正在尝试理解fuse_entry_param
结构。
我想知道unsigned long fuse_entry_param::generation
实际意味着什么。 Documentation says只有ino
/ generation
对对于文件系统的生命周期应该是唯一的,但不会涉及任何细节。
inode生成的语义是什么以及如何使用它们?
例如,我可以将generation
视为ino
的附加位(如某种命名空间)并自由使用它们来映射任意生命周期 - 唯一的128位({{1}在x86_64上)inode的值?或者几代人只是按顺序递增?当inode数量发生碰撞时会发生什么,但它们的代数不同?
答案 0 :(得分:11)
如果您的inode编号生成器可能在同一对象的不同时间生成不同的inode编号,则“生成”字段很重要。这对于磁盘上的文件系统来说并不常见,但它可能发生在网络文件系统中(如NFS,请参阅1)。
在1中提到服务器在重启后可能会使用一组不同的(fuse)inode数/(nfs)文件句柄。如果发生这种情况,新的inode编号可能以不同的方式映射到对象,然后是在服务器重新启动之前给出的inode编号。 客户端可以在重新启动之前为inode 的集合使用不同的世代号,在重新启动之后使用inode 的集合,以明确指出哪个inode。
如果您的文件系统具有inode的静态生成方案(其中inode编号始终指向同一对象),则无需使用世代号,它可用于扩展inode编号。