El particionado de discos en Linux es una habilidad fundamental para cualquier administrador de sistemas o ingeniero DevOps. Ya sea que estés añadiendo un disco de datos a un servidor, configurando una nueva instalación o preparando almacenamiento para una base de datos, entender cómo particionar discos con fdisk y parted — y cómo persistir los montajes en /etc/fstab usando UUIDs — te evitará errores costosos e interrupciones del servicio. Esta guía cubre el flujo de trabajo completo desde el disco sin formato hasta el sistema de archivos montado con automontaje.
Requisitos Previos
- Acceso root o sudo en un sistema Linux
- Un disco sin formato o disco virtual conectado a la máquina (p. ej.,
/dev/sdb) - Familiaridad básica con la terminal de Linux
- Paquete
util-linuxinstalado (proporcionafdisk,lsblk,blkid— presente por defecto en la mayoría de distros) partedinstalado:apt install partedodnf install parted
MBR vs GPT: Elegir la Tabla de Particiones Correcta
Antes de modificar un disco, debes decidir qué formato de tabla de particiones usar. Los dos estándares son MBR (Master Boot Record) y GPT (GUID Partition Table).
| Característica | MBR | GPT |
|---|---|---|
| Tamaño máximo de disco | 2 TB | 9,4 ZB (prácticamente ilimitado) |
| Máximo de particiones primarias | 4 (o 3 primarias + extendida) | 128 |
| Firmware de arranque | BIOS | UEFI (también funciona con BIOS mediante híbrido) |
| Redundancia | Ninguna | Cabecera de respaldo al final del disco |
| Soporte de SO | Todo Linux, Windows XP+ | Linux kernel 2.6.25+, Windows Vista+, macOS |
| Soporte de herramientas | fdisk, parted, gdisk | parted, gdisk, fdisk (desde util-linux 2.23) |
| Recuperación | Más difícil | La cabecera GPT de respaldo permite recuperación |
Regla general: Usa GPT para cualquier disco nuevo en 2025. El límite de 128 particiones de GPT, la resiliencia mediante cabecera de respaldo y la ausencia del límite de 2 TB lo convierten en la opción predeterminada correcta. Usa MBR solo cuando el objetivo sean sistemas muy antiguos o hardware embebido que lo requiera específicamente.
Particionado con fdisk
fdisk es una herramienta interactiva con menú incluida en util-linux. Las versiones modernas (util-linux 2.23+) soportan GPT, lo que la convierte en una opción flexible para la mayoría de las cargas de trabajo.
Inspeccionar discos existentes
# Listar todos los dispositivos de bloque con tamaños y tipos
lsblk
# Mostrar información detallada de particiones
fdisk -l
# Mostrar un disco específico
fdisk -l /dev/sdb
Crear una partición GPT con fdisk
sudo fdisk /dev/sdb
Dentro del prompt interactivo:
Command (m for help): g # Crear una nueva tabla de particiones GPT (usa 'o' para MBR)
Created a new GPT disklabel (GUID: ...).
Command (m for help): n # Nueva partición
Partition number (1-128, default 1): 1
First sector (2048-..., default 2048): [Enter]
Last sector, +/-sectors or +/-size{K,M,G,T,P}: +100G # Tamaño de la partición
Command (m for help): t # Cambiar tipo de partición (opcional)
Selected partition 1
Partition type or alias (type L to list all): 20 # Sistema de archivos Linux
Command (m for help): p # Vista previa de la tabla de particiones antes de escribir
Command (m for help): w # Escribir cambios y salir
Tras escribir los cambios, el kernel recibe la notificación. Si no ocurre, ejecuta partprobe /dev/sdb o udevadm settle para forzar una relectura.
Comandos clave de fdisk
| Tecla | Acción |
|---|---|
m | Mostrar menú de ayuda |
g | Nueva tabla de particiones GPT |
o | Nueva tabla de particiones MBR |
n | Nueva partición |
d | Eliminar partición |
t | Cambiar tipo de partición |
p | Imprimir tabla de particiones |
w | Escribir y salir |
q | Salir sin guardar |
Particionado con parted
parted soporta tanto MBR como GPT y es scriptable — ideal para scripts de automatización y herramientas de aprovisionamiento como Ansible o Terraform. También maneja discos de más de 2 TB sin problemas.
Modo interactivo
sudo parted /dev/sdb
(parted) mklabel gpt # Crear tabla de particiones GPT
(parted) mkpart primary ext4 0% 100% # Una sola partición que ocupa todo el disco
(parted) print # Verificar
(parted) quit
Modo no interactivo (scriptable)
# Crear tabla GPT
sudo parted -s /dev/sdb mklabel gpt
# Crear una sola partición usando el 100% del espacio en disco
sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
# Crear dos particiones: 50 GB de datos, el resto para logs
sudo parted -s /dev/sdb mkpart primary ext4 0% 50GB
sudo parted -s /dev/sdb mkpart primary ext4 50GB 100%
El indicador -s suprime los prompts interactivos, lo que hace que parted sea seguro para usar en automatización.
Alineación en parted
Utiliza siempre límites basados en porcentajes (0%, 100%, 50%) o valores en MiB/GiB en lugar de números de sector sin procesar. Esto garantiza la alineación correcta de sectores de 4K, lo que importa para el rendimiento de SSD y NVMe.
# Verificar la alineación después de crear particiones
sudo parted /dev/sdb align-check optimal 1
# Salida: 1 aligned
Formateo de Particiones con mkfs
Después de crear una partición, debes crear un sistema de archivos en ella. La elección del sistema de archivos depende de tu carga de trabajo.
# ext4 — uso general, mayor compatibilidad
sudo mkfs.ext4 /dev/sdb1
# xfs — alto rendimiento, preferido para archivos grandes y bases de datos
sudo mkfs.xfs /dev/sdb1
# btrfs — copy-on-write, snapshots, compresión
sudo mkfs.btrfs /dev/sdb1
# Añadir una etiqueta (hace las entradas de fstab más legibles)
sudo mkfs.ext4 -L data /dev/sdb1
| Sistema de archivos | Mejor para | Tamaño máximo de archivo | Tamaño máximo de volumen |
|---|---|---|---|
| ext4 | Uso general, discos de VM | 16 TB | 1 EB |
| xfs | Bases de datos, archivos grandes | 8 EB | 8 EB |
| btrfs | Snapshots, NAS, servidores domésticos | 16 EB | 16 EB |
| vfat/FAT32 | Unidades USB, particiones EFI | 4 GB | 2 TB |
Montaje y Montajes Persistentes con /etc/fstab
Una partición montada manualmente desaparece tras el reinicio. Para persistir el montaje, agrégala a /etc/fstab. Usa siempre UUIDs en lugar de nombres de dispositivo como /dev/sdb1 — los nombres de dispositivo pueden cambiar tras reinicios o cuando se añaden o eliminan discos.
Obtener el UUID
sudo blkid /dev/sdb1
# Salida: /dev/sdb1: UUID="a1b2c3d4-..." TYPE="ext4" PARTLABEL="primary"
# Alternativa: mostrar todos los UUIDs de dispositivos de bloque
lsblk -o NAME,UUID,FSTYPE,SIZE,MOUNTPOINT
Crear el punto de montaje y montar inmediatamente
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data
# Verificar
df -h /mnt/data
Añadir a /etc/fstab
Abre /etc/fstab con tu editor:
sudo nano /etc/fstab
Añade una línea con este formato:
# <dispositivo> <punto montaje> <tipo> <opciones> <dump> <pass>
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data ext4 defaults,nofail 0 2
Opciones críticas explicadas:
| Opción | Significado |
|---|---|
defaults | rw, suid, dev, exec, auto, nouser, async |
nofail | El arranque tiene éxito aunque el disco esté ausente (esencial para discos no raíz) |
noatime | Omite las actualizaciones de tiempo de acceso — mejora la vida útil y el rendimiento del SSD |
0 (dump) | 0 = no incluir en dump; 1 = incluir en copia de seguridad dump |
2 (pass) | Orden de fsck: 0 = omitir, 1 = solo raíz, 2 = verificar después de raíz |
Verificar la entrada de fstab sin reiniciar
# Desmontar primero
sudo umount /mnt/data
# Probar fstab (monta todas las entradas)
sudo mount -a
# Confirmar
df -h /mnt/data
Si mount -a no devuelve errores, la entrada es válida y sobrevivirá a un reinicio.
Escenario Real: Añadir un Disco de Datos a un Servidor Web en Producción
Tienes un servidor web en producción ejecutando Ubuntu 22.04. El disco raíz está casi lleno porque /var/www ha crecido hasta 180 GB. Conectas un nuevo SSD de 500 GB como /dev/sdb y quieres mover el contenido web sin tiempo de inactividad.
Paso 1 — Identificar y particionar el nuevo disco:
lsblk
# Confirmar que /dev/sdb es el nuevo disco de 500 GB sin particiones
sudo parted -s /dev/sdb mklabel gpt
sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
sudo partprobe /dev/sdb
Paso 2 — Formatear y etiquetar:
sudo mkfs.ext4 -L webdata /dev/sdb1
Paso 3 — Copiar los datos existentes al nuevo disco:
sudo mkdir /mnt/newwww
sudo mount /dev/sdb1 /mnt/newwww
sudo rsync -av --progress /var/www/ /mnt/newwww/
Paso 4 — Intercambiar el montaje (con tiempo de inactividad mínimo):
sudo umount /mnt/newwww
# Obtener UUID
sudo blkid /dev/sdb1
# Editar /etc/fstab — añadir el nuevo montaje para /var/www
# UUID=xxxx-xxxx /var/www ext4 defaults,nofail,noatime 0 2
# Mover los datos antiguos fuera del camino y remontar
sudo mv /var/www /var/www.bak
sudo mkdir /var/www
sudo mount -a
# Verificar que el servidor web puede leer los archivos
ls /var/www
Paso 5 — Validar y limpiar:
df -h /var/www
# /dev/sdb1 500G 180G 320G 36% /var/www
# Después de confirmar que todo funciona, eliminar la copia de seguridad
sudo rm -rf /var/www.bak
Errores Comunes y Casos Especiales
Cambio de nombre de dispositivo: /dev/sdb puede convertirse en /dev/sdc tras un reinicio si se añade otro disco. Usa siempre UUIDs en /etc/fstab y en scripts — nunca rutas de dispositivo sin procesar.
Tabla de particiones no visible inmediatamente: Tras escribir los cambios con fdisk o parted, es posible que el kernel no relea inmediatamente la tabla de particiones si el disco está en uso. Ejecuta sudo partprobe /dev/sdb o reinicia.
Alineación de sectores de 4K: Las herramientas más antiguas usan alineación basada en cilindros, lo que provoca desalineación en discos modernos de sectores de 4K. Usa la sintaxis de porcentaje de parted o la alineación de sectores predeterminada de fdisk (2048 sectores = 1 MiB).
ext4 en discos grandes: Para volúmenes de más de 16 TB, cambia a xfs. El comando mkfs.ext4 te avisará, pero es fácil pasarlo por alto.
Falta de nofail en discos no raíz: Sin nofail, un disco secundario ausente hará que el sistema entre en modo de emergencia al arrancar. Añade siempre nofail a cualquier entrada de fstab que no sea la raíz.
GPT en un sistema BIOS sin partición de arranque BIOS: Cuando uses GPT con GRUB en un sistema sin UEFI, necesitas una pequeña partición (1 MiB) sin formatear con el tipo BIOS boot (código ef02 en gdisk o tipo bios_grub en parted). Sin ella, GRUB no puede instalar su stage 2.
Solución de Problemas
mount: /mnt/data: can't read superblock — El sistema de archivos no fue creado o se creó en el dispositivo incorrecto. Ejecuta file -s /dev/sdb1 para comprobar si existe un sistema de archivos.
mount: wrong fs type, bad option, bad superblock — No coincide el tipo de sistema de archivos en fstab con el tipo real en el disco. Ejecuta blkid /dev/sdb1 para verificar el campo TYPE y corregir la entrada de fstab.
WARNING: Re-reading the partition table failed — El kernel no pudo actualizar su vista de la tabla de particiones porque el disco está ocupado. Si esto ocurre en un disco distinto al de arranque, ejecuta partprobe o reinicia.
El UUID cambia después de mkfs — Cada llamada a mkfs asigna un nuevo UUID. Si reformateas una partición y no actualizas /etc/fstab, el sistema no podrá montarla. Ejecuta siempre blkid después de formatear y actualiza fstab inmediatamente.
parted: Error: Partition(s) on /dev/sdb are being used — Una o más particiones del disco están montadas actualmente. Desmonta todas antes de reetiquetar o redimensionar.
Resumen
- Elige GPT para todos los discos nuevos en 2025 — soporta 128 particiones, discos de más de 2 TB y proporciona una cabecera de tabla de particiones de respaldo.
- Usa fdisk para el particionado interactivo; usa parted cuando necesites scripting, automatización o discos de más de 2 TB.
- Siempre formatea una nueva partición con
mkfsantes de montarla — una partición sin formato no tiene sistema de archivos. - Usa UUID (no nombres de dispositivo como
/dev/sdb1) en/etc/fstabpara garantizar que los montajes sobrevivan a la reordenación de discos. - Añade
nofaila todas las entradas de fstab que no sean la raíz para que un disco ausente no impida arrancar el sistema. - Verifica cada cambio en fstab con
mount -aantes de reiniciar — una entrada incorrecta puede hacer el sistema imposible de arrancar. - Alinea las particiones a límites de MiB (sintaxis de porcentaje de parted o valores predeterminados de fdisk) para un rendimiento óptimo en SSD y NVMe.