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:
- Os discos rígidos falham com regularidade alarmante. Perder arquivos é inaceitável.
- Eu comprarei um novo HDD de tempos em tempos. Inevitavelmente, o melhor preço / GB é um tamanho diferente da última compra de HDD.
-
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.
- 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).
- 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.
- Particione os discos maiores de forma que haja uma partição exatamente do mesmo tamanho que um dos discos menores, no outro grupo.
- 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 ...