Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. LINUX
  3. Los discos y el sistema de archivos
Extrait - LINUX Dominar la administración del sistema (5ª edición)
Extractos del libro
LINUX Dominar la administración del sistema (5ª edición)
1 opinión
Volver a la página de compra del libro

Los discos y el sistema de archivos

Representación de los discos

Nota previa: las unidades de medida de almacenamiento usadas en este capítulo y en todo el libro usan la representación tradicional, según la regla 1KB = 1024 bytes (210), a no ser que se indique lo contrario.

1. Nomenclatura

Este apartado realiza un repaso a los puntos ya vistos en el capítulo Presentación de Linux. En función del tipo de controlador e interfaz en los cuales se conectan los discos, Linux da diferentes nombres a los archivos especiales que representan discos duros.

Cada disco y cada partición está representado por un archivo especial de tipo bloque.

a. IDE

Se conserva esta sección por razones históricas, la norma SATA ha reemplazado la norma IDE sobre casi todos los ordenadores de escritorio y portátiles desde hace diez años. Los discos con controladores IDE (también llamados PATA, Parallel Ata o ATAPI) se llaman hdX:

  • hda: IDE0, Master

  • hdb: IDE0, Slave

  • hdc: IDE1, Master

  • hdd: IDE1, Slave

  • etc.

Contrariamente a lo que se cree, no hay límite 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. A partir de cuatro discos o lectores, los archivos se llaman hde, hdf, hdg, etc.

Linux entiende que los lectores de CD-Rom, DVD y grabadores...

Operaciones de bajo nivel

1. Información

El comando hdparm permite efectuar un gran número de operaciones directamente en los discos duros gestionados por la librería libata, o sea todos los discos SATA, ATA (IDE) y SAS. El comando sdparm puede hacer más o menos lo mismo para los discos SCSI. Observe que, a pesar de que los nombres de periféricos de la libata sean idénticos a los del SCSI, es más que probable que muchas opciones de configuración de hdparm no funcionen en discos SCSI. Lo mismo vale para sdparm con los discos SATA o IDE. Los ejemplos que damos a continuación se basan en hdparm.

Para obtener información completa relativa a un disco, utilice los parámetros -i o -I. El primero recupera la información, desde el núcleo, que se obtiene en el momento del arranque. El segundo interroga directamente al disco. Es preferible -I porque da una información muy detallada.

# hdparm -I /dev/sda  
 
/dev/sda:  
 
ATA device, with non-removable media  
    Model Number:       VBOX HARDDISK  
    Serial Number:      VB91a2e953-933cdc65  
    Firmware Revision:  1.0  
Standards:  
    Used: ATA/ATAPI-6 published, ANSI INCITS 361-2002  
    Supported: 6 5 4  
Configuration:  
    Logical...

Elegir un sistema de archivos

1. Fundamentos

a. Definición de sistema de archivos

La acción de "formatear" un disco, un pendrive o cualquier soporte de datos consiste únicamente en crear en un soporte de memoria secundaria (volumen de almacenamiento) la organización lógica que permite colocar datos en él. La palabra "formateo" en Linux se utiliza para describir la creación de un sistema de archivos. Hablamos de un sistema de archivos que representa a la vez la organización lógica de los soportes tanto a un nivel inferior como a un nivel de usuario.

No se escribe la información en los discos de cualquier manera. Se requiere una mínima organización para colocar en ellos tanto la información relativa a los archivos como los datos almacenados. El sistema de archivos (y los controladores asociados) es el que define esta organización. Si bien los fundamentos organizativos suelen ser los mismos en los diferentes sistemas de archivos presentes soportados por Linux, las implementaciones y organizaciones lógicas de los datos en el disco varían bastante de uno a otro. De esta manera, no hay un único tipo de sistema de archivos, sino varios, puestos a disposición del usuario, el administrador o el ingeniero.

Todos los sistemas de archivos de Linux deben respetar las normas POSIX. Como POSIX define un conjunto de reglas básico, un sistema de archivos puede ir más lejos de esta norma ofreciendo extensiones. La mayoría de estas conciernen a elementos de seguridad, como las ACL o selinux.

El principio básico es asociar un nombre de archivo con su contenido y autorizar su acceso: creación, modificación, supresión, desplazamiento, apertura, lectura, escritura, cierre. Conforme a este principio, el sistema de archivos debe gestionar lo que deriva de ello: mecanismos de protección de los accesos (permisos, propietarios), accesos concurrentes, etc.

b. Representación

Además de la organización y el almacenamiento de la información y datos en los archivos, el sistema de archivos debe facilitar al usuario una visión estructurada de sus 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...

Particionado

1. Particionado lógico

En este manual consideraremos soporte de almacenamiento a cualquiera de tipo magnético o de memoria como, por ejemplo, discos duros, SSD, tarjeta de memoria, etc. Es decir, todo lo que se pueda parecer a un disco duro según la visión clásica: un espacio de datos que se puede seccionar en varias entidades lógicas e independientes y que dispone cada una de su propio sistema de archivos.

Se puede considerar un disco como una larga banda de espacio de almacenamiento dividida en casillas que pueden contener una cantidad determinada de información. Se puede utilizar el disco tal cual, como espacio de almacenamiento. Nada impide crear un sistema de archivos en un disco sin pasar por la etapa de particionado. Sin embargo, es importante dar una organización lógica a este espacio y a los sistemas de archivos que va a contener, aunque se trate sólo de separar los datos (los archivos de datos) de los tratamientos (los programas que los utilizan y el sistema).

El particionado consiste en una división lógica del disco. Se fracciona el disco físico, real, en varios discos virtuales, lógicos: las particiones. Se ve cada partición como un disco independiente que contiene su propio sistema de archivos.

Existen dos métodos de particionado: 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

a. MBR y BIOS

El método de particionado MBR se llama de esta forma porque la partición principal se ubica en este sector específico del disco. El particionado MBR data de los años 1980, cuando los PC trabajaban en 16 bits, y se le han hecho cuatro apaños, para trabajar en 32 bits. La posición de un bloque se codifica en 32 bits, y el tamaño de un bloque es de 512 bytes. Podemos entonces calcular el tamaño máximo de un disco: 232*512 bytes: 2 TB. No es posible emplear este método con discos de más de 2 TB. No es posible emplear este método con discos de más de 2 TB. Mucha gente piensa que ha sido estafada al comprar los discos de 3 TB. Pero no, simplemente es que no han prestado atención a los temas de compatibilidad.

Si usted compra un disco duro de más...

Manejar los sistemas de archivos

1. Definición básica

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 en el que está tiene un tamaño de 4096 bytes, se desperdician 4095 bytes. De esta manera, es posible llenar un sistema de archivos con n archivos de 1 bytes, donde n representa el número de bloques, mientras que ¡el volumen total de los datos sólo es de n bytes!

Supongamos un disco que contiene 102.400 bloques de 4096 bytes. Su tamaño total es de 400 MB. Supongamos 102.400 archivos de 384 bytes. El tamaño total de los datos es de 37,5 MB. Ahora bien, el disco está lleno, ¡ya que todos los bloques están siendo utilizados! Hay 362,5 MB perdidos. Por lo tanto, es muy importante tener cuidado con el tamaño de bloques, sobre todo si los archivos que se van a almacenar son de pequeño tamaño.

Algunos comandos calculan el tamaño de los archivos en bloques, como du, df o find. Históricamente, el tamaño de un bloque era de 512 o 1024 bytes. Es una unidad cuyo valor puede cambiar según el comando, y a menudo sin relación con el tamaño de los bloques del sistema de archivos en el cual se trabaja. Se impone la prudencia.

b. Superbloque

Cada sistema de archivos dispone de al menos un superbloque (superblock en inglés). Un superbloque es una zona de metadatos que contiene varios datos sobre el sistema de archivos:

  • su tipo;

  • su tamaño;

  • su estado;

  • información (posición) en las demás 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é corrompido después de operaciones erróneas o una avería. En este caso, ya no se puede acceder a los datos del disco (es imposible saber, por ejemplo, dónde están los inodos). Un sistema de archivos de Linux dispone de copias (backups) de los superbloques en varios sitios del disco. Como las escrituras en los diversos superbloques son síncronas, son todos idénticos. Como último recurso, si se suprime uno de ellos, se puede volver a copiar desde otro.

A continuación verá...

Acceder a los sistemas de archivos

1. mount

El comando mount permite acceder a los periféricos de tipo bloque (las particiones) donde está el sistema de archivos. El comando mount sitúa el sistema de archivos que se van a montar en un punto del sistema principal llamado punto de montaje (mountpoint). 

mount -t typefs -o opciones periférico punto_de_montaje 

a. Montaje por periférico

Como la partición sdb1 dispone de nuevo de un sistema de archivos ext4, el comando siguiente monta la raíz del sistema de archivos que contiene sdb1 en el directorio /mnt/DATA.

# mount -t ext4 /dev/sdb1 /mnt/DATA 

El comando mount, cuando se ejecuta sin parámetros, muestra todos los detalles en los sistemas de archivos actualmente montados (periféricos, sistemas de archivos, puntos de montaje, opciones):

# 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) 

Se puede acceder a la misma información visualizando el contenido del archivo /etc/mtab.

# grep '/dev/sd[a-z]' /etc/mtab  
/dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,logbufs=8, 
logbsize=32k,noquota 0 0  
/dev/sdb1 /mnt/DATA ext4 rw,seclabel,relatime 0 0 

Montaje por etiqueta

Es tremendamente práctico utilizar etiquetas para los sistemas de archivos montados en periféricos. Por ejemplo, cuando se procede a reordenar los discos (movimientos en los arrays de discos SCSI, por ejemplo), se modifica la ordenación de los periféricos con respecto al sistema de archivos principal. Volver a nombrar los periféricos obliga a modificar el archivo /etc/fstab para cada uno de los discos. Esto se evita con el uso de etiquetas. Utilice el parámetro -L de mount, seguido del nombre del volumen, como en el siguiente ejemplo:

# mount -t ext4 -L DATA /mnt/DATA 
# mount 
... 
/dev/sdb1 on /mnt/DATA type ext4 (rw) 

Se puede obtener la lista de las etiquetas de disco actualmente reconocidas por Linux listando el directorio /dev/disk/by-label. Observe que la etiqueta es un vínculo simbólico hacia el archivo periférico correspondiente: 

# ls -l /dev/disk/by-label/ 
total 0 
lrwxrwxrwx 1 root root 9 abr 1 22:00 'Debian\x2010.9.0\x20amd64\x20n' -> 
../../sr0...

Controlar el sistema de archivos

1. Estadísticas de ocupación

a. Por sistema de archivos

El comando df permite obtener estadísticas de ocupación de cada sistema de archivos montado. Sin argumento, df facilita información sobre todos los sistemas de archivos. Puede pasar como argumento un periférico montado o un punto de montaje. Si pasa un directorio cualquiera, df da la información del sistema de archivos que contenga este directorio.

# 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 

El resultado es explícito. La unidad por defecto es el KB (idéntico al parámetro -k) aunque la norma POSIX define una unidad de bloque en 512 bytes. Puede modificar los parámetros para pedir el resultado en MB (-m).

# df -m /mnt/DATA  
Sis. de fich.   1M-bloques  Ocupado   Disponible Capacidad  Montado en  
/dev/sdb1       9817        37        9263       1%         /mnt/DATA 

Para que sea más legible, añada el parámetro -h (Human readable).

# df -h /mnt/DATA 
Sis. de fich.      Tam.    Oc.  Disp.  %Oc.  Montado en 
/dev/sdb1          9,6G    37M  9,1G   1%    /mnt/DATA...

La swap

1. ¿Por qué crear una swap?

En un entorno de 32 bits, un proceso puede acceder teóricamente a 4 GB de espacio de memoria. Dispone de 4 GB de memoria virtual para él de forma exclusiva. Hay varios límites a esta posibilidad:

  • El espacio de memoria direccionable de un proceso se comparte entre la zona de código y la zona de datos, cuyo tamaño puede variar según el núcleo utilizado. 3 GB de este espacio se reservan a los datos de proceso, y 1 GB para el núcleo.

  • No todos los ordenadores disponen de 4 GB de memoria (aunque sea habitual encontrar servidores de Linux que disponen de 16, 32, 64 GB o incluso más memoria), gracias al núcleo PAE.

  • Todos los procesos deben compartir la memoria del ordenador.

En un sistema de 64 bits no hay límite de 4 GB, pero el tamaño de la memoria física disponible sigue siendo fijo.

¿Qué ocurre si un proceso no tiene bastante memoria para tratar sus datos? El sistema operativo descargará segmentos de la memoria física en una zona de intercambio en disco que hará de memoria virtual intermedia. Por lo tanto, hay un intercambio entre la memoria física y esta zona de intercambio, llamada espacio swap. Este proceso permite utilizar más memoria de la que dispone realmente el ordenador, a costa de una importante ralentización del programa si éste resulta ser muy "glotón".

2. Tamaño óptimo

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 512 MB, la swap debe ser el doble de grande.

  • 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. Estará de acuerdo en que asignar 256 GB de swap a un servidor de 256 GB de RAM no tiene ningún sentido.

Algunos servidores requieren bastante más espacio, como por ejemplo swaps de 8 o 16 GB, o incluso más. En este caso, conviene recurrir a otros modelos de arquitectura hardware o software. En cualquier caso, si su equipo comienza a utilizar el archivo de intercambio de forma permanente y todos los indicadores muestran que el espacio de memoria es pequeño, es hora de añadir...

Las cuotas de disco

1. Definiciones

Las cuotas permiten poner límites al uso de espacio en los sistemas de archivos. Estos límites son de dos tipos:

  • inodos: limita el número de archivos.

  • bloques: limita número de bloques.

Se implementan las cuotas por sistema de archivos individual, y no para el conjunto de los sistemas de archivos. Se puede gestionar cada usuario de manera totalmente independiente. Ocurre lo mismo con los grupos. El sistema de archivos XFS llega más allá y permite gestionar las cuotas por directorio, más exactamente llamado proyecto.

Para cada utilización (inodo o bloque), puede instalar dos límites en el tiempo:

  • Límite duro (hard): cantidad máxima de inodos o bloques utilizados que el usuario o el grupo no podrá superar en ningún caso. Este límite es taxativo (no podrá crear un archivo cuyo tamaño supera el límite).

  • Límite suave (soft): cantidad máxima de inodos o bloques utilizados que el usuario o el grupo pueden superar de manera temporal. En este caso, las creaciones y modificaciones serán posibles hasta cierto punto marcado por límite duro o el período de gracia.

  • Período de gracia. Durante este tiempo el usuario puede continuar trabajando en el sistema de archivos. El objetivo es que regrese al límite suave en dicho plazo. Una vez superado el período de gracia, el límite suave se convierte en el límite duro. Pase lo que pase, el usuario no podrá nunca superar el límite duro.

Las cuotas se establecen en el núcleo y en los sistemas de archivos. Para utilizarlas, se deben instalar las herramientas de cuotas (paquetes de cuota). En el ejemplo siguiente se muestra cómo instalar las herramientas en un sistema de archivos ext4.

Las cuotas están soportadas por un sistema de archivos BTRFS pero no por los comandos presentados aquí. Puede dirigirse a https://btrfs.wiki.kernel.org/index.php/Quota_support para estudiar el funcionamiento de las cuotas en BTRFS, diferente de este, clasico presentado aquí. No hay por ejemplo cuotas para el usuario. Sin embargo, podemos crear un subvolumen por carpeta personal y aplicar las cuotas.

2. Implementación en ext4

Los ejemplos siguientes se basan en ext4....

Los permisos de acceso

1. Los permisos básicos

a. Permisos y usuarios

El papel de un sistema operativo es también el de asegurar la integridad y el acceso a los datos, lo que es posible gracias a un sistema de permisos. A cada archivo o directorio se le asignan unos privilegios que le son propios, así como autorizaciones de acceso individuales. Al intentar acceder, el sistema comprueba si está autorizado.

Cuando el administrador crea un usuario, le asigna un UID (User Identification) único. Los usuarios quedan definidos en el archivo /etc/passwd. Del mismo modo, cada usuario se integra en, al menos, un grupo (grupo primario). Todos éstos tienen un identificador único, el GID (Group Identification) y están definidos en el archivo /etc/group.

El comando id permite obtener esta información. A nivel interno, el sistema trabaja únicamente con los UID y GID, y no con los propios nombres.

$ id 
uid=1000(seb) gid=100(users) grupos=7(lp),16(dialout),33(video), 
100(users) 

Se asocian un UID y un GID a cada archivo (inodo) que define su propietario y su grupo con privilegios. Usted asigna permisos al propietario, al grupo con privilegios y al resto de la gente. Se distinguen tres casos:

  • UID del usuario idéntico al UID definido para el archivo. Este usuario es propietario del archivo.

  • Los UID son diferentes: el sistema comprueba si el GID del usuario es idéntico al GID del archivo. Si es el caso, el usuario pertenece al grupo con privilegios del archivo. 

  • En los otros casos (ninguna correspondencia): se trata del resto de la gente (others), ni es el propietario, ni un miembro del grupo con privilegios.

d

rwxr-xr-x

29

seb

users

4096

Mar 15 22:13

Documentos

En esta línea de la tabla, el directorio Documentos pertenece al usuario seb y al grupo users, y posee los permisos rwxr-xr-x.

b. Significado

Permiso

Significado

General

r

Readable (lectura).

w

Writable (escritura).

x

Executable (ejecutable como programa).

Archivo normal

r

Se puede leer el contenido del archivo, cargarlo en memoria, listarlo y copiarlo.

w

Se puede modificar el contenido del archivo. Se puede escribir dentro. Modificar el contenido no significa poder eliminar el archivo (ver permisos en directorio).

x

Se puede ejecutar el archivo desde la línea de comandos si se trata de un programa binario (compilado) o de un script (shell, perl...).

Directorio

r

Se pueden listar (leer) los elementos...