ext4, XFS y Btrfs son los tres sistemas de archivos de propósito general más usados en servidores Linux. Los tres son estables y maduros, pero parten de diseños distintos: ext4 prioriza la sencillez y la compatibilidad, XFS escala bien con archivos grandes y mucho paralelismo, y Btrfs añade snapshots, sumas de verificación de datos y compresión integrados. En esta guía verás en qué se diferencian, los probarás en Ubuntu 24.04 sin necesidad de un disco adicional y sabrás cuál elegir según la carga de trabajo.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Unos 3 GB libres en disco para las pruebas.

Diferencias principales

Característicaext4XFSBtrfs
Predeterminado enUbuntu, DebianRocky Linux, RHEL, AlmaLinuxFedora Workstation, openSUSE (raíz)
Tamaño máximo de archivo16 TiB (bloques de 4 KiB)8 EiB16 EiB
AmpliarSí, en calienteSí, en calienteSí, en caliente
ReducirSí, desmontadoNoSí, en caliente
Sumas de verificaciónSolo metadatosSolo metadatosMetadatos y datos
Snapshots nativosNo (vía LVM)No (vía LVM)Sí
Compresión transparenteNoNoSí (zstd, lzo, zlib)
RAID integradoNo (usa mdadm)No (usa mdadm)RAID 0, 1, 10 estables
Herramienta de reparacióne2fsckxfs_repairbtrfs check (con cautela)
Paquete de utilidadese2fsprogsxfsprogsbtrfs-progs

La fila de reducción es la que más problemas causa en la práctica: un volumen XFS no se puede encoger. Si crees que tendrás que repartir espacio entre volúmenes más adelante, tenlo en cuenta desde el principio.

ext4: la opción segura por defecto

ext4 es la evolución de ext2 y ext3 y lleva más de quince años como sistema por defecto en muchas distribuciones. Tiene journaling, asignación por extents y un conjunto de herramientas que cualquier administrador conoce.

Puntos fuertes:

  • Muy probado y predecible; es difícil encontrar un caso en el que dé problemas.
  • Se puede reducir (desmontado) y ampliar (en caliente) con resize2fs.
  • e2fsck repara bien la mayoría de daños tras un corte de corriente.
  • Buen rendimiento general en discos pequeños y medianos.

Limitaciones:

  • El número de inodos se fija al crear el sistema de archivos. Con millones de archivos muy pequeños (cachés, colas de correo) puedes quedarte sin inodos con espacio libre.
  • No protege los datos con sumas de verificación: detecta corrupción de metadatos, no de contenido.
  • Sin snapshots ni compresión.

Úsalo para: el disco del sistema, servidores web, bases de datos de tamaño medio y, en general, cuando no tengas un motivo concreto para elegir otro.

Por defecto ext4 reserva el 5 % del espacio para root. En un disco de datos grande puedes reducirlo al 1 % para recuperar espacio (no lo hagas en el disco raíz):

sudo tune2fs -m 1 /dev/vdb1

XFS: rendimiento con archivos grandes y mucha concurrencia

XFS nació en SGI para estaciones de trabajo con grandes volúmenes de datos y es el predeterminado en la familia RHEL. Divide el sistema de archivos en grupos de asignación que se gestionan en paralelo, lo que le permite aprovechar muchos hilos escribiendo a la vez.

Puntos fuertes:

  • Excelente con archivos grandes y E/S paralela: almacenamiento de backups, vídeo, imágenes de máquinas virtuales, bases de datos grandes.
  • Inodos dinámicos: no se agotan mientras quede espacio.
  • Crece en caliente con xfs_growfs.
  • Desde la versión 5 del formato, los metadatos llevan sumas de verificación (activado por defecto).

Limitaciones:

  • No se puede reducir. La única forma de encogerlo es crear uno más pequeño y copiar los datos.
  • En cargas con muchísimos archivos diminutos, ext4 suele ser igual o más rápido.
  • xfs_repair requiere desmontar el sistema de archivos.

Úsalo para: volúmenes grandes de datos, servidores de archivos, almacenamiento de backups y cargas con mucho paralelismo.

Btrfs: snapshots, sumas de verificación y compresión

Btrfs es un sistema copy-on-write (CoW): nunca sobrescribe los datos en su sitio, sino que escribe los bloques nuevos en otro lugar y actualiza las referencias. Sobre esa base ofrece funciones que ext4 y XFS delegan en otras capas.

Puntos fuertes:

  • Snapshots instantáneos de subvolúmenes, útiles antes de una actualización.
  • Sumas de verificación de datos y metadatos; con btrfs scrub detecta corrupción silenciosa y, si hay RAID 1, la corrige.
  • Compresión transparente con zstd, que ahorra espacio en logs y texto.
  • Añadir o quitar discos y redimensionar en caliente.

Limitaciones:

  • El copy-on-write fragmenta archivos que se reescriben en el sitio con frecuencia, como las bases de datos o las imágenes de máquinas virtuales. Para esos directorios se suele desactivar CoW (chattr +C en un directorio vacío).
  • Los perfiles RAID 5 y RAID 6 de Btrfs siguen sin recomendarse para producción.
  • Informa del espacio libre de forma menos intuitiva: usa btrfs filesystem usage en lugar de fiarte solo de df.

Úsalo para: sistemas donde quieras snapshots baratos antes de cambios, almacenamiento de datos que valga la pena proteger con sumas de verificación y volúmenes que se beneficien de la compresión.

Probar los tres sistemas de archivos

Puedes experimentar con los tres sin tocar ningún disco real, usando archivos como dispositivos loop. Ubuntu Server trae las utilidades de los tres; si falta alguna, instálala:

sudo apt install e2fsprogs xfsprogs btrfs-progs

Crea tres archivos de 1 GB en /var/tmp:

sudo truncate -s 1G /var/tmp/ext4.img /var/tmp/xfs.img /var/tmp/btrfs.img

Crear y montar ext4

sudo mkfs.ext4 -L prueba-ext4 /var/tmp/ext4.img
sudo mkdir -p /mnt/ext4
sudo mount -o loop /var/tmp/ext4.img /mnt/ext4

Consulta sus parámetros, incluido el número de inodos disponibles:

sudo tune2fs -l /var/tmp/ext4.img | grep -E 'Inode count|Block size|Reserved block count'
df -i /mnt/ext4

Crear y montar XFS

sudo mkfs.xfs -L prueba-xfs /var/tmp/xfs.img
sudo mkdir -p /mnt/xfs
sudo mount -o loop /var/tmp/xfs.img /mnt/xfs
xfs_info /mnt/xfs

La salida de xfs_info muestra agcount, el número de grupos de asignación, y crc=1, que indica que los metadatos tienen sumas de verificación:

meta-data=/dev/loop1             isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1
...

Crear y montar Btrfs con compresión

sudo mkfs.btrfs -L prueba-btrfs /var/tmp/btrfs.img
sudo mkdir -p /mnt/btrfs
sudo mount -o loop,compress=zstd /var/tmp/btrfs.img /mnt/btrfs

Crea un subvolumen, escribe algo en él y haz un snapshot de solo lectura:

sudo btrfs subvolume create /mnt/btrfs/datos
echo "versión 1" | sudo tee /mnt/btrfs/datos/config.txt
sudo btrfs subvolume snapshot -r /mnt/btrfs/datos /mnt/btrfs/datos-snap1
sudo btrfs subvolume list /mnt/btrfs
ID 256 gen 9 top level 5 path datos
ID 257 gen 10 top level 5 path datos-snap1

Modifica el archivo original y comprueba que el snapshot conserva la versión anterior:

echo "versión 2" | sudo tee /mnt/btrfs/datos/config.txt
cat /mnt/btrfs/datos-snap1/config.txt
versión 1

Revisa el uso real del espacio y lanza una verificación de integridad:

sudo btrfs filesystem usage /mnt/btrfs
sudo btrfs scrub start -B /mnt/btrfs

La opción -B hace que scrub espere a terminar y muestre el resumen, que debería indicar no errors found.

Comparar el redimensionado

Esta es la diferencia práctica más importante entre los tres. Amplía cada archivo a 2 GB y haz crecer el sistema de archivos en caliente:

sudo truncate -s 2G /var/tmp/ext4.img /var/tmp/xfs.img /var/tmp/btrfs.img
sudo losetup -c "$(findmnt -no SOURCE /mnt/ext4)"
sudo losetup -c "$(findmnt -no SOURCE /mnt/xfs)"
sudo losetup -c "$(findmnt -no SOURCE /mnt/btrfs)"
sudo resize2fs "$(findmnt -no SOURCE /mnt/ext4)"
sudo xfs_growfs /mnt/xfs
sudo btrfs filesystem resize max /mnt/btrfs
df -h /mnt/ext4 /mnt/xfs /mnt/btrfs

losetup -c hace que el dispositivo loop detecte el nuevo tamaño del archivo. Los tres crecen sin desmontar. Ahora intenta reducir Btrfs a 1,5 GB en caliente:

sudo btrfs filesystem resize 1500m /mnt/btrfs

Btrfs lo permite montado. ext4 también se puede reducir, pero solo desmontado y tras un e2fsck -f. Para XFS no existe ninguna orden equivalente.

Limpiar

sudo umount /mnt/ext4 /mnt/xfs /mnt/btrfs
sudo rm /var/tmp/ext4.img /var/tmp/xfs.img /var/tmp/btrfs.img
sudo rmdir /mnt/ext4 /mnt/xfs /mnt/btrfs

Cuál elegir

Caso de usoRecomendaciónMotivo
Disco del sistema en Ubuntu o Debianext4Es el que usa el instalador y el mejor soportado
Disco del sistema en Rocky Linux o RHELXFSPredeterminado y soportado por el fabricante
Servidor web o de aplicacionesext4Simple, rápido y fácil de reparar
MySQL, MariaDB o PostgreSQLext4 o XFSRendimiento consistente; evita CoW en los datos
Volúmenes de backups o archivos grandesXFSEscala bien con archivos grandes y E/S paralela
Muchos millones de archivos pequeñosXFS o ext4 con más inodosXFS no agota inodos; en ext4 usa mkfs.ext4 -i
Snapshots antes de actualizarBtrfsSnapshots instantáneos sin LVM
Almacenamiento donde importa detectar corrupciónBtrfs (RAID 1)Sumas de verificación de datos y autocorrección con scrub
Volumen que quizá tengas que reducirext4 o BtrfsXFS no se puede encoger

Si dudas, elige ext4. Si necesitas snapshots sobre ext4 o XFS, combínalos con LVM, que ofrece snapshots a nivel de bloque.

Cambiar de sistema de archivos

No hay conversión en el sitio segura entre ext4 y XFS. El procedimiento fiable es siempre el mismo:

  1. Haz una copia de seguridad completa y verifica que se puede restaurar.
  2. Crea el nuevo sistema de archivos en otro disco o volumen.
  3. Copia los datos conservando permisos, ACL y atributos extendidos:
sudo rsync -aHAX --info=progress2 /origen/ /destino/
  1. Actualiza el UUID y el tipo en /etc/fstab, recarga con sudo systemctl daemon-reload y prueba con sudo mount -a antes de reiniciar.

Existe btrfs-convert para pasar de ext4 a Btrfs en el sitio, pero hazlo solo con una copia de seguridad a mano.

Conclusión

ext4 es la opción predeterminada razonable para casi todo, XFS rinde mejor con volúmenes grandes y mucho paralelismo aunque no se puede reducir, y Btrfs aporta snapshots, compresión y sumas de verificación de datos a cambio de más complejidad. Como siguientes pasos, puedes particionar y formatear un disco nuevo con fdisk o parted, montar el volumen de forma persistente en /etc/fstab o usar LVM para poder ampliar el sistema de archivos más adelante.