Cuando un servidor se queda corto de espacio o quieres separar los datos del sistema operativo, lo habitual es añadir un segundo disco y montarlo en un directorio como /mnt/datos o /var/lib/datos. En este tutorial detectarás un disco nuevo en Ubuntu 24.04, lo particionarás, crearás un sistema de archivos ext4 y lo montarás por UUID para que siga disponible tras cada reinicio. También verás cómo montar un disco que ya contiene datos sin formatearlo.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS con un disco adicional conectado, por ejemplo un servidor dedicado de CubePath con varios discos o una máquina virtual con un segundo disco.
- Un usuario no root con privilegios
sudo.
Advertencialos pasos 3 y 4 borran todo el contenido del disco. Si el disco ya tiene datos que quieres conservar, sáltalos y ve directamente a la sección "Montar un disco que ya tiene datos".
Los comandos son los mismos en Debian 12 y Rocky Linux 9. En Rocky, el sistema de archivos habitual es XFS (mkfs.xfs).
Paso 1: Identificar el disco nuevo
Lista los dispositivos de bloque con su tamaño, sistema de archivos y punto de montaje:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
NAME SIZE TYPE FSTYPE MOUNTPOINTS
sda 100G disk
├─sda1 1M part
└─sda2 100G part ext4 /
sdb 500G disk
El disco nuevo es el que no tiene particiones, ni sistema de archivos, ni punto de montaje: en este ejemplo, /dev/sdb de 500 GB. Según el tipo de disco puede llamarse /dev/sdb, /dev/vdb o /dev/nvme1n1; sustituye el nombre en todos los comandos.
Si tienes varios discos del mismo tamaño y quieres asegurarte de cuál es cuál, muestra su modelo y número de serie:
lsblk -d -o NAME,SIZE,MODEL,SERIAL
Si el disco no aparece
En una máquina virtual a la que has conectado el disco en caliente, el kernel puede no haberlo detectado todavía. Pide a los controladores SCSI que vuelvan a buscar dispositivos:
for host in /sys/class/scsi_host/host*/scan; do echo "- - -" | sudo tee "$host" > /dev/null; done
Vuelve a ejecutar lsblk. Si sigue sin aparecer, revisa los mensajes del kernel con sudo dmesg | tail -20 o reinicia el servidor.
Paso 2: Comprobar que el disco está vacío
Antes de particionar, confirma que el disco no contiene un sistema de archivos, una tabla de particiones o metadatos de RAID o LVM:
sudo wipefs /dev/sdb
Si no imprime nada, el disco está vacío. Si muestra alguna firma, detente y comprueba que es el disco correcto y que no contiene nada que necesites.
Paso 3: Crear una partición
Crea una tabla de particiones GPT y una única partición que ocupe todo el disco con parted:
sudo parted -s -a optimal /dev/sdb mklabel gpt mkpart datos ext4 0% 100%
-a optimal junto con 0% 100% hace que la partición empiece alineada, algo importante para el rendimiento en SSD y discos de sectores de 4K. El argumento datos es el nombre de la partición en la tabla GPT.
Comprueba que se ha creado /dev/sdb1:
lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 500G 0 disk
└─sdb1 8:17 0 500G 0 part
Si prefieres hacerlo de forma interactiva, sudo fdisk /dev/sdb con las órdenes g (tabla GPT), n (nueva partición, con los valores por defecto) y w (guardar) produce el mismo resultado.
Paso 4: Crear el sistema de archivos
Da formato ext4 a la partición con la etiqueta datos:
sudo mkfs.ext4 -L datos /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 131071488 4k blocks and 32768000 inodes
...
Writing superblocks and filesystem accounting information: done
En un disco solo para datos puedes reducir el espacio que ext4 reserva para root, que por defecto es el 5 % (unos 25 GB en un disco de 500 GB):
sudo tune2fs -m 1 /dev/sdb1
Paso 5: Montar el disco
Crea el directorio donde quedará montado el disco y móntalo:
sudo mkdir -p /mnt/datos
sudo mount /dev/sdb1 /mnt/datos
Comprueba el espacio disponible:
df -h /mnt/datos
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 492G 28K 487G 1% /mnt/datos
Un sistema de archivos recién creado pertenece a root. Si una aplicación o tu usuario van a escribir en él, asigna el propietario adecuado. Por ejemplo, para tu usuario:
sudo chown your_user:your_user /mnt/datos
Sustituye your_user por el nombre de tu usuario o el de la aplicación (por ejemplo, www-data para Nginx o Apache).
Paso 6: Montar el disco automáticamente al arrancar
El montaje anterior se pierde al reiniciar. Para hacerlo permanente, añade el disco a /etc/fstab. Usa el UUID del sistema de archivos en lugar de /dev/sdb1, porque los nombres de dispositivo pueden cambiar si se añaden o quitan discos.
Obtén el UUID:
sudo blkid /dev/sdb1
/dev/sdb1: LABEL="datos" UUID="5d1e8c42-7b3a-4f19-a6e2-9c0d4b8f1a37" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="datos" PARTUUID="..."
Haz una copia de seguridad del archivo y ábrelo:
sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab
Añade esta línea al final, con tu UUID:
UUID=5d1e8c42-7b3a-4f19-a6e2-9c0d4b8f1a37 /mnt/datos ext4 defaults,nofail 0 2
Cada campo significa:
| Campo | Valor | Significado |
|---|---|---|
| Dispositivo | UUID=... | Identificador estable del sistema de archivos |
| Punto de montaje | /mnt/datos | Directorio donde se monta |
| Tipo | ext4 | Sistema de archivos |
| Opciones | defaults,nofail | Opciones estándar; nofail permite arrancar aunque el disco falte |
| dump | 0 | Sin copia con dump (obsoleto) |
| pass | 2 | fsck lo revisa después del sistema raíz |
La opción nofail es importante: sin ella, si el disco falla o se desconecta, el servidor se detiene en el arranque en modo de emergencia y solo podrás recuperarlo desde la consola.
Paso 7: Probar la configuración
Nunca reinicies sin probar antes /etc/fstab. Desmonta el disco, recarga systemd para que lea el archivo modificado y monta todo lo que contiene:
sudo umount /mnt/datos
sudo systemctl daemon-reload
sudo mount -a
Si mount -a no muestra errores, comprueba que el disco está montado:
findmnt /mnt/datos
TARGET SOURCE FSTYPE OPTIONS
/mnt/datos /dev/sdb1 ext4 rw,relatime
También puedes validar la sintaxis de todo el archivo:
sudo findmnt --verify
Por último, reinicia y confirma que el disco se monta solo:
sudo reboot
df -h /mnt/datos
Montar un disco que ya tiene datos
Si el disco procede de otro servidor o ya lo habías formateado, no lo particiones ni lo formatees. Identifica sus particiones y sistemas de archivos:
lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
└─sdb1 ext4 datos 5d1e8c42-7b3a-4f19-a6e2-9c0d4b8f1a37
Móntalo primero en solo lectura para revisar el contenido sin riesgo:
sudo mkdir -p /mnt/datos
sudo mount -o ro /dev/sdb1 /mnt/datos
ls -la /mnt/datos
Si todo está bien, desmóntalo y sigue el paso 6 con el UUID y el tipo de sistema de archivos que muestra lsblk -f (por ejemplo, xfs en lugar de ext4).
sudo umount /mnt/datos
Si lsblk -f muestra LVM2_member o linux_raid_member, el disco forma parte de un grupo LVM o de un array RAID: actívalo con sudo vgchange -ay o sudo mdadm --assemble --scan y monta el volumen lógico o el dispositivo /dev/mdX resultante, no la partición.
Solución de problemas
mount: wrong fs type, bad option, bad superblock. La partición no tiene sistema de archivos o el tipo indicado en /etc/fstab no coincide. Comprueba el tipo real con lsblk -f.
El servidor arranca en modo de emergencia tras editar /etc/fstab. Suele deberse a un UUID incorrecto sin nofail. Accede por la consola del servidor; si el modo de emergencia te da un intérprete, remonta la raíz en escritura con mount -o remount,rw /, corrige o comenta la línea (o restaura /etc/fstab.bak) y reinicia. En Ubuntu la cuenta root está bloqueada por defecto y el modo de emergencia puede no dejarte entrar: en ese caso arranca un sistema de rescate, monta la partición raíz y corrige el archivo desde ahí.
mount -a avisa de que systemd usa la versión anterior de fstab. Ejecuta sudo systemctl daemon-reload y repite.
Permiso denegado al escribir en el disco. El directorio raíz del sistema de archivos pertenece a root. Asigna el propietario con chown como en el paso 5.
Conclusión
Has detectado un disco nuevo, lo has particionado con GPT, le has dado formato ext4 y lo has montado por UUID con nofail para que sobreviva a los reinicios sin poner en riesgo el arranque. Como siguientes pasos, puedes usar el disco como volumen físico de LVM para ampliarlo en el futuro, combinar dos discos en un RAID 1 con mdadm para tener redundancia o mover a él directorios con mucho crecimiento, como /var/lib/mysql o /var/backups.
