Administración Linux: Sistemas de Archivos

Posteado en Mar 11, 2012

Publicamos un extracto de nuestro  Curso de Administración Linux, donde explicamos los distintos Sistemas de Archivos de Linux así como su Estructura de Directorios, temas básicos para empezar a conocer este sistema operativo.

El autor de este contenido es Francisco Illeras, Administrador de Sistemas en la UGR y Tutor del Curso.

Si queremos instalar Linux en un equipo con Windows y que coexista con él, debemos crear e instalarlo en una partición diferente. Debemos de tener en cuenta que el “Sistema de Archivos” que cada uno de estos sistemas operativos utiliza es diferente.

Para empezar, ¿qué es un “Sistema de Archivos”? Pues este término (también se utiliza “Sistema de Ficheros” o directamente el inglés: File System“),  hace referencia a la forma en la que la información se organizará en el disco duro (o dispositivo de almacenamiento utilizado), definiendo cómo se realizarán las operaciones de lectura/escritura, búsquedas e indexación de los datos.

El disco duro de nuestro ordenador esta confeccionado por múltiples bloques (denominados sectores) donde se almacenan los datos que manejamos. El “sistema de archivos” es el que determina como se organizan dichos bloques para confeccionar lo que conocemos bajo el nombre de “archivos” y “directorios”, manteniendo información acerca del espacio disponible en cada instante.

A lo largo de la historia, cada uno de los sistemas operativos que conocemos, ha tenido su propio “Sistemas de archivos”. Así, podemos encontrar que Microsoft trabaja con dos tipos de sistemas de archivos bien identificados: FAT (que tenía varias versiones, y que era utilizado para Microsoft Windows 95, Windows 98, y Windows XP) y NTFS (propio de Microsoft Windows NT, Windows XP, Windows Vista o el actual Windows 7). Son muchas las diferencias entre FAT y NTFS, pero las más importantes están orientadas a la posibilidad de contar con dispositivos de almacenamiento más grandes (FAT estaba limitado en tamaño de particiones) y más seguridad en el acceso a los ficheros del sistema.

Por el contrario, GNU/Linux comenzó su andadura con su sistema de archivos “Ext2”, pero éste fue sustituido por nuevas versiones que si tenían la capacidad de trabajar con grandes volúmenes de información (Terabytes) y de poder restituir rápidamente (gracias al “Journaling”) el sistema ante un fallo importante en el sistema de archivos. Posteriormente aparecieron otros sistemas de archivos nuevos y mejoras sobre el modelo existente.

Veámoslo con más detalle:

Ext2 (Sistema de archivos Extendido, versión 2)el primer sistema de archivos utilizado por GNU/Linux fue creado por Remy Card (no es del todo cierto, antes existió “Ext”, utilizado con “Minix”, pero debido a sus limitaciones y usos no suele contar como un sistema de archivos válido para las distribuciones GNU/Linux que conocemos hoy en día). Como todos los sistemas de archivos de Linux, éste también es asíncrono, es decir, no escribe inmediatamente los metadatos en el dispositivo de almacenamiento, sino que lo hace de manera periódica. Con ello consigue aprovechar los tiempos muertos de la CPU y consecuentemente, el rendimiento general del equipo. Pese a ser el primero, ya dispone de mecanismos que permiten la recuperación de la información en caso de fallo (detectando particiones desmontadas erróneamente).
Ext3 (Sistema de archivos Extendido, versión 3)es compatible con Ext2 (la única diferencia con éste es que posee un fichero adicional de registro para implementar “journaling”). De hecho, el objetivo de Ext3 era mejorar Ext2, pero manteniendo la compatibilidad con éste. Entre las principales diferencias cabe destacar que Ext3 mantiene la consistencia no solo de los metadatos (como ya hace Ext2) sino también de los propios datos. Por supuesto, la seguridad de poder recuperar los datos de nuestro sistema tiene un coste, y es que tendremos menos rendimiento y más consumo de espacio en disco.
Ext4 (Sistema de archivos Extendido, versión 4)mantiene la compatibilidad con sus antecesores, posee “journaling”, reduce considerablemente la fragmentación de archivos (mejorando con ello el rendimiento), permite dispositivos de almacenamiento de más capacidad.
ReiserFS desarrollado por la empresa Namesys, fue el primer sistema de archivos con “journal” incluido en un núcleo estándar de Linux. Pero además, implementa otra serie de ventajas no disponibles en otros sistema de archivos, como puede ser la repartición de sistemas de ficheros montados, o un esquema para reducir la fragmentación. La versión más reciente de este sistema de archivos se denomina “Reiser4”, y además de las características antes indicadas, posee mecanismos que le permiten trabajar con cientos de miles de archivos, y una estructura de archivos optimizada.
XFS creado por Silicon Graphics Inc., se trata de un sistema de archivos con “journaling” que inicialmente funcionaba sobre la implementación IRIX de UNIX, pero que posteriormente se liberó como código abierto. Destaca por su alta escalabilidad y fiabilidad (admite redireccionamiento de 64 bits, implementación paralelizada), y sobre todo porque es capaz de trabajar con archivos muy grandes.
JFS desarrollado por IBM, inicialmente fue creado para servidores de alto rendimiento y equipos de altas prestaciones. Posee un eficiente “journaling” que le permite trabajar cómodamente con archivos de gran tamaño como con otros más pequeños. Las particiones JFS pueden ser dinámicamente redimensionadas (como ya hacía RaiserFS), pero no pueden ser comprimidas (algo que si hacen RaiserFS y XFS).

Existen más sistemas de archivos utilizados en GNU/Linux, pero no los trataremos aquí debido a que se utilizan con menos frecuencia.

Journaling

Seguro que no le ha pasado desapercibido el término “Journaling” o “journal” a lo largo de los párrafos anteriores, y es que se trata de la principal característica que identifica los sistemas operativos modernos. El “Journaling” (también conocido como “registro por diario”) es un mecanismo que almacenará las transacciones (operaciones de lectura y escritura de archivos) que se realizan en el sistema, y que permitirá la recuperación de los datos en caso de fallo grave.

Su funcionamiento, a grandes rasgos, sería el siguiente: cuando se desea guardar un archivo en el sistema de ficheros, se anotará esta acción en el “journal” (en ocasiones también se le denomina “bitácora”) pasando a continuación a realizar realmente la operación de escritura en el disco duro del equipo. Si la operación de escritura en disco duro finaliza con éxito entonces se elimina esa operación del “journal” (“diario”). Pero, si antes de finalizar la operación de escritura en disco se produjese un fallo (por ejemplo, un corte eléctrico) entonces el “journal”, que aún mantiene la información correspondiente al fichero, podría recuperarlo para el sistema rápidamente en el siguiente inicio.

Estructura de Directorios en Linux

Pero no solo el sistema de archivos de nuestro sistema operativo Linux es importante para conocer aspectos que afectan al rendimiento de nuestro equipo, también es importante que conozcamos la forma en la que esta estructurado el sistema de directorios.

El estándar utilizado por GNU/Linux para organizar la información se denomina FHS (Filesystem Hierarchy Standard), y éste sistema se encarga de organizar la información de forma jerárquica.

Sistemas de Archivos en Linux

Ilustración: Jerarquía estándar del sistema de archivos.

Partiendo de un “raiz” encontraremos los siguientes directorios:

/bin almacena las aplicaciones (comandos) básicas del sistema.
/boot aquí se encontrarán los archivos necesarios para el inicio del sistema, así como los correspondientes al cargador de arranque.
/dev cada uno de los archivos representa a un dispositivo del sistema.
/etc es el directorio donde se encontrarán la mayoría de los archivos de configuración del sistema y de otras aplicaciones importantes.
/home donde se encontrarán los directorios personales de los usuarios del sistema.
/lib bibliotecas compartidas necesarias para la ejecución del sistema.
/mnt se trata del directorio en el que se solían ‘montar’ los distintos dispositivos de almacenamiento (discos duros externos, pen-drive), pero que ahora ha quedado obsoleto porque se utiliza el nuevo directorio “/media” para dicha función.
/proc mantiene ficheros que almacenan el estado (procesos, dispositivos) del sistema.
/root es el directorio personal del administrador del sistema.
/sbin comandos de administración del sistema.
/tmp carpeta donde el sistema almacena información temporal.
/usr ubicación que normalmente se dedica para instalar las aplicaciones de usuario.
/var su contenido no se explica brevemente, ya que en él podremos encontrar los archivos de registro del sistema, archivos temporales del servicio de correo, o el directorio de trabajo del servidor de páginas web.

El estándar FHS posee más detalles relacionados con estos directorios, como por ejemplo:

  • Se recomienda que directorios como ‘/tmp’, ‘/var’ y ‘/home’ posean una partición propia, ya que si se produce un crecimiento desmesurado de los datos almacenados en ellas no afectarán al resto del sistema.
  • También se aconseja que el directorio ‘/home’ se encuentre en una partición aparte para que en el caso de una actualización del sistema, ésta pueda mantenerse inalterada.
  • Se considere al directorio ‘/etc’ como el más importante (junto con el directorio ‘/home’ porque almacena los datos de usuario), por lo que se aconsejan copias de seguridad del mismo.

Otra característica que observaremos en cuanto comencemos a trabajar con Linux es que todo en este sistema operativo es un archivo: el hardware, una partición o los ficheros de datos.