Migración de ext4 a BTRFS: Mi experiencia con Debian 12
Recientemente me embarqué en la aventura de migrar mi sistema Debian 12 del tradicional sistema de archivos ext4 a BTRFS. En este artículo, comparto mi experiencia completa, desde la planificación hasta la implementación final, incluyendo los obstáculos que encontré y cómo los superé.
¿Por qué migrar a BTRFS?
Antes de entrar en los detalles técnicos, quiero explicar brevemente por qué decidí dar este salto:
- Instantáneas (snapshots): La capacidad de crear puntos de restauración del sistema de forma rápida y eficiente.
- Compresión transparente: Ahorro de espacio en disco sin sacrificar rendimiento.
- Checksums para integridad: Protección automática contra la corrupción silenciosa de datos.
- Balanceo inteligente: Redistribución de datos que optimiza el uso del almacenamiento.
- Preparación para el futuro: BTRFS sigue evolucionando con nuevas características.
Mi configuración inicial
Mi sistema contaba con la siguiente estructura:
/dev/sdb1 - 512M - Partición EFI
/dev/sdb2 - 58.8G - Partición raíz (ext4)
/dev/sdb3 - 15.6G - Partición swap
/dev/sdb4 - 158G - Partición home (ext4)
Preparación: Lo primero es el respaldo
Como cualquier operación que modifica los sistemas de archivos, un respaldo completo es absolutamente necesario. Utilicé una herramienta robusta como ddrescue
para crear una imagen bit a bit del disco:
sudo ddrescue -dDfnv /dev/sdb /media/mint/hdd_2tb/pix_ssd.img /home/mint/Desktop/pix_ssd.log
Este paso me llevó aproximadamente una hora, pero me dio la tranquilidad de poder recuperar todo en caso de desastre.
Primer intento: La conversión directa (que no funcionó)
Mi primer enfoque fue utilizar la herramienta btrfs-convert
, que promete una conversión in-situ de ext4 a BTRFS:
sudo btrfs-convert /dev/sdb2 # Partición raíz
sudo btrfs-convert /dev/sdb4 # Partición home
La conversión en sí funcionó sin errores, y procedí a crear los subvolúmenes necesarios:
sudo btrfs subvolume snapshot /media/mint/6b6a90ad-5b76-4951-9e8e-c748321dfe37/datos /media/mint/6b6a90ad-5b76-4951-9e8e-c748321dfe37/@home
Modifiqué el fstab
y la configuración de GRUB para que reconocieran los nuevos sistemas BTRFS y sus subvolúmenes. Sin embargo, al reiniciar, me encontré con que el sistema era inaccesible. El problema principal: los datos de usuario no estaban en las rutas esperadas dentro de la estructura de subvolúmenes.
Segundo intento: El enfoque definitivo
Después del fracaso inicial, opté por un enfoque más radical pero controlado:
1. Reorganización completa de particiones
Decidí consolidar mi partición raíz y home en una única partición BTRFS grande, manteniendo separadas solo la partición EFI y swap:
sudo mkfs.btrfs -L rootfs /dev/sdb2 # Nueva partición grande de 216.8G
2. Creación de la estructura de subvolúmenes
En BTRFS, los subvolúmenes son fundamentales para una gestión eficiente:
sudo mount /dev/sdb2 /mnt
sudo btrfs subvolume create /mnt/@ # Subvolumen para /
sudo btrfs subvolume create /mnt/@home # Subvolumen para /home
3. Transferencia de datos desde el respaldo
Utilicé rsync
para preservar todos los atributos y permisos de los archivos:
# Montar los subvolúmenes en puntos temporales
sudo mount -o subvol=@ /dev/sdb2 /mnt/root_mount
sudo mount -o subvol=@home /dev/sdb2 /mnt/home_mount
# Copiar los datos preservando atributos
sudo rsync -axHAWXS --numeric-ids --info=progress2 /media/mint/be512e73-0c9c-4f3a-bc33-f18e77d8e3d2/ /mnt/root_mount/
sudo rsync -axHAWXS --numeric-ids --info=progress2 /media/mint/01f7dd63-a05f-4c7f-b04a-83ddd39de834/ /mnt/home_mount/
4. Actualización de la configuración del sistema
El archivo fstab
requería ser actualizado para la nueva estructura:
UUID=b5a97c2c-4fd8-4aa9-9f0f-47d0937f880d / btrfs defaults,subvol=@,ssd,noatime,space_cache=v2,compress=zstd 0 1
UUID=b5a97c2c-4fd8-4aa9-9f0f-47d0937f880d /home btrfs defaults,subvol=@home,ssd,noatime,space_cache=v2,compress=zstd 0 2
UUID=C6BC-68D3 /boot/efi vfat umask=0077 0 1
UUID=6287ad64-b356-415e-b5b1-b36047a0dd00 none swap sw 0 0
Observa que tanto la partición raíz como home tienen el mismo UUID, ya que ahora están en la misma partición pero en diferentes subvolúmenes.
También tuve que actualizar la configuración de GRUB para reconocer BTRFS:
GRUB_CMDLINE_LINUX_DEFAULT="quiet rootflags=subvol=@"
GRUB_CMDLINE_LINUX="root=UUID=b5a97c2c-4fd8-4aa9-9f0f-47d0937f880d"
5. Finalización desde un entorno chroot
Para finalizar la migración, entré en un entorno chroot en el nuevo sistema:
sudo mount --bind /dev /mnt/root_mount/dev
sudo mount --bind /proc /mnt/root_mount/proc
sudo mount --bind /sys /mnt/root_mount/sys
sudo mount /dev/sdb1 /mnt/root_mount/boot/efi
sudo chroot /mnt/root_mount
Dentro del chroot, instalé las herramientas BTRFS, actualicé el initramfs y reinstalé GRUB:
apt install btrfs-progs
update-initramfs -u -k all
update-grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
Resultado: Un sistema renovado
Después de reiniciar, el sistema arrancó perfectamente con BTRFS. La estructura unificada de particiones quedó así:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 217G 117G 100G 55% /
/dev/sda2 217G 117G 100G 55% /home
/dev/sda1 511M 28M 484M 6% /boot/efi
Optimizaciones posteriores
Una vez con el sistema funcionando, implementé algunas optimizaciones:
-
Balanceo de datos: Para distribuir equitativamente los datos en el disco:
sudo btrfs balance start /
-
Verificación de integridad: Para comprobar la integridad de los datos:
sudo btrfs scrub start /
-
Compresión: Ya habilitada en fstab con la opción
compress=zstd
, que ofrece una buena relación entre nivel de compresión y uso de CPU.
Lecciones aprendidas
Esta migración me dejó varias enseñanzas importantes:
-
Siempre hacer un respaldo completo: Sin mi imagen de respaldo, habría perdido datos cuando el primer intento falló.
-
La conversión directa puede ser problemática: Aunque
btrfs-convert
funciona técnicamente, las estructuras resultantes pueden no ser óptimas para un sistema en producción. -
El enfoque de recreación es más seguro: Recrear el sistema de archivos desde cero da más control sobre la estructura final.
-
La documentación es clave: Investigar a fondo antes de empezar me permitió anticipar muchos problemas.
-
Tiempo de migración: En total, el proceso me llevó unas 11 horas, incluyendo planificación, respaldos y dos intentos.
¿Valió la pena?
Puedo decir que absolutamente sí. La capacidad de crear instantáneas rápidas del sistema, la compresión transparente y la detección de corrupción son características que ya he aprovechado. Además, el sistema parece funcionar con la misma velocidad que antes, sin penalizaciones de rendimiento perceptibles.
Referencias y Recursos Útiles sobre Btrfs
Para aquellos que quieran profundizar más en BTRFS o realizar su propia migración, he recopilado estos recursos que me fueron extremadamente útiles durante mi proceso.
Documentación Oficial de Btrfs
- Wiki de Btrfs en kernel.org - La fuente definitiva con explicaciones detalladas sobre subvolúmenes, snapshots, compresión y opciones de RAID.
- Manpage oficial de
btrfs
- Referencia completa de los comandos disponibles.
Tutoriales y Guías Prácticas
- Btrfs en ArchWiki - Aunque está orientada a Arch Linux, esta guía contiene ejemplos prácticos aplicables a cualquier distribución.
- Guía de Btrfs en Debian - Información específica para usuarios de Debian como yo.
- Artículos sobre Btrfs en Fedora Magazine: Publicaciones sobre el uso de Btrfs en Fedora.
- Trabajando con subvolúmenes en Btrfs - Fedora Magazine: Explicación detallada sobre cómo organizar y utilizar subvolúmenes en Fedora.
Videos y Cursos en Línea
- Introducción a Btrfs en YouTube - Hay varios canales con tutoriales visuales que pueden ayudar a entender los conceptos.
Herramientas Útiles
- Timeshift con soporte para Btrfs - Una herramienta gráfica para gestionar snapshots fácilmente.
- Snapper - Otra excelente utilidad para administrar snapshots, muy usada en openSUSE.
Recursos Adicionales
Recuperación de Datos con ddrescue
Si estás preocupado por la posibilidad de pérdida de datos durante la migración, estas referencias sobre ddrescue
son fundamentales:
- Manual oficial de GNU ddrescue - Explicación detallada de todas las opciones.
- Guía de uso de ddrescue en ArchWiki - Ejemplos prácticos de uso para respaldos y recuperación.
Creación de un Live USB para la Migración
Trabajar desde un Live USB fue crucial en mi proceso:
- Guía de creación de un Live USB con
dd
- El método que usé para crear mi USB de Linux Mint. - Ventoy - Una alternativa que permite tener múltiples ISOs en un solo USB.
Configuración de fstab
para Btrfs
El archivo /etc/fstab
es crítico en la migración. Estos recursos me ayudaron a configurarlo correctamente:
- Manpage de
fstab
- Explicación oficial de la sintaxis y opciones. - Ejemplo de configuración de Btrfs en
/etc/fstab
- Guía práctica para montar subvolúmenes correctamente.
Configuración de GRUB con Btrfs
La configuración del gestor de arranque es fundamental para trabajar con subvolúmenes Btrfs:
- Manpage de
grub
- Documentación completa del gestor de arranque. - Configuración de GRUB con Btrfs en ArchWiki - Guía específica para Btrfs.
Montaje de Subvolúmenes Btrfs con mount
Para trabajar con subvolúmenes, estos recursos son esenciales:
- Manpage de
mount
- Referencia completa de opciones de montaje. - Opciones de montaje recomendadas para Btrfs - Guía específica para optimizar el rendimiento con opciones como compresión, noatime, etc.