BTRFS - Uso alto dos metadados do filesystem

Olá pinguins, tudo bem?

Já tem um tempo que venho utilizando o BTRFS e estou amando. Claro que filesystem é algo que fica ali por baixo dos panos e a gente só deveria pensar nele durante a instalação, porém ele possui recursos muito interessantes, sendo o principal as snapshots (para quem ainda não conhece, fica a dica, é maravilhoso).

No entanto, já tem algum tempo que venho tendo alguns problemas. De maneira quase que aleatória, o sistema entra em um estado de read-only, me deixando como única opção reiniciar o sistema. No início até achei que era um problema no SSD que eu tinha acabado de comprar, até fiz uma formatação completa no disco para saber se ele tinha algum setor com problema e não encontrei nada, porém isso fez o problema ficar menos frequente por um tempo.

Ah quando digo que é aleatório, significa que já aconteceu copiando pastas grandes ou navegando enquanto executava alguma outra tarefa, mas não aconteceu baixando jogas com mais de 60GB na Steam. Em resumo, não tenho um método para reproduzir esse erro com 100% de certeza.

Começou a ficar um pouco mais preocupante, quando o mesmo problema ocorreu no meu notebook. Acontece com uma frequência muito menor, porém como ele é a minha ferramenta de estudos, acaba que preocupa bem mais.

Em um chat com o GPT, estudando as possibilidades do que poderia estar acontecendo, surgiu a possibilidade de que o sistema esteja enchendo o espaço para metadados que o BTRFS aloca e com isso tendo problemas para fazer a manipulação dos blocos de memória (ou chuncks, como o BTRFS chama).

Como proposta de solução, ficou:

  • Executar o balanceamento do sistema sudo btrfs balance start ....;
  • Excluir algumas snapshots.

Mesmo ao fazer isso, o uso dos metadados continua alto (acima de 70% segundo o GPT é alto) e por consequência, não sei dizer se essa realmente é a causa do erro.


Agora vamos as dados técnicos

Notebook

OS: Fedora Linux 41 (Workstation Edition) x86_64
Kernel: 6.11.10-300.fc41.x86_64

$ sudo btrfs filesystem usage /
Overall:
    Device size:		221.97GiB
    Device allocated:		218.00GiB
    Device unallocated:		  3.97GiB
    Device missing:		    0.00B
    Device slack:		    0.00B
    Used:			212.35GiB
    Free (estimated):		  6.45GiB	(min: 4.46GiB)
    Free (statfs, df):		  6.45GiB
    Data ratio:			     1.00
    Metadata ratio:		     2.00
    Global reserve:		452.17MiB	(used: 0.00B)
    Multiple profiles:		       no

Data,single: Size:207.00GiB, Used:204.52GiB (98.80%)
   /dev/mapper/luks-7a66b20d-407c-43fb-8984-17ac8d4faac7	207.00GiB

Metadata,DUP: Size:5.47GiB, Used:3.91GiB (71.54%)
   /dev/mapper/luks-7a66b20d-407c-43fb-8984-17ac8d4faac7	 10.94GiB

System,DUP: Size:32.00MiB, Used:48.00KiB (0.15%)
   /dev/mapper/luks-7a66b20d-407c-43fb-8984-17ac8d4faac7	 64.00MiB

Unallocated:
   /dev/mapper/luks-7a66b20d-407c-43fb-8984-17ac8d4faac7	  3.97GiB

PC

OS: Fedora Linux 41 (Workstation Edition) x86_64
Kernel: 6.11.10-300.fc41.x86_64

$ sudo btrfs filesystem usage /
Overall:
    Device size:		892.45GiB
    Device allocated:		590.04GiB
    Device unallocated:		302.41GiB
    Device missing:		    0.00B
    Device slack:		    0.00B
    Used:			585.93GiB
    Free (estimated):		305.33GiB	(min: 305.33GiB)
    Free (statfs, df):		305.33GiB
    Data ratio:			     1.00
    Metadata ratio:		     1.00
    Global reserve:		512.00MiB	(used: 0.00B)
    Multiple profiles:		       no

Data,single: Size:586.01GiB, Used:583.09GiB (99.50%)
   /dev/mapper/luks-739d03ba-1749-4a35-8474-78e6b9f1968b	586.01GiB

Metadata,single: Size:4.00GiB, Used:2.85GiB (71.16%)
   /dev/mapper/luks-739d03ba-1749-4a35-8474-78e6b9f1968b	  4.00GiB

System,single: Size:32.00MiB, Used:96.00KiB (0.29%)
   /dev/mapper/luks-739d03ba-1749-4a35-8474-78e6b9f1968b	 32.00MiB

Unallocated:
   /dev/mapper/luks-739d03ba-1749-4a35-8474-78e6b9f1968b	302.41GiB

Que estranho, o BTRFS suporta uma quantidade absurdo de arquivos, a quantidade é “1,84467440737e+19” ou “2^64” segundo a wikipedia.

Muito improvável ser metadados, seu problema pode ser o SSD, o conector do SSD ou pode ser até memoria RAM. O sistema entra em read-only devido alguma falha no hardware, para evitar perder dados.

Primeira coisa a fazer é usar o dmesg e ver as mensagens assim que o sistema entra em read-only.

Há casos em que o problema de um usuário foi resolvido atualizando o firmware do SSD, de outro era o pente de memoria com problema…

PS: Recomendo parar de confiar em chat GPT.

O ChatGPT é uma ferramenta que nos ajuda muito, só que tem que ficar checando tudo que ele escreve se é verídico.

Se ele tivesse confiado ele não teria vindo aqui dizendo que uso, ele teria apenas dito metadados e só.
Mas não tem como, o limite de quantidade de arquivos do BTRFS é de 2^64. E o limite de tamanho é de 16 EiB.

Os discos me parecem normais. Porém o uso do sistema do seu notebook está muito alto. Não é bom usar o BTRFS próximo da capacidade total, lembrando que ele aloca espaço em “goles”. Ou seja, tem 500 mb livre, daí vc vai copiar 60 mega e ele aloca o restante para metadados e entope o disco. Daí vc tenta apagar algo mas não consegue e precisa fazer uma ginástica que nem vou entrar em detalhes de tao complicada.

O que é estranho é o sistema de arquivos entrar em modo somente leitura e depois voltar normalmente após a reinicialização. Se fosse problema no sistema de arquivos mesmo, ele continuaria danificado após a reinicialização…

Eu apostaria minhas fichas em problema de memória ou falhas de hardware no disco. Vale investigar isso com o memtest / smartctl.

Também vale a pena notar que o sistema operacional é o mesmo nos dois casos, e se ambos estão apresentando o mesmo problema, pode ser algo relacionado ao sistema operacional… Tente usar um kernel 6.6 e veja se para de ocorrer.

1 curtida

Olá, obrigado a todos pelas respostas.

Reconheço que usar o GPT para tirar dúvidas é bem problemático, porém estava tendo dificuldades em encontrar material online sobre esse problema em específico. E uma vez que ele plantou a dúvida em relação ao uso dos metadados eu precisava matar essa dúvida antes de continuar testando outras possibilidades.

Eu já rodei alguns testes usando o memtest e não encontrei nenhum erro. Memória era a minha principal suspeita. Ainda não cheguei a usar o smartctl.

Depois que o sistema entra em read-only, o terminal não abre mais, por conta de que ele tenta criar alguns arquivos durante a inicialização e isso retorna erro. Já tentei ficar acompanhando o sistema via ssh, mas em todas as vezes q estava usando uma máquina externa para verificar as mensagens de erro, o erro não aconteceu…

No caso do notebook, vou tentar deixar o sistema de arquivos mais livre para trabalhar e então voltar a investigar outros fatores, como a versão do Kernel como comentado ou algum erro no hardware.

De qualquer forma, vlw galera!!

O smartctl é uma ferramenta que lê o “smart” do dispositivo de armazenamento, o smart é um firmware que fica registrando todos os eventos do dispositivo de armazenamento que sejam úteis para diagnostico de problemas, como erro de leitura de setor, erro de gravação de setor, e outras coisas que pode ajudar, ele tmb é capaz de fazer um auto diagnostico do dispositivo(se mesmo) com base nesses dados armazenados. O smart fica gravado em um local do dispositivo que não fica acessível para usuários normais ou seja ele não pode ser deletado e nem sobrescrevido por usuários normais, seu funcionamento é automatizado.

Uai, mas vc não precisa olhar na hora do pau, vc pode ate desligar a maquina e olhar quando ligar novamente, ele é um arquivo. Agora tem que vê se ele está gravando o erro antes do PC entrar em read only.

É que quando entra em read-only o arquivo para de ser escrito. E as mensagens anteriores não indicam nada de diferente.