ENOSPC: Por que o 'equilíbrio btrfs' é necessário? O que isso faz?

0

Eu precisava executar btrfs balance no meu sistema de arquivos de dispositivo único, pois estava recebendo ENOSPC , embora houvesse realmente espaço livre.

Por que isso precisa ser executado?

O que o saldo realmente faz?

    
por Tom Hale 12.07.2017 / 10:36

1 resposta

5

Diferentemente 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 trechos para tipos específicos de dados, e o segundo estágio aloca blocos como um sistema de arquivos regular dentro dessas regiões maiores. Existem três tipos diferentes de partes:

  • Data Chunks: armazenam dados de arquivos regulares.

  • Metadados Chunks: armazenam metadados sobre arquivos, incluindo, entre outros, registros de data e hora, somas de verificação, nomes de arquivos, propriedade, permissões e atributos estendidos.

  • System Chunks: Esses 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 é alocado pode ser armazenado nesse fragmento. 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 partes existentes e não pode alocar um novo pedaço. Você pode verificar que esse é o caso executando btrfs fi df no sistema de arquivos que gerou o erro. Se a linha Dados ou Metadados mostrar um valor Total significativamente diferente do valor Usado, provavelmente esta é a causa.

O que o btrfs balance faz é enviar as coisas de volta através do alocador, o que resulta no uso de espaço nos fragmentos sendo compactados. Por exemplo, se você tiver dois fragmentos de metadados com 40% de participação, um saldo resultará em um bloco de metadados com 80% de participação. Ao compactar o uso do espaço dessa maneira, a operação de balanceamento pode então excluir os blocos agora vazios e, assim, liberar espaço para a alocação de novos blocos. Se você executar novamente btrfs fi df depois de executar o saldo, verá que os valores Total e Usado estão muito mais próximos, já que o saldo excluía os fragmentos que não eram mais necessários.

    
por 12.07.2017 / 21:49

Tags