Eu precisei executar btrfs balance
em meu sistema de arquivos de dispositivo único porque estava obtendo ENOSPC
mesmo que houvesse espaço livre.
Por que isso precisa ser executado?
O que a balança realmente faz?
Resposta
Ao contrário da maioria dos sistemas de arquivos convencionais, o BTRFS usa um alocador de dois estágios. O primeiro estágio aloca grandes regiões de espaço conhecidas como blocos para tipos específicos de dados , então o segundo estágio aloca blocos como um sistema de arquivos regular dentro dessas regiões maiores. Existem três tipos diferentes de pedaços:
-
Chunks de dados: Estes armazenam dados de arquivos regulares.
-
Chunks de metadados: armazenam metadados sobre arquivos, incluindo, entre outras coisas, carimbos de data / hora, somas de verificação, nomes de arquivo, propriedade, permissões e atributos estendidos.
-
System Chunks: Estes são um tipo especial de chunk que armazena dados sobre onde todos os outros chunks estão localizados.
Apenas o tipo de dados para o qual o bloco está alocado pode ser armazenado nesse bloco. O caso mais comum hoje em dia, quando você recebe um erro -ENOSPC no BTRFS, é que o sistema de arquivos ficou sem espaço para dados ou metadados em blocos existentes e não pode alocar um novo bloco. Você pode verificar se este é o caso executando btrfs fi df
no sistema de arquivos que gerou o erro. Se a linha de Dados ou Metadados mostrar um valor Total que seja significativamente diferente do valor Usado, então esta é provavelmente a causa.
O que btrfs balance
faz é enviar as coisas de volta pelo alocador, o que resulta no uso de espaço nos blocos sendo compactados. Por exemplo, se você tiver dois blocos de metadados que são ambos 40% cheio, um saldo resultará em um bloco de metadados que está 80% cheio. Ao compactar o uso do espaço dessa forma, a operação de equilíbrio é então capaz de excluir os pedaços agora vazios e, assim, liberar espaço para a alocação de novos pedaços. Se você executar btrfs fi df
novamente depois de executar o saldo, deverá ver que os valores Total e Usado estão muito mais próximos um do outro, já que o saldo excluiu pedaços que não eram mais necessários.