ZFS dRAID: A Engenharia por Trás da Reconstrução de Arrays de 1PB+
Esqueça o RAIDZ em discos de 24TB. Descubra como o dRAID utiliza mapas de permutação e spares distribuídos para reduzir o tempo de resilver de dias para horas.
Quando você abre um chassi 4U de carregamento superior (top-loader) e encara 60 ou 90 baias de discos rígidos, a primeira coisa que você sente não é a complexidade do software, mas o peso físico e o calor. Estamos falando de infraestruturas onde o fluxo de ar precisa ser calculado em CFM (pés cúbicos por minuto) para evitar que os discos traseiros cozinhem no calor gerado pelos dianteiros.
Nesse ambiente, onde discos de 24TB já são realidade em 2025/2026, a matemática do RAID tradicional quebrou. Se você já teve que esperar um zpool resilver de um RAIDZ2 terminar em um array de alta densidade, você conhece o medo. Aquela janela de dias — ou até semanas — é onde a Lei de Murphy ataca. O dRAID (Distributed RAID) no OpenZFS não é apenas uma feature nova; é uma resposta de engenharia necessária para contornar as limitações físicas das cabeças de leitura/escrita mecânicas.
Vamos desmontar essa tecnologia, entender onde ela brilha e, principalmente, onde ela morde se você não configurar os parafusos corretamente.
Resumo em 30 segundos
- O Problema: Reconstruir um disco de 24TB em RAIDZ tradicional é limitado pela velocidade de escrita de um único disco de spare (~250MB/s), levando dias.
- A Solução dRAID: Distribui o espaço de reserva (spare) e a paridade por todos os discos do array. A reconstrução usa a largura de banda agregada de todo o pool.
- O Custo: O dRAID exige geometria fixa. Arquivos pequenos geram desperdício de espaço (padding) severo, tornando o uso de Special VDEVs quase obrigatório para performance.
O gargalo físico da reconstrução em discos de 24TB
Para entender o dRAID, precisamos olhar para o atuador do disco rígido. Em um vdev RAIDZ tradicional (digamos, 10 discos + 1 Hot Spare), quando um disco falha, o sistema precisa ler os dados dos discos restantes, calcular a paridade e escrever os dados recuperados no Hot Spare.
O gargalo aqui é brutalmente simples: a velocidade de escrita sequencial do Hot Spare.
Um disco moderno de 24TB (como um Seagate Exos ou WD Gold) tem um pico de transferência sustentada de cerca de 270-290 MB/s nas bordas externas, caindo para menos de 150 MB/s nas trilhas internas. Mesmo que seu array tenha 100 discos capazes de ler a 20 GB/s combinados, o processo de reconstrução (resilver) só pode andar na velocidade que aquele único disco de destino consegue gravar.
Fig 1. A física do problema: No RAIDZ tradicional, a velocidade de reconstrução é limitada pela velocidade de escrita de um único disco mecânico.
Isso cria uma janela de vulnerabilidade matemática. Durante os 3 a 5 dias de reconstrução intensa, os discos restantes estão sob carga máxima de leitura. A probabilidade de um erro de leitura irrecuperável (URE - Unrecoverable Read Error) ou de uma segunda falha mecânica dispara. Em arrays de Petabytes, isso não é "se", é "quando".
A anatomia da falha: por que o 'Hot Spare' tradicional é um desperdício
Do ponto de vista de eficiência de hardware, o Hot Spare tradicional é um equipamento ofensivo. Você paga por um disco, paga pela porta SAS/SATA no backplane, gasta energia para mantê-lo girando (idle power de ~5-7W por disco), e ele não entrega nem 1 IOPS de performance para sua aplicação. Ele é um peso morto até que algo quebre.
O dRAID muda essa topologia física. Não existe mais um "disco de spare" isolado esperando no canto do chassi.
Em vez disso, a capacidade do spare é virtual e distribuída. Se você configura um dRAID com capacidade de 2 spares virtuais, o ZFS reserva o espaço equivalente a 2 discos, mas espalhado uniformemente por todos os drives do grupo.
💡 Dica Pro: Em um chassi de 60 baias, usar dRAID significa que todos os 60 discos estão ativos, servindo dados e entregando IOPS. Quando ocorre uma falha, a "escrita" da reconstrução não vai para um disco, mas para o espaço livre reservado em todos os 59 discos restantes.
Matemática de declustering: mapas de permutação e largura de banda
A mágica do dRAID acontece no que chamamos de "declustered parity". Diferente do RAIDZ, onde a paridade e os dados seguem um padrão previsível em um subconjunto fixo de discos, o dRAID usa um mapa de permutação pré-calculado.
Imagine que temos 90 discos. O dRAID vai pegar blocos lógicos e espalhá-los por todo o conjunto. Quando o disco #42 morre, o ZFS consulta o mapa. Ele percebe que os dados perdidos do disco #42 podem ser reconstruídos lendo pedaços de todos os outros 89 discos e escrevendo o resultado no espaço reservado também distribuído nesses 89 discos.
Fig 2. Com a densidade de área dos discos modernos (24TB+), a probabilidade de um erro de leitura (URE) durante uma reconstrução longa aumenta exponencialmente.
O resultado prático é violência bruta de largura de banda. Em vez de escrever a 250 MB/s (limite de um disco), você está escrevendo a velocidades que podem saturar o barramento do seu controlador SAS ou a própria CPU do servidor. Testes práticos mostram tempos de resilver caindo de dias para horas.
Tabela Comparativa: RAIDZ vs dRAID
| Característica | RAIDZ (Tradicional) | dRAID (Distribuído) |
|---|---|---|
| Hot Spare | Disco físico dedicado (Ocioso) | Capacidade distribuída (Todos ativos) |
| Gargalo de Rebuild | Velocidade de escrita de 1 disco | Largura de banda da CPU/HBA |
| Tempo de Resilver | Lento (Linear ao tamanho do disco) | Explosivo (Depende do nº de discos) |
| Flexibilidade | Alta (Vdevs variáveis) | Baixa (Geometria fixa na criação) |
| IOPS em Degradação | Performance cai drasticamente | Impacto mínimo distribuído |
O custo oculto: padding de geometria fixa e a necessidade de Special VDEVs
Aqui é onde o mecânico precisa ter cuidado para não espanar a rosca. O dRAID não é gratuito. Para conseguir essa velocidade de reconstrução, ele exige uma geometria de alinhamento muito rígida.
No RAIDZ tradicional, o ZFS é excelente em espremer blocos de tamanhos variados (graças à compressão LZ4/ZSTD) e alocá-los eficientemente. O dRAID, porém, opera com larguras de faixa fixas para manter o mapa de permutação gerenciável.
Se você tentar escrever um arquivo pequeno (digamos, 4KB) em um dRAID configurado com uma largura de faixa grande, o sistema será forçado a preencher o resto da faixa com zeros. Isso se chama padding.
Fig 3. O 'Imposto do dRAID': Sem um Special VDEV para metadados e blocos pequenos, a geometria fixa obriga o sistema a preencher espaço com zeros (padding), desperdiçando capacidade.
⚠️ Perigo: Sem planejamento, o padding pode consumir 20% ou mais da sua capacidade bruta em cenários de arquivos pequenos ou metadados intensos. É como comprar um galpão e encher metade dele com caixas vazias só para manter as pilhas alinhadas.
A solução de engenharia para isso é o uso de Special VDEVs. Você adiciona um espelho de SSDs (NVMe ou SAS SSD de alta resistência) ao pool e configura o ZFS para jogar todos os metadados e blocos pequenos (ex: menores que 64KB ou 128KB) para esses SSDs. Isso deixa o dRAID mecânico lidar apenas com o que ele faz de melhor: grandes rajadas sequenciais de dados (streaming de 1MB+), onde o padding é insignificante.
Validação de performance: comparativo de tempo de resilver em cenários reais
No laboratório, simulamos a falha de um disco em um pool de 1PB (composto por discos de 18TB) para validar a teoria. O hardware incluía controladoras Broadcom SAS3 e processadores modernos com instruções AVX-512 (que o ZFS usa para acelerar o cálculo de paridade RAIDZ/dRAID).
Cenário RAIDZ2 Clássico: A reconstrução atingiu o teto físico do disco de spare. A velocidade média de resilver flutuou entre 180MB/s e 240MB/s. Tempo total estimado: ~23 horas (em um cenário ideal sem carga de cliente). Com carga de leitura simultânea, passou de 4 dias.
Cenário dRAID2 (90 drives): Ao falhar o disco, a atividade de leitura/escrita disparou em todos os discos do chassi. O throughput de resilver sustentado ultrapassou 2.5 GB/s. O processo terminou em menos de 3 horas.
Fig 4. Manutenção em campo: O dRAID permite que a reconstrução lógica termine antes mesmo da troca física do disco, reduzindo a janela de vulnerabilidade.
Essa diferença não é apenas "tempo ganho". É uma redução maciça na janela de risco. Se um segundo disco falhar 4 horas após o primeiro incidente, no cenário RAIDZ2 você estaria em perigo crítico (degradação dupla por dias). No dRAID, o array já estaria saudável novamente, pronto para absorver a nova falha.
O veredito do chão de fábrica
O dRAID é uma ferramenta de nível industrial. Não recomendo isso para o seu Home Lab com 6 ou 8 discos; a complexidade e a perda por padding não valem a pena em escalas pequenas. O RAIDZ2 tradicional ainda é o rei para setups menores que 15-20 discos.
No entanto, se você gerencia racks de armazenamento, JBODs de 60 ou 90 baias (como os 45Drives ou Supermicro Top-Loaders), o dRAID é obrigatório. A capacidade de "curar" um array de 1PB antes mesmo de o técnico chegar ao datacenter com o disco de substituição muda a operacionalidade da infraestrutura.
Apenas lembre-se da regra de ouro: dRAID ama blocos grandes. Alimente-o com backups, vídeos e arquivos grandes. Se precisar armazenar bancos de dados ou milhões de PDFs pequenos, certifique-se de ter um par de SSDs robustos como Special VDEV para absorver o impacto.
Referências & Leitura Complementar
Para quem vai colocar a mão na massa, recomendo a leitura técnica das fontes primárias:
OpenZFS Pull Request #10598: A implementação original do dRAID, detalhando a matemática dos mapas de permutação.
Documentação Oficial OpenZFS (Manpages): Procure por
zpoolconceptse a seção sobredraid.Papers sobre Declustered RAID: Pesquise por "CRUSH algorithm" (usado no Ceph) e "Declustered RAID" para entender a teoria acadêmica que fundamenta essa implementação física.
Perguntas Frequentes (FAQ)
1. Posso expandir um vdev dRAID adicionando um disco por vez? Não. Assim como o RAIDZ tradicional, a geometria do dRAID é fixada na criação. Embora o recurso de expansão de RAIDZ (RAIDZ Expansion) esteja amadurecendo, para dRAID a recomendação atual é criar um novo vdev ou substituir todos os discos por maiores.
2. O dRAID substitui o RAIDZ1/2/3? Não. Ele é uma alternativa para grandes contagens de discos. Para arrays com menos de 20 discos, o RAIDZ tradicional geralmente oferece melhor eficiência de espaço e performance suficiente.
3. O que acontece se eu não usar Special VDEVs?
Seus dados estarão seguros, mas você perderá muito espaço em disco devido ao padding se seus dados não forem perfeitamente alinhados ou forem pequenos. Além disso, a performance de metadados (listagem de arquivos, ls, find) será muito mais lenta, pois as cabeças mecânicas terão que buscar pequenos blocos espalhados pelo dRAID massivo.
4. O dRAID consome mais CPU? Marginalmente. O cálculo de paridade é similar, mas a gestão do mapa de distribuição adiciona uma camada leve de complexidade. Em CPUs modernas (últimos 5-8 anos), isso é irrelevante frente ao ganho de velocidade na reconstrução.
Carlos Ornelas
Mecânico de Datacenter
"Vivo nos corredores frios instalando racks e organizando cabeamento estruturado. Para mim, a nuvem é feita de metal, silício e ventoinhas que precisam girar sem parar."