Curso de Linux / Montar sistemas de archivos y gestionar el espacio disponible

Montar es la acción de conectar un sistema de archivos a una ruta de directorio en Linux para poder acceder a él. Antes de la conexión, se deben verificar el destino y el punto de montaje, y después de la conexión, se debe validar la fuente, la ruta y las opciones reales con findmnt. La falta de espacio de almacenamiento se verifica separando la capacidad y los inodos.

Antes de decidir qué formatear, consulte la distinción entre disco, partición y sistema de archivos. La práctica a continuación solo utilizará un nuevo archivo de imagen temporal en lugar del disco del sistema en uso.

El estándar para la práctica de configuración del sistema es Ubuntu 26.04 LTS y VMs de instalación general de la serie Rocky Linux 9. En contenedores, WSL u otras versiones, la configuración de servicios y paquetes puede variar. Preparar primero la recuperación de consola y la verificación de la versión se indica en Crear un entorno de práctica con máquina virtual.

¿Qué pasa con los archivos que estaban en el punto de montaje?

Si se monta otro sistema de archivos en un directorio que no está vacío, los archivos originales no se borran, sino que se ocultan mientras dure el montaje. Cuando se desmonta, vuelven a ser visibles. Debe usar un directorio de práctica vacío para no confundir cuáles son archivos originales y cuáles son los del espacio de almacenamiento conectado. Para verificar el almacenamiento real de una ruta, especifique esa ruta usando findmnt -T.

findmnt -T "$HOME"
df -hT "$HOME"
df -i "$HOME"

El comando anterior muestra la información de montaje de la ruta home, la capacidad legible para humanos, y el uso de inodos respectivamente. Un inodo es la unidad de metadatos que el sistema de archivos utiliza para gestionar objetos de archivo, y si hay muchos archivos pequeños, puede agotarse incluso si hay bytes disponibles. Dependiendo del tipo de sistema de archivos, la forma de reporte y las restricciones son diferentes.

Practicar montar, escribir y desmontar con una nueva imagen

Se ejecuta en una máquina virtual de práctica con privilegios de administrador. Se necesitan herramientas ext4, y puede fallar en contenedores porque no hay permisos de montaje. A continuación se muestra un ejemplo independiente que no depende de las rutas de la lección anterior. Solo se inicializa el archivo de imagen y no se especifica un disco real.

Guarde todo el código a continuación con saltos de línea LF en mount-lab.sh y ejecute con bash mount-lab.sh. Se requieren Bash y las herramientas util-linux·e2fsprogs, así como permisos sudo. En Ubuntu, puede preparar las herramientas con sudo apt install util-linux e2fsprogs, y en Rocky con sudo dnf install util-linux e2fsprogs. Asigne los dispositivos de bucle directamente y escriba archivos solo cuando la fuente del punto de montaje exacto coincida con ese dispositivo. Si cualquier etapa de preparación falla, no continúe con la etapa de escritura.

#!/usr/bin/env bash
set -u
set -o pipefail
for tool in mktemp truncate mkfs.ext4 losetup mount umount findmnt sudo tee; do
  command -v "$tool" >/dev/null || { printf 'Missing tool: %s\n' "$tool" >&2; exit 1; }
done
sudo -v || exit 1
lab=$(mktemp -d "$HOME/linux-mount-lab.XXXXXX") || exit 1
img=$lab/disk.img
mnt=$lab/mnt
loop=''
cleanup() {
  result=$?
  trap - EXIT
  if [[ -n "$loop" ]]; then
    source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE)
    lookup=$?
    if (( lookup == 0 )) && [[ "$source" == "$loop" ]]; then
      sudo umount -- "$mnt" || result=1
    elif (( lookup != 1 )); then
      printf 'Inspect mount before cleanup: %s\n' "$mnt" >&2
      result=1
    fi
    if findmnt -rn --source "$loop" >/dev/null; then
      printf 'Still mounted; keeping loop device: %s\n' "$loop" >&2
      result=1
    else
      lookup=$?
      if (( lookup == 1 )); then
        sudo losetup --detach "$loop" || result=1
      else
        printf 'Cannot verify loop usage; keeping: %s\n' "$loop" >&2
        result=1
      fi
    fi
  fi
  printf 'Lab retained for inspection: %s\n' "$lab"
  exit "$result"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
truncate -s 128M "$img" || exit 1
mkfs.ext4 -F "$img" || exit 1
mkdir "$mnt" || exit 1
loop=$(sudo losetup --find --show "$img") || exit 1
[[ "$loop" == /dev/loop* ]] || { printf 'Unexpected loop device\n' >&2; exit 1; }
sudo mount -t ext4 -o nodev,nosuid "$loop" "$mnt" || exit 1
source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE) || exit 1
[[ "$source" == "$loop" ]] || { printf 'Mount source mismatch; no write\n' >&2; exit 1; }
printf 'mounted storage\n' | sudo tee "$mnt/note.txt" >/dev/null || exit 1
cat "$mnt/note.txt" || exit 1
sudo umount -- "$mnt" || exit 1
if findmnt -rn --mountpoint "$mnt"; then
  printf 'Mount still present\n' >&2
  exit 1
else
  lookup=$?
  (( lookup == 1 )) || exit 1
fi
printf 'Unmount verified\n'

Si tiene éxito, obtendrá mounted storage y Unmount verified. En el manejo de cierre, desmonte solo sus propios montajes confirmados y desconecte el dispositivo de bucle únicamente cuando no haya otros montajes usando ese dispositivo. Si falla la liberación o hay errores de consulta, mantenga el dispositivo y finalice con error. No se eliminan automáticamente las carpetas temporales ni los archivos de imagen y se muestra la ruta al final. En una nueva ejecución, se creará una nueva carpeta.

Este ejemplo asume una VM de práctica personal donde otros administradores no cambian simultáneamente los montajes. No es una herramienta de gestión de almacenamiento de producción que elimine condiciones de carrera entre la verificación de la fuente y la escritura. Después de un fallo, verifique la ruta mostrada en findmnt --mountpoint y el dispositivo en sudo losetup --list, y si el montaje permanece, no elimine los archivos.

Si el destino está ocupado, identifique primero qué lo utiliza

Un desmontaje puede fallar si una shell mantiene su directorio de trabajo dentro del montaje o si hay archivos abiertos o servicios que lo utilizan. Salga de esa ruta y cierre normalmente los programas implicados. Si están instalados, use fuser -vm RUTA_DE_MONTAJE o lsof para identificar procesos. No fuerce su terminación ni use desmontaje diferido como primera solución sin entender qué sigue accediendo a los datos.

Para el montaje automático, use UUID y el procedimiento de verificación juntos

/etc/fstab describe el origen, punto de montaje, tipo, opciones y campos de dump y fsck de cada sistema de archivos. El UUID identifica el sistema de archivos de manera más estable que un nombre como /dev/sdb1, aunque una copia de una imagen puede duplicarlo y exige revisar la identificación. La línea siguiente es solo un ejemplo para un volumen ext4 secundario: sustituya el UUID y prepare el directorio de montaje. El último 2 indica el grupo de comprobación de fsck para un volumen no raíz; no garantiza un orden estricto de montaje. No registre la imagen temporal de esta práctica en fstab.

UUID=REPLACE_WITH_ACTUAL_UUID /srv/data ext4 defaults,nodev,nosuid 0 2

Haga una copia de seguridad del archivo antes de modificarlo y revise la sintaxis y los destinos accesibles con sudo findmnt --verify --verbose. En un entorno systemd, después de cambiar fstab, actualice las unidades creadas con sudo systemctl daemon-reload y pruebe deliberadamente solo los montajes necesarios. Los comandos de verificación no garantizan todas las situaciones del próximo arranque, por lo que mantenga una ruta de recuperación por consola.

nofail modifica cómo afecta al arranque el fallo de un montaje auxiliar; no evita que un servicio escriba en el directorio vacío cuando el volumen no está montado. Para datos esenciales, diseñe las dependencias y condiciones del servicio. Opciones como solo lectura, nodev, nosuid y noexec deben elegirse según las necesidades: no son una protección universal ni sustituyen los permisos y el aislamiento.

df y du: razones por las diferencias y el orden de limpiar espacio

df -hT
df -i
du -xhd1 "$HOME" 2>/dev/null | sort -h

df muestra el estado de asignación de todo el sistema de archivos, mientras que du suma el espacio de los archivos que se pueden explorar. Los archivos eliminados pero abiertos por procesos, las rutas que no se pueden leer por permisos, el espacio reservado y los metadatos pueden causar diferencias. du -x limita pasar a otros sistemas de archivos y, en árboles grandes, la consulta en sí genera I/O. Si se ocultaron errores de permisos, el total puede ser incompleto.

No elimine inmediatamente los archivos grandes que encuentre; primero verifique el servicio propietario y la política de conservación. Administre los registros con la política de rotación de registros y las cachés según el método de limpieza del programa correspondiente. La limpieza de imágenes de práctica se realiza solo después de confirmar el desmontaje y, si ha cambiado el fstab, primero restaure y verifique las entradas originales.

Documentación oficial