BTRFS Balance Bug Bug no kernel 5.Top 10.x

BTRFS Balance Bug Bug no kernel 5.Top 10.x
Há um bug no kernel 5.14.x que faz com que um sistema de arquivos BTRFS vá apenas leitura ao converter o perfil de metadados do solteiro para dup. O sistema de arquivos entra em um estado somente leitura. Resolver esse problema requer uma correção não convencional.

Sobre os perfis BTRFS

Uma das grandes características dos BTRFs é a capacidade de usar os diferentes perfis de ataque. Como o BTRFS armazena os dados e os metadados separadamente, você pode rastrear os dados nos discos como Raid0 e espelhar todos os metadados como RAID1. Esta redundância em metadados ocupa pouco espaço extra. E isso é recomendado nas configurações do BTRFS RAID0.

Sempre foi sugerido duplicar os metadados, mesmo em um único disco, já que perder os metadados significa perder os dados também.

O BTRFS é capaz de alterar um perfil de RAID em um sistema vivo, convertendo os dados e os metadados para fornecer (ou remover) redundância. Isso ocorre com um equilíbrio. Um equilíbrio btrfs reescreva todos os blocos do sistema de arquivos e ajusta para corresponder aos novos perfis como ele.

O inseto

Eu tentei alterar o perfil de metadados no meu único disco de solteiro para dup para a redundância.

$ sudo btrfs balance start -mconvert = dup /mnt

O sistema de arquivos foi imediatamente para um estado somente leitura. O sistema caiu. Quando reiniciado, não consegui superar o initramf de recuperação. Nenhum dado poderia ser gravado no disco.

Quando uma operação de equilíbrio é interrompida no sistema de arquivos BTRFS, ele retoma automaticamente na próxima vez que o sistema de arquivos for montado. Isso geralmente pode ser parado com:

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

Em seguida, cancele, se necessário, usando o seguinte comando:

$ sudo btrfs balance cancel

No entanto, o bug não apenas fez com que o saldo trave, mas as opções de montagem para impedir que ele continuassem foram ignoradas. Toda vez que o sistema de arquivos é montado, o equilíbrio tenta retomar. Falhou e o sistema de arquivos continuou somente leitura. Se você encontrar isso, você deve inicializar qualquer distro usando um kernel mais antigo. No meu caso, foi arco com 4.18.

Monte o sistema de arquivos com o Kenel mais antigo:

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

Cancelar o saldo:

$ sudo btrfs balance cancel

Execute o equilíbrio novamente:

$ sudo btrfs balance start -mconvert = dup /mnt

Depois que o saldo estiver concluído, você pode inicializar com segurança em um kernel mais recente, agora com metadados duplicados no sistema de arquivos. Verifique os perfis usados ​​pelo sistema de arquivos. Você verá que tem duas cópias dos metadados do fileTem e apenas uma cópia dos dados:

$ sudo btrfs fi uso

Conclusão

BTRFS é um sistema de arquivos incrível capaz de muitas opções avançadas. No entanto, ao usar o BTRFS, você deve ter backups de trabalho, bem como um kernel inicializável de uma distro LTS para resgate do sistema. Embora um equilíbrio possa ser executado em um sistema de arquivos raiz montado, nem sempre é aconselhado a fazer isso. Ainda existem muitos bugs no sistema de arquivos. Você deve estar preparado para um resgate do sistema de arquivos quando o módulo BTRFS não foi totalmente testado contra grãos de borda sangrando.