Local de migração do ZFS RAIDZ com 3 unidades para 4 discos, quando o pool tiver mais de 1/3 de espaço livre

3

Ao criar meu pool RAID-Z no ZoL, supus que poderia facilmente adicionar discos adicionais mais tarde. Enquanto isso, aprendi que isso ainda não é possível.

Mas ... tive um problema semelhante ao criar meu pool inicial. Apenas 4 portas SATA livres, mas um antigo RAID5 com três discos de 2TB e um novo RAIDZ1 com três discos de 4TB. A solução foi: a) degradar o RAID5 eb) construir o RAIDZ inicial com um arquivo esparso como "terceiro drive virtual", que foi imediatamente colocado off-line após a criação do pool:

  1. Criar arquivo esparso: dd if=/dev/zero of=/zfs1 bs=1 count=1 seek=4100G
  2. Crie o pool raidz: zpool create zfspool raidz /dev/disk1 /dev/disk2 /zfs1
  3. Imediatamente retire o arquivo esparso: zpool offline zfspool /zfs1
  4. Migre os dados para zfspool . Desinstale discos RAID5 antigos, adicione terceiro disco novo de 4 TB
  5. Substituir & resilver o arquivo esparso no pool com a terceira unidade real:
    zpool replace zfspool /zfs1 /dev/disk3

Isso funcionou muito bem! Agora aprendi que, embora o ZFS não suporte diretamente a adição de um único disco ao RAIDz, ele suporta um por um substituindo os discos por discos maiores.

Então aqui está o meu plano. Alguém vê uma falha nela?

  • Compre um quarto disco de 4 TB e retire um disco do pool existente
  • Crie parções de 2x2TB nesses dois discos gratuitos.
  • Construa um RAIDz a partir desses quatro "discos": 3x2TB = 6 TB de armazenamento líquido.
  • Por motivo de desempenho: coloque uma das 2ª partição imediatamente offline
  • Migrar max. Dados de 6 TB para o novo pool & destruir o antigo pool
  • Substitua o "disco de 2 TB" off-line por um verdadeiro 4 TB do pool antigo. Espere para resilver.
  • Na unidade com duas partições ativas: Coloque offline as segundas partições de 2 TB e substitua-as pelo segundo disco de 4 TB do conjunto antigo. Aguarde o resilvering.
  • Um por um: Coloque as partições restantes de 2 TB offline, aumente a partição com 4 TB e adicione novamente o disco ao pool. Aguarde o resilvering.
  • Enxaguar & repita para o último disco / partição de 2 TB

Isso funcionará? Sei que estou mais vulnerável à perda de dados devido à falta de redundância durante o processo, mas terei backup dos dados mais importantes. Apenas não o suficiente para toda a carga útil de 6 TB.

E o ZFS aumentará automaticamente o pool para (3 + 1) x4TB = 12TB após o último passo?

    
por Ben Tebulin 22.12.2014 / 13:57

2 respostas

4

Feio, mas isso funcionaria.

Exceto quando isso não acontece;).

  • Tenha muito cuidado ao especificar as partições e ao substituir os discos
  • experimente em uma VM antes, configure os discos virtuais como o seu hardware e execute-os 1 ou 2 vezes.
  • faça um scrub antes de começar e dê uma olhada nas informações do S.M.A.R.T dos discos. Você não tentaria isso com um disco já flakey.

Importante: é melhor você ter um backup testado em outra mídia ou máquina antes de tentar!

Sim, o ZFS aumentará o pool se o último disco ou partição de 2 TB for substituído por um de 4 TB (se você tiver autoexpand = on para o pool)

zpool get autoexpand $pool

zpool set autoexpand=on $pool

Em um sidenote: você não deve usar o RAID-Z em discos maiores que 2TB. Sua chance de obter um erro ao fazer o resilvering ao substituir um disco com falha é muito alta. Por favor, considere o RAID-Z2.

    
por 22.12.2014 / 14:44
1

Isso parece terrível. São os seus dados, então você pode fazer o que quiser ... Ninguém iria endossar a solução, no entanto.

Esta é realmente uma situação em que você deve começar de novo .

Mova seus dados para algum lugar temporariamente e reconstrua.

    
por 22.12.2014 / 15:34