Gestión de Discos y Particiones en Linux: Guía Completa de fdisk, parted y gdisk

La gestión efectiva de discos y particiones es una habilidad fundamental para cada administrador de sistemas Linux. Ya sea que esté configurando un nuevo servidor, expandiendo la capacidad de almacenamiento o reorganizando su diseño de disco, comprender las herramientas principales de particionamiento—fdisk, parted y gdisk—es esencial para mantener una infraestructura de almacenamiento robusta y escalable.

Esta guía completa le guía a través de todo lo que necesita saber sobre el particionamiento de discos en Linux, desde conceptos básicos hasta técnicas avanzadas utilizando las tres principales utilidades de particionamiento disponibles en sistemas Linux modernos.

Introducción al Particionamiento de Discos en Linux

El particionamiento de discos es el proceso de dividir un dispositivo de almacenamiento físico en secciones lógicas separadas llamadas particiones. Cada partición funciona como un disco independiente, permitiéndole organizar datos, instalar múltiples sistemas operativos o implementar diferentes sistemas de archivos en un solo disco físico.

Linux admite múltiples formatos de tabla de particiones, siendo los más comunes:

  • MBR (Master Boot Record): Formato de tabla de particiones legacy que admite hasta 4 particiones primarias y discos de hasta 2TB
  • GPT (GUID Partition Table): Formato de tabla de particiones moderno que admite hasta 128 particiones y discos mayores a 2TB

Comprender qué herramienta usar para qué tipo de tabla de particiones es crucial:

  • fdisk: Herramienta tradicional para particiones MBR, las versiones más nuevas admiten GPT
  • parted: Herramienta versátil que admite tanto MBR como GPT con características avanzadas
  • gdisk: Herramienta especializada diseñada específicamente para particiones GPT

Requisitos Previos

Antes de trabajar con particiones de disco, asegúrese de tener:

  • Acceso root o sudo a su sistema Linux
  • Comprensión básica de la interfaz de línea de comandos de Linux
  • Conocimiento de su configuración actual de disco
  • Respaldo completo de todos los datos importantes (las operaciones de particionamiento pueden resultar en pérdida de datos)
  • Comprensión de la diferencia entre /dev/sda, /dev/nvme0n1 y otras convenciones de nomenclatura de dispositivos

Advertencia Crítica de Seguridad

PELIGRO: Las operaciones incorrectas de particionamiento pueden resultar en pérdida completa de datos. Siempre:

  1. Cree respaldos completos antes de modificar particiones
  2. Verifique dos veces los nombres de dispositivo antes de ejecutar comandos
  3. Verifique las tablas de particiones antes de escribir cambios
  4. Desmonte las particiones antes de modificarlas
  5. Pruebe los procedimientos en sistemas que no sean de producción primero

Comprensión de la Nomenclatura de Dispositivos de Disco en Linux

Antes de sumergirse en las herramientas de particionamiento, familiarícese con las convenciones de nomenclatura de dispositivos de disco de Linux:

  • /dev/sda, /dev/sdb: Unidades SATA/SCSI (nomenclatura tradicional)
  • /dev/nvme0n1, /dev/nvme1n1: Unidades de estado sólido NVMe
  • /dev/vda, /dev/vdb: Discos virtuales en entornos KVM/QEMU
  • /dev/xvda: Discos virtuales en entornos Xen

Las particiones se numeran secuencialmente:

  • /dev/sda1: Primera partición en la primera unidad SATA
  • /dev/nvme0n1p1: Primera partición en la primera unidad NVMe
  • /dev/sda2: Segunda partición en la primera unidad SATA

Listado de Discos y Particiones Disponibles

Antes de crear o modificar particiones, identifique sus dispositivos de almacenamiento disponibles.

Ver Todos los Dispositivos de Bloque

lsblk

Este comando muestra todos los dispositivos de bloque en formato de árbol:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   100G  0 disk
├─sda1   8:1    0     1G  0 part /boot
├─sda2   8:2    0    10G  0 part [SWAP]
└─sda3   8:3    0    89G  0 part /
sdb      8:16   0   500G  0 disk

Listar Tablas de Particiones

sudo fdisk -l

Esto proporciona información detallada sobre todos los discos y sus tablas de particiones.

Verificar Información del Disco con parted

sudo parted -l

Este comando muestra información completa de particiones incluyendo el tipo de tabla de particiones.

Trabajando con fdisk: Particionamiento MBR y GPT

fdisk es la utilidad de particionamiento de disco más ampliamente utilizada en sistemas Linux. Aunque históricamente diseñada para particiones MBR, las versiones modernas también admiten GPT.

Iniciando el Modo Interactivo de fdisk

sudo fdisk /dev/sdb

Reemplace /dev/sdb con su dispositivo de disco destino.

Comandos Esenciales de fdisk

Una vez en el modo interactivo de fdisk:

  • m: Mostrar menú de ayuda
  • p: Imprimir tabla de particiones actual
  • n: Crear nueva partición
  • d: Eliminar partición
  • t: Cambiar tipo de partición
  • w: Escribir cambios al disco
  • q: Salir sin guardar
  • g: Crear nueva tabla de particiones GPT
  • o: Crear nueva tabla de particiones MBR

Creando una Nueva Tabla de Particiones GPT con fdisk

sudo fdisk /dev/sdb

Dentro de fdisk:

Command (m for help): g
Created a new GPT disklabel (GUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Creando una Nueva Partición con fdisk

sudo fdisk /dev/sdb

Dentro de fdisk:

Command (m for help): n
Partition number (1-128, default 1): 1
First sector (2048-1048575999, default 2048): [Press Enter]
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1048575999, default 1048575999): +100G

Created a new partition 1 of type 'Linux filesystem' and of size 100 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Cambiando el Tipo de Partición con fdisk

sudo fdisk /dev/sdb

Dentro de fdisk:

Command (m for help): t
Partition number (1-128, default 1): 1
Partition type or alias (type L to list all): 8e

Changed type of partition 'Linux filesystem' to 'Linux LVM'.

Command (m for help): w

Códigos de tipo de partición comunes:

  • 83: Sistema de archivos Linux
  • 8e: Linux LVM
  • 82: Linux swap
  • fd: Linux RAID auto

Ejemplo Completo de fdisk: Creando Múltiples Particiones

sudo fdisk /dev/sdb

Sesión interactiva:

Command (m for help): g
Created a new GPT disklabel.

Command (m for help): n
Partition number (1-128, default 1): [Enter]
First sector: [Enter]
Last sector: +50G
Created a new partition 1 of type 'Linux filesystem' and of size 50 GiB.

Command (m for help): n
Partition number (2-128, default 2): [Enter]
First sector: [Enter]
Last sector: +100G
Created a new partition 2 of type 'Linux filesystem' and of size 100 GiB.

Command (m for help): n
Partition number (3-128, default 3): [Enter]
First sector: [Enter]
Last sector: [Enter]
Created a new partition 3 of type 'Linux filesystem' and of size 350 GiB.

Command (m for help): p
Disk /dev/sdb: 500 GiB
Device       Start        End    Sectors  Size Type
/dev/sdb1     2048  104859647  104857600   50G Linux filesystem
/dev/sdb2 104859648  314574847  209715200  100G Linux filesystem
/dev/sdb3 314574848 1048575999  733999152  350G Linux filesystem

Command (m for help): w
The partition table has been altered.

Trabajando con parted: Gestión Avanzada de Particiones

parted es una potente herramienta de particionamiento que admite tablas de particiones tanto MBR como GPT con características más avanzadas que fdisk.

Visualizando Información de Particiones con parted

sudo parted /dev/sdb print

Salida:

Model: ATA Samsung SSD 860 (scsi)
Disk /dev/sdb: 537GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  53.7GB  53.7GB  ext4         primary
 2      53.7GB  161GB   107GB   ext4         primary
 3      161GB   537GB   376GB   ext4         primary

Creando Tabla de Particiones GPT con parted

sudo parted /dev/sdb mklabel gpt

Para tabla de particiones MBR:

sudo parted /dev/sdb mklabel msdos

Creando Particiones con parted

parted admite tanto modos interactivos como de línea de comandos.

Modo Interactivo

sudo parted /dev/sdb

Dentro de parted:

(parted) mkpart primary ext4 0% 50GB
(parted) mkpart primary ext4 50GB 150GB
(parted) mkpart primary ext4 150GB 100%
(parted) print
(parted) quit

Modo de Línea de Comandos (Scriptable)

sudo parted /dev/sdb mkpart primary ext4 0% 50GB
sudo parted /dev/sdb mkpart primary ext4 50GB 150GB
sudo parted /dev/sdb mkpart primary ext4 150GB 100%

Redimensionando Particiones con parted

ADVERTENCIA: Siempre respalde los datos antes de redimensionar particiones.

sudo parted /dev/sdb

Dentro de parted:

(parted) resizepart 3 200GB
(parted) quit

Esto redimensiona la partición 3 para terminar en 200GB. Tenga en cuenta que esto solo modifica la tabla de particiones; necesitará redimensionar el sistema de archivos por separado.

Eliminando Particiones con parted

sudo parted /dev/sdb rm 2

Esto elimina la partición 2 de /dev/sdb.

Configurando Banderas de Partición con parted

sudo parted /dev/sdb set 1 boot on
sudo parted /dev/sdb set 2 lvm on

Banderas comunes:

  • boot: Partición de arranque
  • lvm: Partición LVM
  • raid: Partición RAID
  • swap: Partición swap

Trabajando con gdisk: Herramienta Específica para GPT

gdisk está específicamente diseñado para tablas de particiones GPT y ofrece características no disponibles en fdisk o parted.

Iniciando el Modo Interactivo de gdisk

sudo gdisk /dev/sdb

Comandos Esenciales de gdisk

  • p: Imprimir tabla de particiones
  • n: Crear nueva partición
  • d: Eliminar partición
  • t: Cambiar tipo de partición
  • w: Escribir cambios y salir
  • q: Salir sin guardar
  • i: Mostrar información detallada de partición
  • x: Entrar en modo experto
  • ?: Mostrar ayuda

Creando Particiones GPT con gdisk

sudo gdisk /dev/sdb

Sesión interactiva:

Command (? for help): n
Partition number (1-128, default 1): 1
First sector: [Press Enter]
Last sector: +100G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): [Press Enter]

Command (? for help): n
Partition number (2-128, default 2): 2
First sector: [Press Enter]
Last sector: +200G
Hex code or GUID: 8e00

Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       209717247   100.0 GiB   8300  Linux filesystem
   2       209717248       629147647   200.0 GiB   8E00  Linux LVM

Command (? for help): w
Do you want to proceed? (Y/N): Y

Códigos de tipo gdisk comunes:

  • 8300: Sistema de archivos Linux
  • 8200: Linux swap
  • 8e00: Linux LVM
  • fd00: Linux RAID
  • ef00: EFI System Partition

Convirtiendo MBR a GPT con gdisk

ADVERTENCIA: Respalde todos los datos antes de la conversión.

sudo gdisk /dev/sdb

gdisk detecta automáticamente MBR y ofrece conversión:

Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.

Command (? for help): w

Optimización de Alineación de Particiones con gdisk

gdisk alinea automáticamente las particiones a límites óptimos para el rendimiento de SSD. Verificar alineación:

sudo gdisk /dev/sdb
Command (? for help): x
Expert command (? for help): l
Enter the sector alignment value (1-65536, default = 2048): [Press Enter]
Expert command (? for help): m
Command (? for help): w

Creando Sistemas de Archivos en Nuevas Particiones

Después de crear particiones, debe crear sistemas de archivos antes de usarlas.

Creando Sistema de Archivos ext4

sudo mkfs.ext4 /dev/sdb1

Con opciones personalizadas:

sudo mkfs.ext4 -L data_partition -m 1 /dev/sdb1

Opciones:

  • -L: Establecer etiqueta de partición
  • -m: Porcentaje de bloques reservados (predeterminado 5%, reducir a 1% para particiones de datos)

Creando Sistema de Archivos XFS

sudo mkfs.xfs /dev/sdb2

Con etiqueta:

sudo mkfs.xfs -L backup_partition /dev/sdb2

Creando Sistema de Archivos ext3

sudo mkfs.ext3 /dev/sdb3

Creando Sistema de Archivos Btrfs

sudo mkfs.btrfs /dev/sdb4

Creando Partición Swap

sudo mkswap /dev/sdb5
sudo swapon /dev/sdb5

Verificar swap:

sudo swapon --show

Montando y Usando Nuevas Particiones

Creando Punto de Montaje

sudo mkdir -p /mnt/data

Montando Partición Temporalmente

sudo mount /dev/sdb1 /mnt/data

Verificar:

df -h /mnt/data

Montando con Opciones Específicas

sudo mount -o defaults,noatime /dev/sdb1 /mnt/data

Desmontando Partición

sudo umount /mnt/data

Si está ocupada:

sudo fuser -m /mnt/data
sudo umount /mnt/data

Montaje Permanente con /etc/fstab

Editar /etc/fstab:

sudo nano /etc/fstab

Agregar entrada:

/dev/sdb1  /mnt/data  ext4  defaults,noatime  0  2

Usando UUID (recomendado):

sudo blkid /dev/sdb1

Salida:

/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"

Agregar a /etc/fstab:

UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /mnt/data  ext4  defaults,noatime  0  2

Probar configuración de fstab:

sudo mount -a

Verificación y Pruebas

Verificar Tabla de Particiones

sudo fdisk -l /dev/sdb
sudo parted /dev/sdb print
sudo gdisk -l /dev/sdb

Verificar Sistema de Archivos

sudo fsck -n /dev/sdb1

Opciones:

  • -n: Sin cambios, solo verificar
  • -y: Corregir errores automáticamente

Verificar Puntos de Montaje

df -h
mount | grep sdb
lsblk -f

Probar Rendimiento de Lectura/Escritura

sudo dd if=/dev/zero of=/mnt/data/testfile bs=1G count=1 oflag=direct
sudo rm /mnt/data/testfile

Verificar Alineación de Particiones

sudo parted /dev/sdb align-check optimal 1

Solución de Problemas Comunes

Problema: "Device or resource busy" Al Desmontar

Solución:

# Encontrar procesos usando la partición
sudo fuser -m /mnt/data

# Matar procesos si es necesario
sudo fuser -km /mnt/data

# Desmontar
sudo umount /mnt/data

O usar desmontaje perezoso:

sudo umount -l /mnt/data

Problema: Partición No Detectada Después de la Creación

Solución:

Forzar al kernel a releer la tabla de particiones:

sudo partprobe /dev/sdb

O:

sudo blockdev --rereadpt /dev/sdb

Problema: Error "GPT PMBR size mismatch"

Esto ocurre cuando el disco fue clonado o redimensionado.

Solución:

sudo gdisk /dev/sdb
Command (? for help): x
Expert command (? for help): e
Expert command (? for help): w

Problema: Advertencias de Alineación en parted

Solución:

Recrear partición con alineación adecuada:

sudo parted /dev/sdb
(parted) rm 1
(parted) mkpart primary ext4 0% 100GB
(parted) align-check optimal 1

Problema: No Se Puede Escribir Tabla de Particiones

Solución:

Asegurarse de que las particiones estén desmontadas:

sudo umount /dev/sdb1
sudo umount /dev/sdb2

Desactivar swap si la partición es swap:

sudo swapoff /dev/sdb5

Problema: Partición Muestra Tamaño Incorrecto Después de Extender

Solución:

Redimensionar el sistema de archivos después de extender la partición:

Para ext4:

sudo resize2fs /dev/sdb1

Para XFS:

sudo xfs_growfs /mnt/data

Mejores Prácticas para la Gestión de Particiones de Disco

1. Siempre Use UUID en /etc/fstab

Los nombres de dispositivo pueden cambiar entre reinicios; los UUID permanecen constantes:

# Encontrar UUID
sudo blkid /dev/sdb1

# Usar en fstab
UUID=xxx-xxx-xxx /mnt/data ext4 defaults 0 2

2. Alinear Particiones para Rendimiento de SSD

Las herramientas modernas de particionamiento alinean automáticamente a límites de 1MB, óptimo para SSDs:

# Verificar alineación
sudo parted /dev/sdb align-check optimal 1

3. Dejar Espacio Reservado en SSDs

Dejar un 10-20% de espacio sin particionar en SSDs para sobreaprovisionamiento y longevidad:

# En lugar de usar 100%, usar 90%
sudo parted /dev/sdb mkpart primary ext4 0% 90%

4. Usar GPT para Sistemas Modernos

GPT ofrece ventajas sobre MBR:

  • Admite discos mayores a 2TB
  • Hasta 128 particiones
  • Tablas de particiones redundantes
  • Sumas de verificación CRC32 para integridad

5. Documentar Diseños de Particiones

Mantener documentación de propósitos y configuraciones de particiones:

# Crear archivo de documentación
sudo parted -l > /root/partition_layout_$(date +%Y%m%d).txt
sudo lsblk -f >> /root/partition_layout_$(date +%Y%m%d).txt

6. Verificaciones Regulares del Sistema de Archivos

Programar verificaciones regulares del sistema de archivos:

# Establecer recuento máximo de montaje antes de verificación
sudo tune2fs -c 30 /dev/sdb1

# Establecer intervalo entre verificaciones
sudo tune2fs -i 90d /dev/sdb1

7. Usar Tipos de Sistema de Archivos Apropiados

Elegir sistemas de archivos basados en el caso de uso:

  • ext4: Propósito general, ampliamente compatible
  • XFS: Archivos grandes, alto rendimiento
  • Btrfs: Características avanzadas, snapshots
  • swap: Extensión de memoria virtual

8. Monitorear Salud del Disco

Verificar regularmente la salud del disco con SMART:

sudo smartctl -a /dev/sdb

9. Respaldar Antes de Particionar

Siempre crear respaldos completos antes de cualquier operación de particionamiento:

# Respaldar tabla de particiones
sudo sfdisk -d /dev/sdb > sdb_partition_backup.txt

# Restaurar si es necesario
sudo sfdisk /dev/sdb < sdb_partition_backup.txt

10. Probar en Entornos No Productivos

Siempre probar modificaciones de particiones en sistemas de prueba antes de implementar en producción.

Escenarios Avanzados de Particionamiento

Creando Particiones Alineadas para Arrays RAID

sudo parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary ext4 1MiB 100%
(parted) align-check optimal 1
(parted) set 1 raid on
(parted) quit

Particionando Unidades NVMe

Los dispositivos NVMe usan nomenclatura diferente:

# Listar dispositivos NVMe
lsblk | grep nvme

# Particionar unidad NVMe
sudo parted /dev/nvme0n1
(parted) mklabel gpt
(parted) mkpart primary ext4 0% 100%
(parted) quit

# Crear sistema de archivos
sudo mkfs.ext4 /dev/nvme0n1p1

Creando Volúmenes Físicos LVM en Particiones

# Crear partición con tipo LVM
sudo parted /dev/sdb mkpart primary 0% 100%
sudo parted /dev/sdb set 1 lvm on

# Inicializar como volumen físico LVM
sudo pvcreate /dev/sdb1

# Verificar
sudo pvdisplay

Comparando fdisk, parted y gdisk

Cuándo Usar fdisk

  • Tareas simples de particionamiento en discos MBR o GPT
  • Familiarizado con la interfaz tradicional de fdisk
  • Scripting de operaciones básicas de particiones
  • Visualización rápida de tabla de particiones

Ventajas:

  • Ampliamente disponible en todas las distribuciones Linux
  • Interfaz simple e intuitiva
  • Rápido para operaciones básicas

Desventajas:

  • Características avanzadas limitadas
  • Menos preciso que parted para redimensionar

Cuándo Usar parted

  • Redimensionar particiones
  • Scripting de operaciones complejas de particiones
  • Trabajar con discos grandes (> 2TB)
  • Necesidad de colocación precisa de particiones

Ventajas:

  • Admite tanto MBR como GPT
  • Puede redimensionar particiones
  • Excelente para scripting
  • Control preciso a nivel de sector

Desventajas:

  • Escrituras inmediatas (los cambios surten efecto inmediatamente)
  • Curva de aprendizaje más pronunciada
  • Salida más verbosa

Cuándo Usar gdisk

  • Trabajar exclusivamente con tablas de particiones GPT
  • Convertir MBR a GPT
  • Características avanzadas de GPT necesarias
  • Optimización de alineación de particiones

Ventajas:

  • Características específicas de GPT
  • Optimización automática de alineación
  • Conversión segura de MBR a GPT
  • Información detallada de particiones

Desventajas:

  • Solo GPT (sin soporte para MBR)
  • Menos común que fdisk
  • Disponibilidad limitada en sistemas mínimos

Conclusión

Dominar la gestión de discos y particiones con fdisk, parted y gdisk es esencial para la administración efectiva de sistemas Linux. Cada herramienta tiene sus fortalezas: fdisk por simplicidad y disponibilidad generalizada, parted por características avanzadas y scripting, y gdisk por operaciones específicas de GPT.

Conclusiones clave:

  1. Siempre respalde los datos antes de cualquier operación de particionamiento
  2. Use GPT para sistemas modernos y discos grandes
  3. Verifique la alineación para rendimiento óptimo de SSD
  4. Use UUIDs en /etc/fstab para confiabilidad
  5. Elija la herramienta correcta para sus necesidades específicas
  6. Pruebe los cambios en entornos no productivos primero
  7. Documente sus diseños de particiones
  8. Monitoree la salud del disco regularmente

Siguiendo las mejores prácticas y procedimientos descritos en esta guía, puede gestionar con confianza las particiones de disco en sistemas Linux mientras minimiza el riesgo de pérdida de datos y maximiza el rendimiento del almacenamiento.

Recuerde que la gestión adecuada de particiones no se trata solo de competencia técnica—se trata de implementar una infraestructura de almacenamiento segura, confiable y mantenible que apoye las necesidades de su organización tanto ahora como en el futuro.