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.

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:

CampoValorSignificado
DispositivoUUID=...Identificador estable del sistema de archivos
Punto de montaje/mnt/datosDirectorio donde se monta
Tipoext4Sistema de archivos
Opcionesdefaults,nofailOpciones estándar; nofail permite arrancar aunque el disco falte
dump0Sin copia con dump (obsoleto)
pass2fsck 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.