2010-01-20 28 views
16

La convención de lenguaje C cuenta los índices de matriz desde 0. ¿Por qué los números de inodos comienzan desde 1 y no 0?¿Por qué los números de inodo comienzan en 1 y no en 0?

Si el inodo 0 está reservado es para algún uso especial, entonces ¿cuál es la importancia del inodo 0?

+0

¿Tiene una referencia para respaldar la afirmación de que un número de i-nodo no puede ser 0 en cualquier sistema de archivos?No pude encontrar ninguno. –

+0

Entonces, su cita responde exactamente su pregunta, ¿no es así? –

+1

Sí, pero no estoy en producción, y estoy buscando respuestas solo para fines académicos puros;) –

Respuesta

22

Normalmente, el inodo 0 está reservado porque un valor de retorno de 0 generalmente indica un error. Múltiples métodos en el kernel de Linux, especialmente en la capa VFS compartida por todos los sistemas de archivos, devuelve un ino_t, p. find_inode_number.

Hay más números de inodo reservados. Por ejemplo, en ext2:

#define EXT2_BAD_INO    1  /* Bad blocks inode */ 
#define EXT2_ROOT_INO   2  /* Root inode */ 
#define EXT2_BOOT_LOADER_INO  5  /* Boot loader inode */ 
#define EXT2_UNDEL_DIR_INO  6  /* Undelete directory inode */ 

y ext3 tiene:

#define EXT3_BAD_INO    1  /* Bad blocks inode */ 
#define EXT3_ROOT_INO   2  /* Root inode */ 
#define EXT3_BOOT_LOADER_INO  5  /* Boot loader inode */ 
#define EXT3_UNDEL_DIR_INO  6  /* Undelete directory inode */ 
#define EXT3_RESIZE_INO   7  /* Reserved group descriptors inode */ 
#define EXT3_JOURNAL_INO   8  /* Journal inode */ 

y ext4 tiene:

#define EXT4_BAD_INO    1  /* Bad blocks inode */ 
#define EXT4_ROOT_INO   2  /* Root inode */ 
#define EXT4_USR_QUOTA_INO  3  /* User quota inode */ 
#define EXT4_GRP_QUOTA_INO  4  /* Group quota inode */ 
#define EXT4_BOOT_LOADER_INO  5  /* Boot loader inode */ 
#define EXT4_UNDEL_DIR_INO  6  /* Undelete directory inode */ 
#define EXT4_RESIZE_INO   7  /* Reserved group descriptors inode */ 
#define EXT4_JOURNAL_INO   8  /* Journal inode */ 

Otros fileystems utilizan el ino 1 como número de inodo raíz. En general, un sistema de archivos puede elegir libremente sus números de inodo y sus valores ino inobrados (con la excepción de 0).

+0

Archivo de encabezado: fs/ext4/ext4.h –

+0

También vea macro 'EXT2_FIRST_INO()' - en realidad no es una constante. – MSalters

23

0 se usa como sentinel value para indicar inodo nulo o nulo. similar a cómo los punteros pueden ser NULL en C. sin un centinela, necesitaría un bit adicional para probar si se estableció un inodo en una estructura o no.

información más aquí:

Todas las direcciones de bloque y de nodo-i comienzan en 1. El primer bloque en el disco es el bloque 1. 0 se usa para indicar ningún bloque . (Los archivos dispersos pueden tener estos dentro de ellos)

http://uranus.chrysocome.net/explore2fs/es2fs.htm

por ejemplo, en los sistemas de ficheros antiguos donde directorios han estado representados de una serie fija de las entradas del archivo, borrar un archivo daría como resultado el establecimiento de i-nodo de esa entrada val a 0. al atravesar el directorio, cualquier entrada con un inodo de 0 sería ignorada.

+0

Parece que el inodo 1 también se reserva junto con el inodo 0 para algunos propósitos especiales. –

+1

Eso parece específico para ext2fs. Su pregunta es acerca de los sistemas de archivos en general. –

+1

@Alok: una familia de Unix fs comparte el concepto de inode. ninguno reconoce 0 por convención. – jspcal

0

Cuando escribí un sistema de archivos hace siglos, utilicé el inodo 0 para el pseudo archivo .badblocks.

En algunos sistemas de archivos, .badblocks está realmente presente en el directorio raíz como un archivo regular propiedad de la raíz y el modo 0. root puede abrirlo pero leerlo o escribirlo no está definido.

Existe una antigua tradición de que los inodos comienzan desde 1, el número 1 es .badblocks y el número 2 es el directorio raíz. A pesar de que .badblocks no está particularmente bien garantizado, muchos sistemas de archivos se desviven por hacer root # 2.

Cuestiones relacionadas