Los discos y el sistema de archivos
Representación de los discos
Cada disco conocido por el sistema está asociado con un archivo especial en modo bloque. Lo mismo ocurre con las partituras.
1. Nomenclatura
En función del tipo de controlador e interfaz a los que se conectan los discos, Linux les asocia archivos especiales diferentes. Los nombres de estos archivos especiales dependen del tipo del controlador de disco.
a. Disco IDE
Este tipo de unidad se ha vuelto poco común, ya que el estándar SATA ha reemplazado al estándar IDE durante muchos años. Los discos conectados a controladores IDE (también llamados PATA (Parallel ATA) o ATAPI) están asociados a archivos especiales cuyo nombre es hdx, en el que x es una letra minúscula, dependiendo del controlador y la posición del disco en relación con su controlador:
-
hda: IDE0, Principal
-
hdb: IDE0, Secundario
-
hdc: IDE1, Principal
-
hdd: IDE1, Secundario
-
etc.
No hay límite en cuanto al número de controladores IDE, más allá del número de los puertos de extensión de la máquina (slots PCI). Existen muchas tarjetas adicionales y convertidores que permiten leer antiguos discos IDE.
Linux entiende que los lectores de CD-Rom, DVD y grabadores de tipo IDE/ATAPI son discos IDE y respetan la nomenclatura citada.
El núcleo de Linux utiliza por defecto un API llamado libata para acceder al conjunto de los discos IDE, SCSI, USB, Firewire...
Operaciones de bajo nivel
Hay una variedad de comandos de Linux que se pueden usar para administrar dispositivos de disco a nivel de hardware, a través de su controlador.
Algunos de estos comandos o sus opciones permiten cambiar la configuración de un disco, por lo que se deben usar con precaución.
Información del disco
El comando hdparm permite efectuar un gran número de operaciones directamente en los discos duros gestionados por la librería libata, es decir, los discos de tipo SATA, ATA (IDE) y SAS.
El comando sdparm permite el mismo tipo de operaciones para los discos SCSI.
Las opciones -i o -I proporcionan la información de las características de un disco. La primera proporciona información del kernel, obtenido en el momento del arranque, la segunda consulta directamente el controlador de disco y proporciona información más detallada.
Ejemplo
# hdparm -I /dev/sda
/dev/sda:
/dev/sda:
ATA device, with non-removable media
Model Number: ST9160821AS
Serial Number: 5MA3G4KT
Firmware Revision: 3.BHD
Standards:
Supported:...
Elegir un sistema de archivos
El árbol global del sistema de archivos Linux consta de uno o más sistemas de archivos independientes.
Un sistema de archivos se utiliza para estructurar un espacio de almacenamiento, en forma de archivos y directorios. Esta organización interna del espacio de almacenamiento se hace accesible a las aplicaciones, en forma de directorios y archivos, mediante la operación de montaje en un directorio del árbol global.
Un sistema de archivos desmontado se ve como un conjunto no estructurado de bytes, al que se accede como a un todo, sin la posibilidad de usar su organización en directorios y archivos.
Hay diferentes tipos de sistemas de archivos, que se pueden combinar entre sí dentro del árbol general del sistema de archivos de Linux.
1. Fundamentos
Aunque los principios básicos suelen ser los mismos en los distintos tipos de sistemas de archivos Linux, las implementaciones y la organización lógica de los datos en los espacios de almacenamiento varían mucho.
Los sistemas de archivos Linux se ajustan a los estándares POSIX, pero pueden ofrecer extensiones (ACL, selinux, etc.).
Un sistema de archivos asocia uno o más nombres a un conjunto de datos y gestiona el acceso a su contenido: crear, modificar, eliminar, mover, abrir, leer, escribir, cerrar. Cada tipo de sistema de archivos está soportado por un controlador específico, que se comunica con el kernel para permitir que las aplicaciones accedan a los elementos contenidos en el espacio de almacenamiento. El driver y el kernel se encargan de las operaciones necesarias: mecanismos de protección de acceso (permisos, propietarios), accesos simultáneos, etc.
a. Representación
Además de la organización y el almacenamiento de la información, el sistema de archivos debe facilitar al usuario una visión estructurada de los datos, que permite distinguirlos, encontrarlos, tratarlos y trabajar con ellos en forma de archivos dentro de una estructura de directorios con los comandos asociados. Asimismo, cada sistema de archivos debe proporcionar lo necesario para que los programas puedan acceder a él.
b. Los metadatos
Un archivo se describe mediante propiedades denominadas metadatos. En los sistemas de archivos Linux, esta información se almacena en una estructura llamada inodo. Los datos del archivo se almacenan...
Particionamiento
El particionado consiste en una división lógica del disco. Se fracciona el disco físico, real, en varios discos virtuales: las particiones. Se ve cada partición como un disco independiente que contiene su propio sistema de archivos.
1. Los métodos de particionamiento
Existen dos métodos de particionamiento: MBR, previsto para los equipos basados en BIOS, y GPT, para los equipos basados en UEFI. Estas últimas son también compatibles con el particionado BIOS, pero no al revés.
2. Particionado MBR (Master Boot Record)
El método de particionado MBR (Master Boot Record) se llama de esta forma porque la partición principal se ubica en este sector específico del disco.
a. MBR y BIOS
El particionamiento MBR se remonta a principios de la década de 1980, cuando las PC se ejecutaban en modo de 16 bits, y ha sido modificado para poder manejar 32 bits. La posición de un bloque se codifica en 32 bits y el tamaño de un bloque es de 512 bytes. Por lo tanto, el tamaño máximo de un disco es de 2 TB (2 elevado a la potencia de 32 x 512 bytes).
Si usted compra un disco duro de más de 2 TB, debe disponer de un equipo compatible y utilizar el modo de particionado GPT.
Este método de particionado sigue siendo muy utilizado, pero la disponibilidad de equipos basados en UEFI que disponen de discos de una capacidad superiores a 2 TB lo dejarán poco a poco obsoleto.
Aunque los medios físicos están limitados a 2 TB, es posible extender un sistema de archivos a través de varios discos y, por lo tanto, permitir que supere este límite.
b. MBR
El primer sector de un disco es el MBR, Master Boot Record o zona de arranque. Con un tamaño de 512 bytes, contiene en sus primeros 446 bytes (un programa) de arranque destinado a ejecutar el sistema operativo desde la partición activa, o para ser lanzado desde el gestor de arranque (bootloader). Los 6 últimos bytes de este bloque, opcionales, son usados para firmar el disco con 4 bytes. A continuación, 2 bytes nulos, y más adelante, los 64 bytes que contienen la tabla de las cuatro particiones primarias. Los dos últimos bytes contienen la firma 0xAA55.
c. Las particiones
Una partición es una división lógica de un disco. Existen tres tipos:
-
Las particiones primarias, cuatro como máximo...
Manejar los sistemas de archivos
El árbol global de directorios y archivos en un sistema Linux consta de uno o más sistemas de archivos, almacenados en uno o más espacios de almacenamiento (discos, particiones, volúmenes lógicos LVM). Se utilizan diferentes comandos para administrar estos sistemas de archivos (crear, modificar, eliminar), que pueden ser de diferentes tipos.
1. Definiciones básicas
Un sistema de archivos gestiona bloques de datos en un espacio de almacenamiento. Organiza los datos en archivos, que se almacenan en una estructura de árbol estructurada en directorios. Las estructuras se utilizan para administrar los atributos generales del espacio de almacenamiento del sistema de archivos.
El espacio de almacenamiento puede ser físico (disco, partición) o lógico (volumen lógico LVM). También hay sistemas de archivos virtuales, que se administran en RAM.
a. Bloque
El bloque es la unidad básica, atómica, de almacenamiento del sistema de archivos. Un archivo ocupa siempre un número entero de bloques. Así, si el tamaño de un archivo es de un byte y el bloque tiene un tamaño de 4096 bytes, 4095 bytes son inútiles.
Algunos comandos muestran el tamaño de los archivos en bloques, como du, df o find. El tamaño de un bloque es de 512 bytes para algunos comandos, y 1024 para otros.
b. Superbloque
Cada sistema de archivos dispone de al menos un superbloque (superblock). Un superbloque es una zona de metadatos que contiene información sobre el sistema de archivos y su estado:
-
Tipo de sistema de archivos
-
Tamaño
-
Estado
-
Posición de otras zonas de metadatos (otros superbloques, tabla de inodos, etc.).
Linux intenta primero leer el superbloque primario, el primero del disco. Puede ocurrir que este último esté corrupto. En tal caso, ya no se puede acceder a los datos del disco. Un sistema de archivos de Linux dispone de copias (backups) del superbloque en varios sitios del disco. Como las escrituras en estos diversos superbloques son síncronas, son todos idénticos, y pueden permitir acceder a los elementos del sistema de archivos.
c. Tabla de inodos
Un inodo (index node) es un nodo índice. Es una estructura de datos que contiene los datos de estado de un archivo llamados atributos o metadatos. Cada archivo tiene un número de inodo...
Acceder a los sistemas de archivos
Las aplicaciones solo pueden acceder a directorios y archivos en un sistema de archivos si el sistema de archivos está "montado" en el árbol global del sistema Linux. La operación de montaje puede ser manual o automática.
1. El comando mount
El comando mount permite acceder al árbol de directorios y de archivos de un sistema de archivos, ajustándolo a un directorio existente en el árbol global.
Sintaxis
mount [-t tipofs|-a] [-o opciones] [FicEspecial|-L etiqueta|-U UUID]
[punto_de_montaje]
Sin opciones ni argumentos, el comando muestra información sobre los sistemas de archivos montados.
Con argumentos que hacen referencia al sistema de archivos y el punto de montaje, adjunta el directorio raíz del sistema de archivos especificado al directorio del punto de montaje (mountpoint) del árbol global. Si falta uno de los dos argumentos, el comando lee el archivo /etc/fstab y busca una línea que contenga el argumento proporcionado, para montarlo con la información proporcionada.
El sistema de archivos que se va a montar se puede especificar mediante el archivo especial asociado, por su etiqueta (opción -L) o por su UUID (opción -U).
Si el tipo de sistema de archivos no está especificado por la opción -t, el comando lo determina a partir de los atributos del sistema de archivos.
Si antes había elementos en el punto de montaje, se ocultan para el montaje y, por lo tanto, son inaccesibles. Volverán a ser accesibles si se desmonta el sistema de archivos.
La opción -a permite montar todos los sistemas de archivos declarados en el archivo /etc/fstab de modo montaje automático.
Ejemplo
Se ha creado un sistema de archivos de tipo ext4 en la partición 1 del segundo disco y se monta en el directorio existente /mnt/DATA:
# mount -t ext4 /dev/sdb1 /mnt/DATA
Lista de sistemas de archivos montados para discos sd*:
# mount | grep '/dev/sd[a-z]'
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,
logbufs=8,logbsize=32k,noquota)
/dev/sdb1 on /mnt/DATA type ext4 (rw,relatime,seclabel)
También se puede acceder a la información sobre los sistemas de archivos montados a través del archivo dinámico /etc/mtab.
Ejemplo
# grep '/dev/sd[a-z]' /etc/mtab
/dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,logbufs=8, ...
Controlar el sistema de archivos
Es importante supervisar el uso del sistema de archivos. Al tener un tamaño fijo, pueden saturarse e impedir que las aplicaciones o el propio sistema funcionen correctamente.
Por lo general, los tipos de sistemas de archivos más recientes se pueden ampliar, especialmente si utilizan volúmenes lógicos LVM.
Un sistema de archivos puede estar dañado, por lo que es necesario comprobarlo y posiblemente repararlo.
1. Seguimiento del espacio en disco por sistema de archivos
El comando df (disk filesystem) permite obtener la información de ocupación de cada sistema de archivos montado. Sin argumento, facilita información sobre todos los sistemas de archivos. Si utiliza como argumento el identificador de un sistema de archivos montado, un punto de montaje o un directorio, da la información del sistema de archivos correspondiente.
Ejemplo
# df
Sis. de fich. 1K-bloques Ocupado Disponible Capacidad Montado en
/dev/mapper/fedora-root 15718400 6504544 9213856 42% /
/dev/sda1 1038336 229732 808604 23% /boot
/dev/sdb1 10051792 36888 9484576 1% /mnt/DATA
La unidad predeterminada es kilobytes (opción predeterminada -k). La opción -m muestra los resultados en MB.
Ejemplo
# df -m /mnt/DATA
Sis. de fich. 1M-bloques Ocupado Disponible Capacidad Montado en
/dev/sdb1 9817 37 9263 1% /mnt/DATA
La opción -i permite obtener...
La swap
Si el sistema operativo ya no tiene suficiente RAM, puede descargar temporalmente páginas de la memoria física a una o más zonas de intercambio en el disco, lo que constituye el espacio de intercambio. Este mecanismo permite utilizar más memoria de la que realmente tiene el ordenador, en detrimento del rendimiento. Si un proceso necesita páginas de memoria almacenadas en el área de intercambio o swap, el sistema las vuelve a cargar automáticamente en la RAM para que vuelvan a ser accesibles.
1. Tamaño óptimo del espacio de swap
No hay reglas estrictas para establecer el tamaño de la swap. Sin embargo, las reglas corrientes siguientes son válidas en la mayoría de casos:
-
Si la RAM tiene menos de 1 GB, la swap debe ser el doble que la RAM.
-
Si la RAM tiene entre 1 y 4 GB, la swap debe tener el tamaño de la RAM.
-
Si la RAM supera los 4 GB, la swap debe tener 4 GB más o menos, según el uso de los procesos.
Si el sistema "intercambia" con frecuencia y todos los indicadores muestran que el espacio de memoria disponible es bajo, se debe agregar memoria física.
Algunos administradores de sistemas optan por limitar el espacio de swap o incluso desactivarlo. Del mismo modo, algunos proveedores de software desaconsejan la implementación de swaps como parte del uso de sus productos (openshift, kubernetes, gestión de contenedores).
2. Crear una partición de swap
Lo más común es que el espacio de swap se componga de una partición (o volumen lógico LVM).
La partición se debe crear con el tipo 0x82 (o 0x8200 para GPT).
El comando mkswap crea un sistema de archivos de swap en el volumen de destino.
Ejemplo
# mkswap /dev/sdb1
Configurando espacio de intercambio versión 1, tamaño = 32 GiB
(34358685696 bytes)
sin etiqueta, UUID=bbaeeae6-fbef-4887-b2d5-32701fc13a44
La opción -L del comando permite asignar una etiqueta a la partición de swap.
Para optimizar el rendimiento del swap, es posible...
Los permisos de acceso
Una de las funciones del sistema operativo es controlar el acceso a los datos. Linux implementa un mecanismo para administrar los permisos de acceso a archivos y directorios, basado en cuentas de usuario y grupos de usuarios.
1. Derechos básicos
Los permisos de acceso a un archivo o directorio se especifican para tres tipos de acceso: lectura, escritura y ejecución o acceso, concedidos o no concedidos a tres categorías de usuarios: el propietario, el grupo propietario y otros.
Cuando un proceso solicita usar un archivo o directorio, el kernel determina a qué categoría pertenece en relación con el recurso y controla si el tipo de acceso solicitado está permitido para dicha categoría.
Una excepción a este mecanismo es la cuenta de administrador (raíz, UID 0), que tiene acceso completo a todos los archivos y directorios.
a. Permisos y cuenta de usuario
Cuando el administrador crea un usuario, le asigna un UID (User Identifier) único. Las cuentas de los usuarios quedan definidas en el archivo /etc/passwd. Del mismo modo, cada usuario se integra en al menos un grupo (su grupo primario). Todos estos tienen un identificador único, el GID (Group Identifier), y están definidos en el archivo /etc/group.
El nombre de la cuenta de usuario solo se usa para obtener sus atributos en el archivo /etc/passwd. El sistema solo usa el UID y el GID para administrar el control del acceso.
El comando id se utiliza para obtener la información de la cuenta de usuario actual.
Ejemplo
$ id
uid=1000(seb) gid=100(users) grupos=7(lp),16(dialout),33(video),
100(users)
Propietario y grupo del archivo
Cada archivo físico tiene un UID y un GID asociados que definen su propietario y grupo de propietarios. Estos atributos se definen en el inodo y, por lo tanto, se aplican a todos los enlaces físicos que apuntan a él.
El control de los permisos de acceso para los enlaces simbólicos se basa en los permisos de acceso del archivo de destino, es decir, su inodo.
Determinación de la categoría del proceso
Cuando un proceso solicita acceso a un archivo o directorio, proporciona su UID, así como los GID de todos los grupos a los que pertenece dicho UID. A continuación, el kernel determina a qué categoría pertenece el proceso en relación con el archivo, en el siguiente orden:...