Sistema de arquivos BTRFS com vários dispositivos com disco de tamanho diferente

12

Eu tenho um sistema de arquivos BTRFS existente composto por um disco de 500GB e acabei de comprar um 2TB disco para aumentar a capacidade de armazenamento do meu servidor doméstico e eu quero adicionar o novo disco para o sistema de arquivos existente. Pelo que li, parece que nenhuma configuração do BTRFS pode lidar com discos de tamanhos diferentes sem desperdiçar a diferença de tamanho entre o maior e o menor disco, mas eu sou novo no BTRFS e eu poderia ter perdido alguma coisa, então há uma configuração que pode permitir-me combinar dois discos em um sistema de arquivos sem perder espaço?

    
por fokenrute 17.12.2010 / 22:45

6 respostas

4

O Btrfs pode usar diferentes níveis de ataque para dados e metadados:

o padrão (mesmo para um disco) é o raid1 para os metadados (diretórios etc) e o raid0 para os dados.

Se você não alterou isso, provavelmente não terá problemas para adicionar o segundo disco e executar o reequilíbrio. porque somente os metadados serão copiados para os dois discos (você pode ver o tamanho dos seus metadados com btrfs filesystem df / ). Esteja ciente de que, se algum dos seus discos falhar, você perderá dados.

porque o disco de 2tb é muuuito maior do que o de 500g, talvez lhe daria melhores probabilidades se adicionar o novo e depois remover o antigo (as probabilidades de uma unidade específica falharem são muito inferiores às das probabilidades de dos drives falhando).

Se você planeja ter uma matriz de raid mais tarde (com unidades de tamanho mais semelhante), talvez queira recriar o sistema de arquivos na nova unidade com raid1 para dados e metadados e depois copiar tudo. depois, quando você tiver mais dinheiro, compre a segunda unidade de 2 TB.

ps: usar raid1 em uma unidade singl significa que os dados serão armazenados em dois locais nessa unidade (para proteger contra corrupção) e reduzirão seu espaço de armazenamento (é realmente uma boa ideia para os metadados).

pss: sério, não fique tentado a não usar o raid1 para metadados. psss: há uma boa chance de que o btrfs ganhe a habilidade de mudar os níveis de ataque dinamicamente.

    
por 18.12.2010 / 00:50
11

Depende de qual perfil você usa para os blocos de dados do sistema de arquivos Btrfs de vários dispositivos.

  • Quando você usa RAID0 (o padrão para blocos de dados), cada disco só pode ser preenchido com a capacidade do menor disco da matriz.

  • Quando você usa o perfil "único" para os blocos de dados, cada disco será preenchido até sua capacidade total. por exemplo. mkfs.btrfs -d single /dev/sda /dev/sdb

Eu tenho um servidor de arquivos com um disco de 2 TB e 3 TB. Ele inicializa o Ubuntu 12.10 a partir de uma unidade flash USB. Primeiro eu criei o sistema de arquivos Btrfs sem a opção -d single :

mkfs.btrfs /dev/sda /dev/sdb

O resultado foi que eu só consegui armazenar cerca de 4 TB (3,45 dados binários do arquivo TB).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

Observe o used 1.82TB da unidade de 3 TB.

Depois, usei o comando "balance" para converter os blocos de dados de RAID0 para o perfil "único":

btrfs balance start -dconvert=single /mnt/btrfs1

Demorou muito tempo (cerca de 30 horas) para equilibrar os dados de 4 TB. Mas depois de concluído, eu poderia usar os 5 TB completos (4,36 dados do arquivo TB binários).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1
    
por 14.10.2012 / 13:40
2

Eu usei vários dispositivos com btrfs no Ubuntu, e funcionou muito bem. Tenha em mente que o btrfs na verdade não implementa os níveis de RAID padrão. Ele implementa o striping e o espelhamento opcionais, mas não o verdadeiro RAID.

    
por 18.12.2010 / 00:53
1

É possível combinar unidades com tamanhos diferentes em btrfs.
Mas atualmente btrfs não handel ENOSPC (sem espaço deixado no dispositivo) muito bem.

Por exemplo Eu instalei 3 drives em um array RAID0 (striped). 1x500GB, 1x250GB, 1x160GB.
Você imaginaria que você terá um espaço em disco entre 800 e 900 GB.

Isso é o que mostra df -h :
/ dev / sdf 848G 615G 234G 73% / media / btrfs

Mas não consigo armazenar mais dados no array. (Sem espaço sobrando)

btrfs filesystem df /media/btrfs mostra-me isto:
Dados: total = 612,51 GB, usado = 612,51 GB
Metadados: total = 1.62GB, usado = 990.73MB
Sistema: total = 12,00MB, usado = 48,00 KB -

Mesmo o reequilíbrio não ajudou.

Em uma lista de discussão, vi este callculation:
tamanho da menor unidade * número de unidades na matriz
(embora eu tenha mais espaço: 612GB em vez de 160GB * 3 = 480GB)

Portanto, no estado atual de desenvolvimento, as chances são de que você não poderá usar todo o espaço disponível, mesmo que o btrfs ofereça suporte a tamanhos diferentes em uma matriz.

Estou usando o Ubuntu 10.10 com o kernel 2.6.35-22-genérico.

    
por 20.01.2011 / 09:04
1

update: a resposta abaixo foi escrita antes do lançamento do Linux 3.0. O Linux 3.0 inclui o patch quase round-robin.

Quando você faz espelhamento ou distribuição de dados, o segundo bloco de espelhamento ou faixa precisa ser alocado em outro dispositivo com espaço livre. O BTRFS aloca pedaços para dispositivos em um modo round-robin, o que pode causar perda de espaço se você tiver dispositivos de tamanhos diferentes.

Há um patch quase round-robin no pipeline para melhorar isso. Naturalmente, ainda é impossível emparelhar todos os pedaços em dispositivos diferentes se você tiver um disco de 500 GB e um de 2 TB. O patch destina-se mais a situações como 1 x 1 TB + 2 x 500 GB, em que cada disco pequeno deve preferir espelhar / distribuir com o disco grande em vez do outro disco pequeno.

Na sua situação, eu usaria apenas o modo "único" para seus dados ( mkfs.btrfs -d single ). Os blocos não estão emparelhados nesse modo, por isso acho que não haveria problemas com dispositivos de tamanhos diferentes. Eu não testei embora.

    
por 15.07.2011 / 17:22
0

Este problema aplica-se apenas às configurações de btrfs-raid1, na página Gotchas :

  • Allocation is done on a round-robin basis. If you have a raid1 strategy on a volume made up of mismatched drives (volumes of differing sizes), your smaller volume may fill up while leaving lots of space free on your single largest drive. You can verify that this is an issue if there is any discrepancy between 'df' and 'btrfs filesystem df [mountpoint]' AND if the latter command also shows that "total" and "used" are the same on the "Data" line. A rebalance may mitigate this problem. (2.6.33)
    • If your volume does fill up in this manner, a rebalance may quickly cause an ENOSPC ("Error NO SPaCe left on device") oops. You may have to delete a relatively large file to resolve this impasse, then a rebalance will succeed. (2.6.33)
    • Rebalancing may cause prompt very intense CPU usage for extended periods of time. (2.6.34 & 2.6.35)
    
por 17.12.2010 / 23:46

Tags