Sistema de ficheros en Linux

Un sistema de ficheros consiste en una serie de métodos y estructuras de datos para que el sistema operativo pueda realizar un seguimiento de los archivos en un disco o en una partición.

Antes que una partición o un disco duro pueda ser utilizado tiene que ser inicializado creando una estructura para que los datos pueden ser escritos, este proceso se llama formatear o hacer un sistema de archivos.

El hacer un sistema de archivos se generan los inodos que almacenan información de los ficheros y directorios, a través del comando stat podemos ver la información que almacena, además de los inodos se generan otras estructuras como son las dentries que tienen la función de definir la estructura de un directorio. En el siguiente enlace https://geekland.eu/inodos-dentires-sistema-archivos/ podremos una información extensa sobre los inodos y dentries.

En la actualidad existen multitud de sistemas de archivos los más representativos en Linux son:

  • ext2: Sistema de archivos original de Linux, en la actualidad está considerado obsoleto.
  • ext3: Creado como mejor de ext2, con previsión de pérdida de datos por fallos de disco o apagones. Mejore en el inicio del sistema.
  • ext4: Última versión de los sistemas de ficheros ext, mejora la velocidad de lectura y escritura. Amplia el tamaño de los ficheros.
  • btrfs: Sistema de archivos de alto rendimiento que soporta ficheros de gran tamaño. Implementa un sistema de RAID independiente.
  • reisefs: Creado después de ext3 llamado reiserfs3, su versión 4 no es parte del núcleo de Linux .
  • XFS: Sistema de ficheros que soporta discos de alta capacidad creado por Silicon Graphics.
  • ZFS: Sistema de archivos de alto rendimiento parecido a btrfs y desarrollado por Sun Microsistems (ahora Oracle)
  • Swap: Es el sistema de archivos para la partición de intercambio de Linux.

También hay que considerar los sistemas de ficheros para DVD/CD-ROM denominados ISO9660 y su evolución UDF que permite  escritura y lectura para los DVD/CD-RW.

Creación del sistema de ficheros

Antes de que una partición o disco se puede utilizar deberemos generar el sistema de archivos. Para crearla utilizaremos el siguiente comando el comando mkfs:

mkfs [-c] [ -t fstype ] filesystem [ blocks ]

Dónde:

  • -c: Fuerza el chequeo de los bloques dañados.
  • -t fstype: Especifica el sistema de archivos.
  • Filesystem: Es la partición o dispositivo (o un directorio que está montado en un fichero de sistema) donde se creara el sistema de ficheros.

La creación de un sistema de ficheros implica el borrado de los datos. En algunos tipos de sistemas de ficheros existe comando propios para su creación como mkfs.btrfs para el sistema de archivos btrfs.

En el caso de CD/DVD utilizaríamos el comando mkisofs para los del tipo ISO9660 y el comando mkudffs para los del tipo UDF.

En el sistema extN podemos convertir de ext3 a ext4 utilizando el siguiente comando:

# tune2fs -O extents,uninit_bg,dir_index /dev/sda1

Montaje y desmontaje de sistemas de ficheros

Una vez añadido un nuevo dispositivo, para utilizarlo, este tiene que formar parte de un directorio en el árbol de directorios del sistema, esto se conoce como punto de montaje. Para realiza un punto de montaje se utiliza el comando mount.

mount [options] -t file_system_type device_file mount_point

Podemos ver los puntos de motaje actuales del sistema de varias formas:

  • Ejecutando el comando mount
  • Mostrando el contenido de /proc/mounts
  • Viendo el contenido de /etc/mtab

Para desmontar un sistema utilizaremos el comando umount

umount device_file

Cuando realizamos un punto de montaje a través del comando mount este no es persistente en el tiempo, al reiniciar del punto de montaje desaparece, para que los puntos de montaje de monten en el inicio del sistema debemos definirlos en el fichero /etc/fstab.

La estructura de líneas en el fichero fstab es la siguiente:

[dispositivo] [punto_montaje] [sistema_archivos] [opciones] [dump-freq] [pass-num]

Dónde:

  • dispositivo: Hace referencia a la partición o recurso que se va a montar.
  • punto_montaje: Es la carpeta en que se montará el dispositivo.
  • sistema_archivos: El tipo de sistema de archivos que tiene el dispositivo que se monta.
  • Opciones: Opciones del punto de montaje, generalmente se usa defaults que comprende varias opciones (todas las opciones).
  • dump-freq: Si es 0 este punto de montaje se considerara cuando se realice un dump y si es un 1 no tiene en cuenta.
  • pass-num: El orden en que la aplicación fsck revisa la partición en busca de errores.

En algunos Linux se está utilizando el sistema systemd para definir los puntos de montaje con el siguiente formato:

/etc/systemd/system/home-user-data.mount

En el caso de querer montar una imagen de disco (.iso) en un directorio utilizaremos el comando mount con el parámetro «-o loop», por ejemplo:

#mount /tmp/image.iso /media/iso -o loop

Autofs y Automounter

Automounting es el proceso por el cual los sistemas de ficheros son montados y desmontados por un servicio. Este proceso es utilizado especialmente por dispositivos del tipo usb o CDROM, así como en unidades NFS.

La implementación en Linux del Automounting (autofs) se realiza a través de un componente en el Kernel y el servicio llamado automount.

Para los sistemas que utilizan SysV disponemos del servicio en /etc/init.d/autofs que al iniciarse buscará el archivo /etc/auto.master donde se definen los puntos de montaje y el fichero de configuración del dispositivo a montar, su formato es el siguiente:

mount-point [map-type[,format]:] map [options]

Un ejemplo sería:

#Ejemplo /etc/auto.master
/mnt/floppy /etc/auto.floppy --timeout=2
/mnt/cdrom /etc/auto.cdrom --timeout=6

En los archivos de configuración de tipo “auto” es donde se configurará el dispositivo y sus características para ser montado.

# sample /etc/auto.floppy file
floppy -user,fstype=auto :/dev/fd0

En sistemas con Systemd el fichero (unidad) deberá crearse en el directorio /etc/systemd/system y deberá llamarse con el patrón de [nombre].mnt. Posteriormente la unidad deberá inicializarse con systemctl start [nombre].mnt y habilitarse para que se ejecute en el reinicio con systemctl enable [nombre].mnt

Sistema de ficheros swap

Swap es el fichero o la partición de Linux que se utiliza guardar contenido cuando no se usa y la RAM está llena. El Linux es una partición independiente. Podemos ver cómo crear o aumentar su tamaño en el siguiente post “crear o aumentar el swap en Linux”.

Podemos ver como crear el fichero en el siguiente post.

UUIDs

Es el Universal Unique IDentifier, consta de 128bits y pude utilizarse para identificar cualquier cosa. En Linux los UUIDs son utilizados para representar ficheros de sistemas específicos, es decir, los dispositivos de almacenaje y las particiones. A través del comando blkid podemos ver los UUIDs asignados:

# blkid

blkid

En algunas distribuciones de Linux podemos generar estos dígitos a través del comando uuidgen.

sync

Para mejorar el rendimiento de Linux muchas operaciones se realizan utilizando buffers almacenado la información en la RAM, el comando sync fuerza a que se ejecuten cuanto antes estas operaciones para evitar datos erróneos de lectura o escritura en los dispositivos.

Pro ejemplo cuando se utiliza una memoria USB, antes de desconectarla se debe ejecutar el comando sync para evitar la corrupción de datos.