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 y superbloques.
- Metadatos: Información útil del usuario
- Superbloques: 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:
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:
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
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:
Ralizamos un backup por si las moscas:
Luego chequeamos el sistema de ficheros:
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:
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:
ls -il {file-name}
Borramos: