El sistema de archivos

Un solo árbol, y todo cuelga de él

Marco González Luengo

Tabla de contenidos
  1. Todo es un archivo
  2. El árbol de directorios
  3. Dispositivos en /dev
  4. Sistemas de archivos
  5. ¿Y las particiones de Windows?
  6. Montar: colgar un disco del árbol
  7. Montar al arrancar: /etc/fstab
  8. Cuánto espacio queda
  9. Particiones y LVM
  10. Ejercicios

En Windows cada disco tiene su letra: C:, D:, E:. En Linux no hay letras: hay un solo árbol de directorios que parte en la raíz, /, y cada disco, pendrive o partición se "cuelga" en alguna rama de ese árbol.

Todo es un archivo

Es una de las ideas centrales de UNIX: casi todo se maneja como si fuera un archivo. Los documentos, sí, pero también los discos, las terminales, e incluso información del kernel. Por eso los mismos comandos (cat, ls, redirecciones) sirven para todo.

cat /proc/uptime     # hace cuánto está prendido el equipo, en segundos
ls /dev              # los dispositivos, como archivos

El árbol de directorios

Los directorios principales siguen un estándar, el FHS, así que son casi iguales en todas las distribuciones:

Directorio Qué contiene
/ La raíz: de aquí parte todo
/bin, /sbin Programas básicos y de administración. Hoy casi siempre son enlaces a /usr/bin y /usr/sbin
/boot Lo necesario para arrancar: el kernel y el initramfs
/dev Los dispositivos (discos, terminales, etc.)
/etc Configuración del sistema y de los programas instalados
/home Las carpetas personales de los usuarios
/lib Bibliotecas compartidas y módulos del kernel (también enlazado a /usr/lib)
/media Donde se montan discos removibles, como pendrives
/mnt Para montar sistemas de archivos a mano, de forma temporal
/opt Programas instalados por fuera del gestor de paquetes
/proc, /sys Información del kernel y de los procesos, generada al vuelo (no ocupa disco)
/root La carpeta personal de root
/run Datos temporales de los programas en ejecución; se borran al reiniciar
/tmp Archivos temporales, que cualquier programa puede usar
/usr La mayoría de los programas, bibliotecas y documentación
/var Datos que cambian y crecen: logs, cachés, colas de impresión, bases de datos

Una descripción completa está en el manual: man hier.

Dispositivos en /dev

Cada disco y cada partición aparecen como un archivo en /dev:

Nombre Qué es
/dev/sda, /dev/sdb Primer y segundo disco SATA, SAS o USB
/dev/sda1, /dev/sda2 Primera y segunda partición del primer disco
/dev/nvme0n1 Primer disco NVMe (los SSD modernos)
/dev/nvme0n1p2 Su segunda partición
/dev/mmcblk0p1 Primera partición de una tarjeta SD
/dev/sr0 La unidad de CD/DVD
/dev/tty1, /dev/tty2 Las consolas de texto
/dev/pts/0 Una pseudoterminal: la usan las terminales gráficas y las conexiones remotas
/dev/null El agujero negro: descarta todo lo que recibe
/dev/zero, /dev/urandom Entregan ceros o bytes aleatorios sin fin

Para ver los discos y particiones de forma ordenada:

lsblk        # discos, particiones y dónde están montados
lsblk -f     # además, el sistema de archivos de cada una

Sistemas de archivos

Un sistema de archivos es la forma en que se organizan los datos dentro de una partición: cómo se guardan los nombres, los permisos, dónde está cada bloque de cada archivo. Hay varios, y Linux entiende casi todos:

Sistema Dónde se usa
ext4 El clásico de Linux; predeterminado en Debian y Ubuntu
btrfs Predeterminado en Fedora; permite snapshots y compresión
xfs Predeterminado en Red Hat Enterprise Linux; bueno con archivos grandes
vfat (FAT32) Pendrives y la partición de arranque EFI; lo lee cualquier sistema
exFAT Pendrives y tarjetas grandes; sin el límite de 4 GB por archivo de FAT32
NTFS Windows
swap No guarda archivos: es memoria de intercambio

Los sistemas de archivos de Linux usan journaling: antes de hacer un cambio, anotan lo que van a hacer en un registro. Si se corta la luz a mitad de camino, al volver a prender se revisa ese registro y el sistema de archivos no queda corrupto.

¿Y las particiones de Windows?

Linux lee y escribe sin problemas FAT32, exFAT (soporte incluido en el kernel desde la versión 5.7) y NTFS (con el controlador ntfs3, desde la 5.15).

Hay que tener en cuenta que FAT y exFAT no tienen permisos al estilo Linux. Al montarlas, todos los archivos aparecen con el mismo dueño y los mismos permisos, que se fijan con opciones de montaje (uid, gid, umask). Tampoco se respetan los atributos de Windows, como "oculto".

Montar: colgar un disco del árbol

Montar es conectar un sistema de archivos a un directorio del árbol, que pasa a llamarse punto de montaje. Desde ahí, el contenido del disco aparece dentro de ese directorio.

sudo mount /dev/sdb1 /mnt       # monta la partición en /mnt
ls /mnt                         # ahora se ve su contenido
sudo umount /mnt                # la desmonta (ojo: umount, sin la n)

mount detecta solo el tipo de sistema de archivos. Si hace falta indicarlo, se usa -t:

sudo mount -t exfat /dev/sdb1 /mnt

Para ver qué está montado y dónde:

findmnt          # en forma de árbol
mount            # la lista completa, más difícil de leer

En un escritorio casi nunca hace falta montar a mano: al conectar un pendrive, el sistema lo monta solo, en /run/media/tu-usuario/ (Fedora) o /media/tu-usuario/ (Ubuntu). Desde la terminal, sin sudo, se puede hacer lo mismo con udisksctl mount -b /dev/sdb1.

Montar al arrancar: /etc/fstab

Los sistemas de archivos que se montan solos al iniciar el equipo están en /etc/fstab, uno por línea:

UUID=893b6987-b026-400d-8065-55f59f67dff0  /boot  ext4  defaults  0 0

Qué montar (identificado por su UUID, que no cambia aunque cambie el orden de los discos; se ve con lsblk -f), dónde, qué tipo, con qué opciones, y dos números para respaldos y revisión al arrancar. Un error en este archivo puede impedir que el sistema arranque: revisa dos veces antes de guardar.

Cuánto espacio queda

df -h              # espacio usado y libre en cada sistema de archivos
du -sh documentos  # cuánto ocupa un directorio
du -sh * | sort -h # cuánto ocupa cada cosa aquí, de menor a mayor

La -h (human) muestra los tamaños en K, M y G en vez de bloques.

Particiones y LVM

Al instalar, un esquema típico hoy es:

La memoria de intercambio (swap) ya no siempre es una partición: puede ser un archivo, o zram, memoria comprimida en la propia RAM (lo que usa Fedora por defecto).

Muchas instalaciones usan además LVM (Logical Volume Manager): una capa entre los discos y los sistemas de archivos que permite agrandar, achicar o mover "particiones" (volúmenes lógicos) sin tener que reparticionar. Se ve con:

lsblk               # los volúmenes aparecen con tipo "lvm"
sudo pvs            # discos físicos que usa LVM
sudo vgs            # grupos de volúmenes
sudo lvs            # volúmenes lógicos

Ejercicios

Describe para qué sirven los directorios que cuelgan de la raíz /.

Están en la tabla del árbol de directorios. Los más importantes para el día a día: /etc (configuración), /home (usuarios), /var (logs y datos que crecen), /tmp (temporales), /usr (programas) y /dev (dispositivos).

Las carpetas de los usuarios están en /home. ¿Dónde está la de root?

En /root, fuera de /home y protegida del resto de los usuarios (sus permisos no dejan entrar a nadie más).

¿Qué esperas que pase si eliminas el directorio /boot?

Que el sistema no vuelva a arrancar. En /boot están el kernel, el initramfs (un pequeño sistema que el kernel usa para poder montar el disco principal) y la configuración del cargador de arranque. Sin eso, no hay nada que cargar. Mientras el equipo siga prendido todo parece funcionar, porque el kernel ya está en memoria; el problema aparece en el siguiente reinicio.

Cuando un usuario inicia sesión, ¿en qué directorio queda?

En su carpeta personal, la que indica su variable HOME: normalmente /home/usuario.

¿El directorio / tiene permisos?

Sí, como cualquier directorio. Pertenece a root y normalmente tiene drwxr-xr-x: todos pueden entrar y ver su contenido, pero solo root puede crear o borrar cosas directamente en la raíz. Se comprueba con ls -ld /.

Al instalar una aplicación, ¿dónde sospecharías que queda su configuración?

La configuración del sistema queda en /etc. La configuración personal de cada usuario suele quedar en su carpeta, dentro de ~/.config o en archivos ocultos como ~/.bashrc.

¿Qué significa /dev/sdd6? ¿Y /dev/nvme0n1p2?
  • /dev/sdd6 es la sexta partición (6) del cuarto disco (d) SATA, SAS o USB (sd).
  • /dev/nvme0n1p2 es la segunda partición (p2) del primer espacio de nombres (n1) del primer controlador NVMe (nvme0). En la práctica: la segunda partición del primer SSD NVMe.

(En la época de los discos IDE, la sexta partición del cuarto disco habría sido /dev/hdd6.)

¿Qué diferencia hay entre /dev/tty6 y /dev/pts/6?
  • /dev/tty6 es una consola real: la sexta terminal de texto del equipo, la que aparece con Ctrl + Alt + F6.
  • /dev/pts/6 es una pseudoterminal: una terminal "de mentira" que crea un programa. La usan las terminales gráficas (cada ventana o pestaña abre una) y las conexiones remotas por SSH.

Puedes ver en cuál estás con el comando tty.

¿Cómo montas un pendrive a mano? ¿Y un CD o DVD?

Primero, identificar el dispositivo con lsblk. Luego, montarlo en un directorio:

sudo mkdir -p /mnt/pendrive
sudo mount /dev/sdb1 /mnt/pendrive

Para un CD o DVD, el dispositivo es /dev/sr0:

sudo mount /dev/sr0 /mnt

En un escritorio, ambos se montan solos al conectarlos o insertarlos.

¿Qué pasa si montas un pendrive sobre un directorio que no está vacío?

El contenido original del directorio queda oculto mientras el pendrive esté montado: en ese directorio solo se ve lo del pendrive. No se borra nada; al desmontar (umount), el contenido original vuelve a aparecer.

¿Se puede recuperar un archivo que mandaste a /dev/null?

No. /dev/null descarta todo lo que recibe: los datos nunca se guardan en ninguna parte, así que no hay nada que recuperar.

¿Puede un usuario normal montar un pendrive? ¿De qué depende?

Con mount a secas, no: montar necesita permisos de administrador. Pero hay dos formas habituales de permitirlo:

  • En un escritorio, el servicio udisks deja que el usuario que está sentado frente al equipo monte discos removibles, sin contraseña. Por eso los pendrives se montan solos.
  • El administrador puede agregar el dispositivo a /etc/fstab con la opción user (o users), que autoriza a los usuarios normales a montarlo.
¿Con qué comando ves los dispositivos montados?

findmnt los muestra en forma de árbol, bien ordenados. mount sin argumentos también, pero en una lista mucho más larga. Para ver discos y particiones con su punto de montaje, lsblk.

Como administrador, quieres que cualquier usuario pueda montar el pendrive /dev/sdb1. ¿Qué haces tú y qué hace el usuario?

Como administrador, se agrega una línea a /etc/fstab con las opciones users (cualquier usuario puede montar y desmontar) y noauto (no se monta al arrancar, porque el pendrive puede no estar conectado):

/dev/sdb1  /media/pendrive  auto  users,noauto  0 0

Y se crea el punto de montaje: sudo mkdir -p /media/pendrive.

El usuario, sin sudo, solo indica el punto de montaje:

mount /media/pendrive
umount /media/pendrive

(En un escritorio moderno esto normalmente no es necesario, porque udisks ya lo permite. Y como el nombre sdb1 puede cambiar según el orden en que se conectan los discos, en fstab es más seguro identificar el pendrive por su UUID.)

¿Qué sistema de archivos usa Linux?

No hay uno solo. Los más usados son ext4 (Debian, Ubuntu), btrfs (Fedora) y xfs (Red Hat Enterprise Linux), que el instalador permite elegir. Linux además lee y escribe FAT32, exFAT y NTFS, entre muchos otros.

Lo que sí necesita el sistema de archivos donde se instala Linux es soportar sus permisos, dueños y enlaces. Por eso no se instala en FAT32 o exFAT, que no los tienen.

¿Linux puede leer y escribir particiones de Windows? ¿Es seguro?

Sí puede: FAT32, exFAT y NTFS se leen y escriben directamente con el kernel.

En cuanto a seguridad, hay dos cosas que considerar:

  • FAT y exFAT no tienen permisos, así que todos los archivos quedan con el dueño y los permisos que se definan al montar. Si se monta con permisos abiertos, cualquier usuario del equipo puede ver y modificar todo.
  • Los atributos de Windows, como "oculto", no se respetan: desde Linux se ve todo.

Además, si Windows quedó en hibernación o con el "inicio rápido" activado, conviene no escribir en su partición: Windows puede tener cambios pendientes y el sistema de archivos se puede dañar.

¿Cuánto espacio queda en /tmp? ¿Qué diferencia hay entre df y du?
df -h /tmp
  • df (disk free) muestra el espacio total, usado y disponible de cada sistema de archivos. Responde "¿cuánto espacio queda en el disco?".
  • du (disk usage) suma lo que ocupan los archivos de un directorio. Responde "¿qué es lo que está llenando el disco?".

En muchas distribuciones /tmp no está en el disco, sino en memoria (tipo tmpfs), así que su tamaño depende de la RAM.

¿Cómo revisas la estructura de volúmenes LVM de tu sistema?

lsblk muestra los volúmenes lógicos (tipo lvm) dentro de sus discos. Para el detalle, sudo pvs (volúmenes físicos), sudo vgs (grupos de volúmenes) y sudo lvs (volúmenes lógicos). Si no aparece nada, el sistema no usa LVM, lo que es común en instalaciones con btrfs.

¿Por qué alguien querría tener /var/log en un sistema de archivos separado?

Porque los logs crecen con el tiempo, y pueden crecer muy rápido si algo empieza a fallar en bucle. Si están en el mismo sistema de archivos que la raíz y llenan el disco, se cae todo lo demás: los programas no pueden escribir, los usuarios no pueden iniciar sesión. En un sistema de archivos aparte, lo peor que pasa es que se llena ese.

¿Cómo montas de forma temporal un sistema de archivos que está en un disco local?
sudo mount /dev/sdb1 /mnt

/mnt existe justamente para montajes temporales hechos a mano. Queda montado hasta que se desmonta con sudo umount /mnt o se reinicia el equipo. Para que se monte siempre al arrancar, habría que agregarlo a /etc/fstab.

Al instalar un sistema, ¿qué particiones se necesitan y qué recursos hacen falta?

Recursos:

  • un computador;
  • el instalador de la distribución, normalmente en un pendrive (antes era un CD o DVD);
  • espacio libre en el disco;
  • idealmente, conexión a internet para descargar actualizaciones.

Particiones: el instalador propone un esquema automático que suele funcionar bien. Uno típico tiene:

  • una partición EFI (unos cientos de MB, en vfat, montada en /boot/efi);
  • la raíz /, con el resto del espacio;
  • opcionalmente una partición /boot y un /home separado.

La swap puede ser una partición, un archivo o zram.


Sigue con Procesos y servicios.