Uma proposta de armazenamento heterogêneo redundante do ZFS ou LVM ou MD

10

Eu tenho o mesmo problema que a maioria das pessoas tem: como criar uma solução confiável de armazenamento pessoal com o fato de que:

  1. Os discos rígidos falham com regularidade alarmante. Perder arquivos é inaceitável.
  2. Eu comprarei um novo HDD de tempos em tempos. Inevitavelmente, o melhor preço / GB é um tamanho diferente da última compra de HDD.
  3. 2 significa que com o tempo eu tenho uma coleção heterogênea de discos. Quero usá-los todos e os discos com falha geralmente serão substituídos por discos maiores.

  4. A integridade e a confiabilidade dos dados são mais importantes para mim do que a velocidade.

Então, depois de bater minha cabeça contra este problema por alguns dias (e na parte de trás da minha cabeça por anos), proponho a seguinte solução. Vou descrever uma solução que testei com base no ZFS nativo do Linux que está disponível em um PPA do Ubuntu , mas LVM, MD e btrfs podem ser usados para alcançar o mesmo. Para isso eu vou usar RAID1 (vdevs espelho ZFS).

  1. Considerando seu conjunto de unidades, agrupe-as em dois conjuntos de discos, de modo que a capacidade de cada conjunto seja a mais próxima possível da outra.
  2. Particione os discos maiores de forma que haja uma partição exatamente do mesmo tamanho que um dos discos menores, no outro grupo.
  3. Crie vdevs espelhados para que cada disco tenha seu espelho em outro disco.

Por exemplo, considere um conjunto de discos de uma nova unidade de 2 TB, uma unidade de 750 GB mais antiga, duas unidades de 400 GB mais antigas e uma unidade mais antiga de 500 GB. O particionamento espelhado ideal tem 2 TB de espaço utilizável e é descrito no diagrama a seguir, em que ':' separa as partições e '|' separa os discos:

+------------------------------------------------------------------+
| 2TB (sda1)        : (sda2)       : (sda3)       : (sda4)         |
+------------------------------------------------------------------+--+
| 750 GB (sdb)      | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1)  :XX|
+---------------------------------------------------------------------+

Crie seu zpool como

zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1

Isso cria 4 vdevs espelhados. Se qualquer um dos discos falhar, ele poderá ser substituído (com qualquer disco de tamanho) e particionado para recriar as partições ausentes. É importante que o vdevs do ZFS possa ser adicionado a um pool mas não removido . Então, se possível, quando alguém compra uma nova unidade, você deseja reorganizar os vdevs existentes. Vamos dizer que a próxima compra foi uma unidade de 3 TB. Sua configuração ideal é de 3,5 TB utilizável, conforme descrito no diagrama a seguir. Isto é agora 5 pares de vdev. Isso pode ser conseguido com o particionamento apropriado e sucessivamente reprovando e reparticionando as unidades.

+--------------------------------------------------------------+-------------+
| 3 TB (sdf1)       : (sdf2)      : (sdf3)      : (sdf4)       | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1)        | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2)      :X| 
+------------------------------------------------------------------------------+

Manter esse emparelhamento de unidades espelhadas também pode ser feito com o LVM ou com o MD RAID, a idéia é garantir que cada unidade tenha sempre uma unidade espelhada ou parition. Como tudo é espelhado, estamos livres para falhar em unidades e reorganizar as configurações quando as unidades são adicionadas ou removidas. Usando LVM ou MD, seria possível remover unidades e reduzir o array, se desejado, às custas de ferramentas de recuperação menos sofisticadas no ZFS em comparação com o BTRFS.

Algum comentário sobre este procedimento? Um bom script poderia lidar com a alocação sem perdas e o rearranjo de unidades. Quaisquer comentários sobre o LVM vs. MD vs. ZFS? Quaisquer comentários sobre o desempenho da matriz estranhamente particionada resultante? O arranjo de dados em várias partições na mesma unidade causará uma busca excessiva da cabeça e uma falha prematura?

BTRFS devs: todos quer isso e o LVM ou MD não são tecnicamente necessários (e na minha opinião, sub-ótimos). Facilitar a manutenção de um array heterogêneo redundante seria um recurso matador para o btrfs. É um truque no LVM / MD / ZFS como está. Minimizar resliver / resync é altamente desejável.

Sim, isso é obviamente um Drobo de pobre. Não se deve precisar de hardware dedicado para isso ...

    
por Bob McElrath 09.02.2012 / 11:00

1 resposta

4

Eu testei isso com o ZFS e o desempenho de gravação é cerca de metade do que deveria ser, porque o ZFS distribui leituras e gravações sobre todos os vdevs (portanto, dividindo a E / S em vários locais no mesmo disco). Assim, a velocidade é limitada pela velocidade do disco com a maioria das partições. A velocidade de leitura parece ser igual à largura de banda do disco. Observe que um par de partições ZFS em dois discos praticamente dobra a velocidade de leitura de um único disco, porque ele pode ler os discos em paralelo.

O uso de arrays MD LINEAR ou LVM para criar as duas metades resulta em duas vezes o desempenho de gravação em comparação com a proposta ZFS acima, mas tem a desvantagem de LVM e MD não terem ideia de onde os dados são armazenados. No caso de uma falha ou atualização de disco, um lado da matriz deve ser totalmente destruído e ressincronizado / reslivered, seguido pelo outro lado. (por exemplo, o resync / resliver precisa copiar 2 * (tamanho da matriz))

Portanto, parece que a solução ideal é criar um único vdev espelhado do ZFS em dois dispositivos LVM ou MD LINEAR que combinam os discos em "metades" de tamanhos iguais. Isso tem aproximadamente duas vezes a largura de banda de leitura de qualquer disco e a largura de banda de gravação é igual às larguras de banda de disco individuais.

Usando o BTRFS, o raid1 em vez do ZFS também funciona, mas tem metade da largura de banda de leitura, porque o ZFS distribui suas leituras para duplicar a largura de banda, embora pareça que o BTRFS não (de acordo com meus testes). O BTRFS tem a vantagem de que as partições podem ser reduzidas, enquanto elas não podem com o ZFS (portanto, se após uma falha você tiver muito espaço vazio, com o BTRFS é possível reconstruir um array redundante menor encolhendo o sistema de arquivos e reorganizando os discos). / p>

Isso é tedioso para fazer à mão, mas é fácil com alguns bons scripts.

    
por 10.02.2012 / 22:42