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ística | ext4 | XFS | Btrfs |
|---|---|---|---|
| Predeterminado en | Ubuntu, Debian | Rocky Linux, RHEL, AlmaLinux | Fedora Workstation, openSUSE (raíz) |
| Tamaño máximo de archivo | 16 TiB (bloques de 4 KiB) | 8 EiB | 16 EiB |
| Ampliar | Sí, en caliente | Sí, en caliente | Sí, en caliente |
| Reducir | Sí, desmontado | No | Sí, en caliente |
| Sumas de verificación | Solo metadatos | Solo metadatos | Metadatos y datos |
| Snapshots nativos | No (vía LVM) | No (vía LVM) | Sí |
| Compresión transparente | No | No | Sí (zstd, lzo, zlib) |
| RAID integrado | No (usa mdadm) | No (usa mdadm) | RAID 0, 1, 10 estables |
| Herramienta de reparación | e2fsck | xfs_repair | btrfs check (con cautela) |
| Paquete de utilidades | e2fsprogs | xfsprogs | btrfs-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. e2fsckrepara 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_repairrequiere 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 scrubdetecta 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 +Cen 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 usageen lugar de fiarte solo dedf.
Ú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 uso | Recomendación | Motivo |
|---|---|---|
| Disco del sistema en Ubuntu o Debian | ext4 | Es el que usa el instalador y el mejor soportado |
| Disco del sistema en Rocky Linux o RHEL | XFS | Predeterminado y soportado por el fabricante |
| Servidor web o de aplicaciones | ext4 | Simple, rápido y fácil de reparar |
| MySQL, MariaDB o PostgreSQL | ext4 o XFS | Rendimiento consistente; evita CoW en los datos |
| Volúmenes de backups o archivos grandes | XFS | Escala bien con archivos grandes y E/S paralela |
| Muchos millones de archivos pequeños | XFS o ext4 con más inodos | XFS no agota inodos; en ext4 usa mkfs.ext4 -i |
| Snapshots antes de actualizar | Btrfs | Snapshots instantáneos sin LVM |
| Almacenamiento donde importa detectar corrupción | Btrfs (RAID 1) | Sumas de verificación de datos y autocorrección con scrub |
| Volumen que quizá tengas que reducir | ext4 o Btrfs | XFS 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:
- Haz una copia de seguridad completa y verifica que se puede restaurar.
- Crea el nuevo sistema de archivos en otro disco o volumen.
- Copia los datos conservando permisos, ACL y atributos extendidos:
sudo rsync -aHAX --info=progress2 /origen/ /destino/
- Actualiza el UUID y el tipo en
/etc/fstab, recarga consudo systemctl daemon-reloady prueba consudo mount -aantes 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.
