11

我计划使用低级 API 实现 FUSE 文件系统,目前正在尝试理解该fuse_entry_param结构。

我想知道unsigned long fuse_entry_param::generation实际上是什么意思。文档只是说ino/generation对在文件系统的生命周期内应该是唯一的,但没有详细说明。

inode 生成的语义是什么以及它们是如何使用的?

例如,我是否可以将generation其视为附加位ino(如某种命名空间)并自由使用它们将任意生命周期唯一的 128 位(2*sizeof(unsigned long)在 x86_64 上)值映射到 inode?还是世代仅按顺序递增?当 inode 编号发生冲突但它们的世代编号不同时会发生什么?

4

1 回答 1

13

如果您的 inode 编号生成器可能在不同时间为同一对象生成不同的 inode 编号,则“generation”字段很重要。这对于磁盘文件系统来说并不常见,但对于网络文件系统(如 NFS,参见1)可能会发生。

1中提到,服务器在重新启动后可能会使用一组不同的(熔断)inode 编号/(nfs)文件句柄。如果发生这种情况,新的 inode 编号可能以与服务器重新启动之前给出的 inode 编号不同的方式映射到对象。

客户端可以为重启前的 inode 集和重启的inode 集使用不同的代号,以明确表示哪个 inode。

如果你的文件系统有一个 inode 的静态生成方案(其中一个 inode 编号总是指向同一个对象),则不需要使用生成编号,它可以用于扩展 inode 编号。

于 2012-06-19T09:02:09.347 回答