BTRFS Balance Bug en Kernel 5.Top 10.X

BTRFS Balance Bug en Kernel 5.Top 10.X
Hay un error en el kernel 5.14.x que hace que un sistema de archivos BTRFS se lance de solo lectura al convertir el perfil de metadatos desde soltero a hacer. El sistema de archivos entra en un estado de solo lectura. Resolver este problema requiere una solución no convencional.

Acerca de los perfiles BTRFS

Una de las excelentes características de BTRFS es la capacidad de usar los diferentes perfiles de RAID. Dado que BTRFS almacena los datos y los metadatos por separado, puede rayar los datos a través de los discos como RAID0 y reflejar todos los metadatos como RAID1. Esta redundancia en los metadatos requiere poco espacio extra. Y esto se recomienda en las configuraciones BTRFS RAID0.

Siempre se ha sugerido duplicar los metadatos, incluso en un solo disco, ya que perder los metadatos significa perder los datos también.

BTRFS puede cambiar un perfil RAID en un sistema en vivo, convirtiendo los datos y los metadatos para proporcionar (o eliminar) la redundancia. Esto ocurre con un balance. Un balance de BTRFS reescribe todos los bloques del sistema de archivos y se ajusta para que coincida con los nuevos perfiles como lo hace.

El bicho

Intenté cambiar el perfil de metadatos en mi disco único desde soltero a hacer para la redundancia.

$ sudo btrfs saldo inicio -mconvert = dup /mnt

El sistema de archivos inmediatamente entró en un estado de solo lectura. El sistema cayó. Cuando se reinició, no pude superar los initramfs de recuperación. No se pueden escribir datos en el disco.

Cuando se interrumpe una operación de equilibrio en el sistema de archivos BTRFS, se reanuda automáticamente la próxima vez que se monte el sistema de archivos. Esto generalmente se puede detener con:

$ sudo monte -o skip_balance, rw /dev /sdx /mnt

Luego, cancele si es necesario usar el siguiente comando:

$ sudo btrfs saldo cancelar /mnt

Sin embargo, el error no solo hizo que el equilibrio se bloqueara, sino que se ignoraron las opciones de montaje para evitar que continúe. Cada vez que se monta el sistema de archivos, el saldo intenta reanudar. Falló y el sistema de archivos pasó a solo lectura. Si encuentra esto, debe iniciar cualquier distribución usando un kernel más antiguo. En mi caso, fue arco con 4.18.

Monte el sistema de archivos con el Kenel más antiguo:

$ sudo monte -o skip_balance, rw /dev /sdx /mnt

Cancelar el saldo:

$ sudo btrfs saldo cancelar /mnt

Realice el saldo nuevamente:

$ sudo btrfs saldo inicio -mconvert = dup /mnt

Una vez que se completa el saldo, puede iniciar de forma segura en un núcleo más nuevo, ahora con metadatos duplicados en el sistema de archivos. Verifique los perfiles utilizados por el sistema de archivos. Verá que tiene dos copias de los metadatos de FileSytem y solo una copia de los datos:

$ sudo BTRFS FI Uso

Conclusión

BTRFS es un sistema de archivos increíble capaz de muchas opciones avanzadas. Sin embargo, al usar BTRFS, debe tener copias de seguridad de trabajo, así como un núcleo de arranque de una distribución LTS para el rescate del sistema. Aunque un equilibrio se puede ejecutar en un sistema de archivos raíz montado, no siempre se recomienda hacer esto. Todavía hay muchos errores en el sistema de archivos. Debe estar preparado para un rescate del sistema de archivos cuando el módulo BTRFS no se haya probado completamente contra los núcleos de borde de sangrado.