LPIC-1 Tema 104.2: mantener la integridad de los sistemas de ficheros

Nueva entrada de la serie LPIC-1, ahora para tratar el Tema 104.2. En este punto de la temática de las certificaciones Linux se evalúan las competencias básicas del futuro administrador de sistemas en cuanto al mantenimiento de un sistema de archivos estándar (FS). Además, también deberá saber cómo trabajar con filesystems con journaling (véase registro por diario / transacciones) como característica especial.

En este sentido se engloban tareas tan básicas como verificar la integridad de un FS, monitorear el espacio usado y libre de las particiones, trabajar con inodes, reparar posibles problemas simples del sistema de ficheros, etc. Entre las herramientas destacadas para todo esto están df, du, fsck, mke2fs, tune2fs, o las propias de XFS.

Para saber más sobre estos temas, te aconsejo ver otros artículos anteriores donde expliqué otros conceptos relacionados:

¿Qué es un inode?

Es importante que sepas lo que es un inode o inodo. Es un concepto de Unix que tiene mucho que ver con los FS. Con deberías saber, el FS provee de estructura a los datos que maneja el sistema operativo. Para el kernel, los datos almacenados en los medios solo son chorros de bits, pero necesitan se representados de alguna forma en los medios de almacenamiento para que el usuario y otras herramientas puedan interpretarlos adecuadamente.

Por ejemplo, para que un programa determinado use el número mágico almacenado en el encabezado de un fichero para saber cómo lo debe tratar o qué formato es (recuerda que en *nix no se usa la extensión para identificarlos, sino estos números mágicos). Además, los *nix aportan mayor flexibilidad haciendo que el SO sea totalmente ajeno a los ficheros, por lo que no pondrá ciertos límites.

Te recuerdo también que existen varios tipos de ficheros: ficheros regulares o normales, y los directorios. Éstos últimos son ficheros especiales que pueden implementar una estructura dentro del sistema de archivos.

Otra cosa que aportan los FS son los nombres que se le dan a cada uno de esos ficheros para identificarlos.

El FS también es capaz de proveer de unos mecanismos para que se puedan realizar operaciones sobre los ficheros. Como crearlos, eliminarlos, abrirlos, cerrarlos, acceso (lectura y/o escritura), asignar atributos, modos, y renombrarlos. También están los metadatos, que necesitan de un soporte por parte del FS para ser asignados a cada fichero.

Y por último, tras este pequeño resumen, el tema que más me interesa: el acceso. Y es aquí donde hay que hablar del concepto la asignación (cómo se asigna espacio dentro del metro del medio de almacenamiento). Y un método relacionado con ésto son los famosos inodos o inodes.

La asignación por i-nodo la creó el Dr.  Dennis Ritchie. La i proviene de índice, ya que cada fichero contiene una pequeña tabla con información de dónde se encuentra cada una de las partes (bytes) que componen a ese fichero. Por ejemplo, cuando se almacena una imagen en el disco duro, no se encuentra junta en un mismo lugar del medio de almacenamiento, sino que puede estar fragmentada en varias partes.

Cuando se quieres acceder a ficho archivo, solo se necesita leer esta pequeña tabla para saber dónde se encuentran las partes almacenadas. Eso evita que se tenga que cargar una gran tabla que ocupa demasiada memoria RAM de forma permanente como ocurre en otros sistemas.

Para que eso sea posible, la estructura del inodo debe tener:

  • Un ID (identificador) del dispositivo de almacenamiento donde se encuentra el FS.
  • Un número identificativo del fichero dentro del FS.
  • El tamaño en bytes que ocupa.
  • El ID de usuario que lo creó.
  • El ID del grupo al que pertenece.
  • El modo de acceso (permisos).
  • Marcas de tiempo (fecha de creación, modificación…).
  • Número de enlaces asociados.
  • Estructura de punteros para direccionar hacia los bloques que contienen la información.
  • 12 punteros directos (para direcciones de memoria donde están las partes)
  • +1 puntero extra llamado de indirección (apunta a otro bloque con más punteros).
  • +1 puntero de doble indirección (apunta a un bloque de punteros que a su vez apuntan a otro bloque de punteros).
  • +1 puntero de indirección triple (apunta a un bloque de punteros que a su vez apuntan a otro bloque de punteros y éstos a otro bloque de punteros).

Estas entradas de indirección se usan cuando los archivos tienen un tamaño grande. Para los pequeños no son necesarios, ya que con los punteros iniciales hay suficiente (las que están almacenadas en el propio inodo). Por ejemplo, si tienes un FS con 12 punteros directos, y tres entradas de indirección que apunta a 256 direcciones, una segunda de indirección doble a otras 256 direcciones, y éstas a su vez apuntan a otras 256 direcciones, además de la indirección triple con 256 direcciones que apuntan a otras 256 y a su vez a otras 256 direcciones de bloques… suponiendo un tamaño de bloque de 4096 bytes, se podrían direccionar unos 68 GB para un archivo único.

Cuando en Linux creas enlaces duros, lo que realmente estás haciendo es asociar varios ficheros al mismo inodo. En los enlaces simbólicos o blandos, no es así, y se depende del original.

Por último, no quiero olvidar lo que es el superbloque (superblock). Otro concepto vital para los entornos UNIX. Sería el equivalente al MFT de Windows NT.  Este fichero contiene el tipo de sistema de archivos, su tamaño, tamaño de bloques, estado, información de estructuras de metadatos, etc. Y lo más impotante, también contiene en los *nix la cantidad de inodes libres, direcciones de bloques disponibles, etc. Por tanto, es el sector más crítico de un FS. Por eso se suelen hacer varias copias de él por cada FS.

Herramientas básicas

Para verificar la integridad de un FS, repararlo en caso de ser necesario, monitorear espacio e inodes, así como realizar otras consultas, puedes usar una serie de herramientas. Algunas de ellas, como fsck, ya las he tratado en otros artículos anteriores de la serie LPIC-1, así que me las saltaré (por ejemplo fsck y similares como e2fsck para verificar, mke2fs para crear, etc.). Aquí muestro esas otras que no he introducido aún…

Otras herramientas

Recuerda que puedes usar la opción -i de ls para obtener información de los inodes de la lista de ficheros:

#Información de la lista de inodes del directorio actual
ls -li

#De un fichero específico
ls -i documento.txt

También find para localizarlo con la opción -inum seguida del número de inode:

#Localizar el fichero al que corresponde el inodo número 523577
sudo find / -inum 523577

Con el comando stat también se puede obtener información de un fichero, como el nombre, su tamaño, bloques ocupados, tipo, información física del dispositivo que lo contiene, inode, propietario, marcas de tiempo, etc.

#Obtener información de un fichero
stat /home/isaac/ejemlo.sh

#De la estructura de un directorio
stat /

df

Sus siglas provienen de disk free, y es una herramienta para consultar el espacio total de un medio de almacenamiento, el espacio usado y el disponible, bloques, entre otros datos.

#Consultar información sobre los FS del sistema
df

#Si lo usas con la opción -h se muestra la información algo más entendible para los humanos
df -h

#Para información más detallada
df -a

#Información sobre los inodes en vez de sobre los bloques
df -i

#Por supuesto puedes también usarlo para una partición concreta e incluso para un fichero concreto
df -h /home/isaac/prueba.txt

#Más información y opciones
man df
df --help

du

El comando du (disk usage) mostrará el espacio usado de un fichero dentro de un FS. Por ejemplo:

#Muestra el uso de todos los ficheros del directorio actual
du

#Para mostrar toda la información
du -a

#Más amigable para los humanos
du -h

#O de un fichero o directorio concreto
du -a -h /home

#Muestra el total usado 
du -c /home

#Para mostrar información del número de inodos utilizados por un archivo o por todos *
du -sh --inodes *

#Más información y opciones
man du

tune2fs

Es una herramienta usada por los administradores para modificar algunas características de los FS de tipo ext2, ext3, y ext4.

#Para saber todas las características de las que dispones
tune2fs -l

#Ver información sobre un FS
tune2fs -l /dev/sda1

#Puedes combinarlo con pipes para filtrar solo lo que quieres, como el nombre del volumen
tune2fs -l /dev/sda1 | grep volume

#Modificar el nombre del volumen
tune2fs -L Nuevo_nombre /dev/sda4

#Mostrar intervalos y recuendo de inodes
sudo tune2fs -l /dev/sda1 |grep -i invertal
sudo tune2fs -l /dev/sda1 |grep -i count

#Desactivar el chequeo durante el arranque para un FS
tune2fs -c -1 /dev/sda9
tune2fs -i -1 /dev/sda9

#Modificar los parámetros para que se haga solo el chequeo tras 40 montajes o un periodo de 1 mese
tune2fs -c 40 -i 1m /dev/sda8

#Más información 
man tune2fs

xfs_repair

Aunque XFS no son los sistemas más usados, sí que se incluyen las herramientas en LPI, así que comentaré algo sobre ellos. En este caso, sirve para reparar sectores corruptos o daños en un XFS. Recuerda que para reparar un FS debes desmontarlo antes, no puedes trabajar con él montado…

#Solo escanea, sin modificar nada
xfs_repair -n /dev/sda4

#Reparar un FS montado en modo solo lectura. Para cuando debe estar montado para su reparación porque es el root y estás en single-mode (justo después debe reiniciarse)
xfs_repair -d /
reboot

#Pone a cero el registro incluso cuando está sucio (contiene cambios de metadatos). Esto se debe usar con cuidado, porque podría generar la pérdida de datos.
xfs_repair -L  /dev/sdb1

#Usa con percaución esta herramienta y sus opciones. Para más información
man xfs_repair

xfs_fsr

En este caso, xfs_fsr permite reorganizar el XFS. Con ello se puede mejorar la organización de los filesystems montados y que son de este formato. El algoritmo de reorganización operará en un fichero al mismo tiempo… Es decir, lo que hace es desfragmentar el disco o partición.

#Desfragmentar una unidad con el modo verbose activo
xfs_fsr -v /dev/sda2

#Puedes usar la opción -t  para especificar el tiempo que se tomará en reorganizar en segundos, o -m para especificar la lista del sistema de archivos que por defecto será /etc/mtab.

#Para más información
man xfs_fsr

xfs_db

Por último, xfs_db es algo más avanzada, y sirve para depuración de un XFS. Puede analizar un FS de este formato en marcha, y en raras ocasiones modificar algunos parámetros. No uses esta herramienta si no estás seguro de lo que haces…

Sería similar a debugfs para otros formatos…

#Inicia el modo interactivo para operar con los comandos correspondientes en el nuevo prompt que se inicia con, por ejemplo:
xfs_db /dev/sdc3

#Para más información
man xfs_db

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar