ENOSPC: Por que o `btrfs balance` é necessário? O que isso faz?

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *