Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Inodo ese gran desconocido


Los sistemas de ficheros se componen de bloques, cada bloque es un pedacito del disco duro, estos pedacitos se pueden utilizar para varios propósitos:

  • Metadatos
  • Información útil del usuario

 

También existen los superbloques, estos contienen información como:

  • Tipo de sistema de ficheros
  • Tamaño
  • Estado
  • Información de estructuras

 

Como esta información es imprescindible esta es replicada en varias localizaciones del sistema de ficheros.

Se puede localizar según el tamaño de bloque:

    1k --> Bloque 8193
    2k --> Bloque 16384
    4k --> Bloque 32768

 

O desmontando el sistema de ficheros y ejecutando:

    mke2fs -n /dev/sdaX
    dumpe2fs /dev/sdaX|grep -i superblock

 

Los inodos sirven para localizar en que bloques físicos están los ficheros/directorios dentro del sistema de ficheros, además almacenan cierta info:

  • Tipo de fichero: ejecutable, bloque especial...
  • Permisos
  • Porpietario
  • Grupo
  • Tamaño
  • Último acceso
  • Hora de borrado
  • Número de links(hard/soft)
  • Atributos extendidos como append-only, no-borrable
  • ACLs

 

NOTA: La relación nombre -- Inodo está en una tabla, esta tabla tiene un tamaño máximo.

 

Cada partición tiene su propia tabla de inodos, esto implica que no se puedan hacer hard-links(dos ficheros con el mismo inodo) entre partciones, con un ejemplo se verá mas fácil:

El rojo representa los sectores ocupados por el fichero1 mientras que los verdes los ocupados por fichero2.

Tabla inodos
Nombre Fichero Inodo
Fichero1 Inodo1
Fichero2 Inodo2

 

Tabla datos inodos
Inodo Sectores/Propietario/...
Inodo1 1-2
Inodo2 3-5

 

 

 

 

 

 

 

 

 

 

 

Si queremos generar un hard-link en esta partición no tendríamos problemas ya que tan solo hay que crear una entrada en la tabla de inodos:

Tabla inodos
Nombre Fichero Inodo
Fichero1 Inodo1
Fichero2 Inodo2
Fichero3 Inodo2

 

De esta manera Fichero2 y 3 son el mismo fichero ya que ocupan los mismos sectores en el disco duro, el problema viene cuando hay varias particiones y queremos crear hard-links entre ellas, como cada tabla de inodos en cada partición es independiente nos es imposible.

 

Se puede consultar el inode de un fichero:

ls -i /etc/passwd
stat /etc/passwd

 

Es posible que nos quedemos sin inodes antes que sin espacio en el HD, esto es posible si se crean muchos ficheros pero de tamaño reducido, la tabla de inodes acabará full a pesar de disponer de espacio útil.

Si preveemos en la instalación del SO que vamos a generar muchísimos ficheros podemos generar el sistema de ficheros con tablas mayores a lo habitual.
mkfs.ext4
-N number-of-inodes --> Sobreescribimos el número de inodos calculados cuando se crea el sistema de ficheros.
-n --> Realizamos una simulación de la generación del sistema de ficheros, de este modo somos capaces de determinar la localización de los superbloques en el sistema de ficheros.

 


 

TROUBLESHOOTING:


- No quedan inodos.
Se puede optar por varias opciones:

  • Si tenemos otras particiones: mover ficheros a esta y ln desde la localización original.
  • Añadir un disco duro, copiar los ficheros y montar el directorio en la partición nueva.
  • Crear un sistema de ficheros loop y montarlo en otro sitio:
        Generamos el fichero con el espacio que tendrá nuestra nueva partición ficticia:

dd if=/dev/zero of=my_fs bs=1024 count=3072000
losetup /dev/loop0 my_fs
mkfs -t ext4 -m 1 -v /dev/loop0
mount /dev/loop0 /mnt/aux/

    El espacio se carga en la partición donde está el fichero my_fs y los inodos a /mnt/aux/, en la partición donde está my_fs solo se ha consumido un inodo, el del fichero en si mismo ;)

  • Eliminar tantos ficheros como podamos -->  el tamaño es indiferente, lo que realmente cuenta es el número de ficheros.
    • Hacer un backup en un HD externo.
    • Formatear con la opción -N de mkfs.ext4:
      • Averiguamos cuantos inodos va a generar mkfsext4: mkfs.ext4 -n /dev/sdXX
      • Multiplicamos esa cifra por X y le indicamos cuantos inodos generar: mkfs.ext4 -N AA /dev/sdXX
    • Volcar los datos

 

- Problemas con el sistema de ficheros.
Primero desmontamos el sistema de ficheros:

umount /DIR

 

Ralizamos un backup por si las moscas:

dd if=/dev/sdaX of=/diskX/backup-sdaX.img

 

Luego chequeamos el sistema de ficheros:

e2fsck -f /dev/sdaX

 

Si el superbloque está dañado e2fsck no podrá realizar la comprobación, como esta info está redundada se le puede indicar que utilize el superbloque de backup, esta info está en una localización diferente dependiendo del tamaño de bloque:

    1k --> Bloque 8193
    2k --> Bloque 16384
    4k --> Bloque 32768

También se puede obtener con:

    mke2fs -n /dev/sdaX
    dumpe2fs /dev/sdaX|grep -i superblock

e2fsck -f -b {alternative-superblock}  /dev/sdaX

 

- Borrar ficheros por inodo:
Hay ocasiones en las que el fichero tiene un nombre con carácteres especiales y es necesario borrarlo mediante inodos(también se podría hacer escapando los carácteres):

Sacamos los inodos:

stat {file-name}
ls -il {file-name}

 

Borramos:

find . -inum [inode-number] -exec rm -i {} ;

Autor: Kr0m -- 14/09/2013 19:09:27