Tenho um disco de 8 TB e dois de 4 TB. Estou curioso para saber se consigo criar um raid de 8 TB a partir de discos 8+4+4?
Tentei isso sudo mkfs.btrfs -f -m raid1 -d raid1 /dev/sdc1 /dev/sdd1 /dev/cdb1
, mas só cria um RAID de 4 TB.
Do meu ponto de vista, deveria ser tecnicamente possível criar uma faixa de 8 TB a partir de dois discos de 4 TB e então criar um espelho de 8 TB. Isso é possível de ser alcançado com btrfs
ferramentas?
Sim, mas o btrfs funciona do jeito oposto. Seu "raid1" não é um espelho em todos os discos – ele armazena especificamente exatamente duas cópias de dados, em discos que são escolhidos individualmente para cada 'bloco' – que têm 1 GB de tamanho, se bem me lembro.
Portanto, se você criar uma matriz "raid1" de 3 discos, você terá automaticamente esse comportamento, exceto sem o striping: em vez disso, alguns pedaços serão espelhados entre o disco 1 e o disco 2 e alguns entre o disco 1 e o disco 3.
Acredito que a alocação de blocos do Btrfs prefere discos com mais espaço livre, então você não deve acabar em uma situação em que a maioria dos dados é espelhada entre os discos 2 e 3, com o disco maior permanecendo sem uso, mas
btrfs balance
devo ser capaz de ajudar com isso se isso acontecer.Da mesma forma, "raid1c3" solicita exatamente três cópias e pode ser útil para metadados.
Discos pequenos (abaixo de 1 GB, se bem me lembro) podem ter apenas um desses blocos — um bloco misto de dados/metadados — e, como o espelhamento é feito no nível do bloco, isso explicaria por que um pequeno conjunto de 3 discos não funcionou como esperado.
Uma maneira é particionar o disco grande em dois e emparelhar a primeira partição com um disco menor e a segunda com outro, usando quaisquer ferramentas que você tenha.
Se você optar por usar
mdadm
o pareamento para "fundir" o espaço novamente em uma única entidade de 8 TB, você pode empregar o LVM sobre ele.Ou você pode executar use LVM e LVM RAID desde o início. Isso significa que você pode escolher um padrão de alocação por LV: alguns podem ser espelhos de 2 vias, alguns espelhos de 3 vias, alguns RAID5, alguns apenas striped. Eu nunca usei isso em produção e não posso sugerir se essa abordagem incorreria em maior ou menor sobrecarga de manutenção em relação à variante anterior.
Dê uma olhada em
bcachefs
, seu comportamento parece ser exatamente o que você está procurando. Ele se esforçaria para manter a mesma porcentagem de preenchimento de todos os dispositivos e seria capaz de armazenar 8 TB de dados (sem compressão), enquanto sempre tenta usar o(s) dispositivo(s) menos ocupado(s) para qualquer E/S. Há uma ressalva, os relatórios de espaço mostrariam 16 TB no seu caso, mas como os dados serão espelhados, eles ocupariam o espaço duas vezes maior e, em dispositivos diferentes, sem mágica ou surpresas aqui. Embora ainda esteja em desenvolvimento, o recurso de espelhamento é considerado estável. Além disso, o scrub online (scan, check e repair) já apareceu na árvore bcachefs, então é uma questão de tempo para que seja puxado para o Linux vanilla, eu esperaria que isso acontecesse em aproximadamente quatro meses.