2012-06-17 19 views
8

Estoy planeando implementar un sistema de archivos FUSE usando API de bajo nivel y actualmente estoy intentando comprender la estructura fuse_entry_param.¿Qué son los números de generación de inodo?

Me pregunto qué significa realmente unsigned long fuse_entry_param::generation. Documentation says solo que ino/generation el par debe ser único para la duración del sistema de archivos, pero no entra en detalles.

¿Cuál es la semántica de las generaciones de inodo y cómo se usan?

Por ejemplo, ¿puedo considerar como un generation bits adicionales de ino (como una especie de espacio de nombres) y utilizarlas libremente para mapear arbitraria vida-única de 128 bits (x86_64) 2*sizeof(unsigned long) en los valores de i-nodos? ¿O las generaciones solo deben incrementarse secuencialmente? ¿Qué sucede cuando los números de inodo colisionan, pero sus números de generación son diferentes?

Respuesta

11

El campo 'generación' es importante si su generador de números de inodo puede generar diferentes números de inodo en diferentes momentos para el mismo objeto. Esto no es común para los sistemas de archivos en disco, pero puede suceder para los sistemas de archivos de red (como NFS, vea 1).

Se menciona en 1 que un servidor puede usar un conjunto diferente de identificadores de fusibles (número de inodo)/(nfs) después de un reinicio. Si eso sucede, es posible que los nuevos números de inodos se correlacionen con los objetos de una manera diferente a los números de inodos que se entregaron antes de que el servidor se reinicie. Un cliente podría usar un número de generación diferente para el conjunto de inodo antes de reiniciar y para el conjunto de inodos después de reiniciar para aclarar qué inodo significa.

Si su sistema de archivos tiene un esquema de generación estática para inodos (donde un número de inodo siempre apunta al mismo objeto), no es necesario utilizar el número de generación y se puede usar para extender el número inodo.

Cuestiones relacionadas