Como expandir os metadados do btrfs?

8

Meus metadados btrfs estão ficando cheios. (Estou criando snapshots por hora usando btrbk .)

Como aumentar / estender o espaço alocado para os metadados de um sistema de arquivos btrfs ?

Ou é automaticamente expandido?

    
por Tom Hale 25.02.2017 / 08:40

2 respostas

6

TL; DR Os metadados (se o btrfs não estiver sofrendo uma condição geral de baixo espaço) aumentarão automaticamente . Nos casos em que não existe espaço livre não alocado, o aumento automático é combinado. Se, no entanto, a parte de dados de btrfs foi alocada mais espaço do que o necessário, então é possível redistribuir isso. Isso é chamado de balance -ing no btrfs.

Supondo que haja memória suficiente não alocada no (s) dispositivo (s) de bloco de apoio do btrfs , a parte de metadados do sistema de arquivos aloca automaticamente a memória para aumentar / expandir os metadados.

Portanto, a resposta é: Sim (desde que não haja pouca memória / condição de espaço livre no btrfs ) , os metadados serão automaticamente aumentados, assim:

(1) Observamos algumas configurações de alocação inicial do btrfs (em um dispositivo 40GB )

$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.49GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.33GiB
GlobalReserve, single: total=85.41MiB, used=0.00B

(2) Como pode ser visto, o espaço alocado no sistema de arquivos para armazenar Metadados é 1.55GiB, dos quais 1.33GiB, portanto, quase todos são usados (isso pode ser uma situação como ocorrendo no caso do OP)

(3) Provocamos agora um aumento de metadados a serem adicionados. Para fazer isso, copiamos a pasta / home usando a opção --reflink=always do comando cp .

$> cp -r --reflink=awlways /home /home.copy

(4) Desde (como assumimos que havia muitos arquivos em / home), que muitos novos dados para o sistema de arquivos foram adicionados, que porque usamos --reflink usa pouco ou nenhum espaço adicional para o dados reais, ele usa o mecanismo Copy-on-Write. Em suma, a maioria dos metadados foi adicionada ao sistema de arquivos. Podemos ter, portanto, outro olhar

$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.65GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=2.78GiB, used=2.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B

Como pode ser visto, o espaço alocado para os metadados usados neste btrfs tem automaticamente aumentado expandido.

Como isso é automático, normalmente não é detectado pelo usuário. No entanto, existem alguns casos, principalmente aqueles em que todo o sistema de arquivos já está bem preenchido. Nesses casos, btrfs pode começar a "gaguejar" e não aumentar automaticamente o espaço alocado para os metadados. O motivo seria, por exemplo, que todo o espaço já tenha sido alocado para as partes (Data, System, Metadata, GlobalReserve). Confusamente, ainda pode ser que haja espaço aparente. Um exemplo seria essa saída:

$> btrfs filesystem df /
Data, single: total=38.12GiB, used=25.01GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B

Como pode ser visto, o sistema todo o 40GiB , mas a alocação está um pouco fora balance , já que enquanto ainda há espaço para os dados dos novos arquivos, os Metadados (como no caso do OP) são baixo. A alocação automática de memória para os dispositivos que suportam o sistema de arquivos btrfs não é mais possível (basta somar os totais da alocação, 38.12G + 1.55G + .. ~ = 40GiB).

Já que há espaço livre em excesso alocado para a parte data do sistema de arquivos, agora pode ser útil, necessário para equilibrar o btrfs. Equilíbrio significaria redistribuir o espaço já alocado.

No caso do OP, pode-se supor que, por algum motivo, ocorreu um desequilíbrio entre as diferentes partes da alocação btrfs .

Infelizmente, o comando simples sudo btrfs balance -dusage=0 , que em princípio deve procurar blocos vazios (alocados para dados) e colocá-los em um usuário melhor (que seria o espaço quase esgotado para Metadados), pode falhar, porque não há dados completamente vazios blocos podem ser encontrados.

Os desenvolvedores btrfs recomendam aumentar sucessivamente o limite de uso de "quando os blocos de dados devem ser reorganizados para recuperar espaço"

Portanto, se o resultado de

$> sudo btrfs balance -dusage=0
Done, had to relocate 0 out of 170 chunks 

não está mostrando nenhuma mudança, deve-se fazer algumas

$> sudo btrfs balance -dusage=5
Done, had to relocate 0 out of 170 chunks  <--(again fail)
$> sudo btrfs balance -dusage=10
Done, had to relocate 0 out of 170 chunks  <--(again fail)
$> sudo btrfs balance -dusage=15
Done, had to relocate 2 out of 170 chunks  <--(success)

A outra resposta sugeriu a influência do btrfs nodesize, que influencia um pouco a rapidez com que os metadados aumentam. O tamanho do nós é (como mencionado na outra resposta) definido apenas uma vez no tempo de criação do sistema de arquivos mkfs.btrfs . Em teoria, poderia-se reduzir o tamanho dos Metadados se fosse possível mudar para um valor menor para o tamanho do nós, se isso fosse possível (não é!). O tamanho do nó, no entanto, não poderá ajudar a expandir ou aumentar o espaço de metadados alocado de alguma forma. Em vez disso, pode ter ajudado apenas a economizar espaço em primeiro lugar. No entanto, um tamanho de nós menor não é garantido para reduzir o tamanho dos metadados. De fato, alguns casos podem mostrar que nós maiores reduzem o comprimento do percurso da árvore do btrfs, já que as notas podem conter mais "links".

    
por 26.05.2017 / 15:23
2

De acordo com a FAQ no wiki do btrfs , isso não é possível e não é provável que seja implementado.

Can I change metadata block size without recreating the filesytem?

No, the value passed to mkfs.btrfs -n SIZE cannot be changed once the filesystem is created. A backup/restore is needed. Note, that this will likely never be implemented because it would require major updates to the core functionality.

Você pode migrar o sistema de arquivos btrfs existente para um novo que tenha -n SIZE maior. Você pode até mesmo adicioná-lo ao sistema de arquivos existente usando o RAID e o equilíbrio do btrfs e, em seguida, remover o sistema de arquivos antigo.

Veja também a seção sobre discos quase cheios .

    
por 17.04.2017 / 23:05

Tags