
Minha ideia atual é criar um array de software, classe RAID-6, com unidades de 4 membros, usando mdadm
.
Especificamente, as unidades seriam HDDs de 1 TB em SATA em um pequeno servidor Dell T20.
O sistema operacional éGNU/Linux Debian8.6 (atualizado posteriormente:Jessie⟶Esticar⟶Buster)
Isso daria 2 TB de espaço em disco com 2 TB de paridade no meu caso.
Eu também gostaria de tê-lo com a tabela de partição GPT, para que isso funcione, não tenho certeza de como proceder especificamente, supondo que preferiria fazer isso apenas pelo terminal.
Como nunca criei um array RAID, você poderia me orientar sobre como devo proceder?
Notas:
Esta matriz servirá apenas para os dados exclusivos. Nenhuma inicialização ou sistema operacional nele.
Optei pelo RAID-6 devido à finalidade deste array. Duas falhas de unidade às quais o array deve ser capaz de sobreviver. Como estou limitado pelo hardware a 4 unidades, não há alternativa ao RAID-6 que eu conheça. (Por mais feia que possa parecer a desaceleração do RAID-6, isso não importa nesta matriz.)
Responder1
Nesta resposta, deixe claro que todos os dados serão destruídos em todos os membros do array (unidades), então faça backup primeiro!
Abra o terminal e torne-seroot
(su
); se você temsudo
ativado, você também pode fazer, por exemplo sudo -i
; verman sudo
para todas as opções):
sudo -i
Primeiro, devemos apagar as unidades, isto é, se houvesse algum dado e sistema de arquivos antes. Suponha que tenhamos 4 membros: sdi
, sdj
, sdk
, sdl
. Com a finalidade de obter feedback visual deste processo, opv
(visualizador de tubos)foi usado aqui:
pv < /dev/zero > /dev/sdi
pv < /dev/zero > /dev/sdj
pv < /dev/zero > /dev/sdk
pv < /dev/zero > /dev/sdl
Alternativamente, para apenas verificar se não há nada para trás, você pode dar uma olhada com o GParted em todas as unidades, e se houver alguma partição com ou sem qualquer sistema de arquivos, limpá-la pode ser suficiente, embora eu mesmo prefira zerar tudo acima. as unidades envolvidas, lembre-se de desmontar todas as partições antes de fazer isso, isso poderia ser feito de forma semelhante a estas linhas simples:
umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi
umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj
umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk
umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl
Em seguida, inicializamos todas as unidades com tabela de partição GUID (GPT) e precisamos particionar todas as unidades, mas não faça isso com o GParted, pois isso criaria um sistema de arquivos no processo, o que não queremos, use gdisk
em vez disso:
gdisk /dev/sdi
gdisk /dev/sdj
gdisk /dev/sdk
gdisk /dev/sdl
Em todos os casos, use o seguinte:
o
Enterpara nova tabela de partição GUID vazia (GPT)
y
Enterpara confirmar sua decisão
n
Enterpara nova partição
Enterpara o padrão da primeira partição
Enterpara o padrão do primeiro setor
Enterpara o padrão do último setor
fd00
Enterpara Linux tipo RAID
w
Enterpara gravar alterações
y
Enterpara confirmar sua decisão
Você pode examinar as unidades agora:
mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl
Deveria dizer:
(type ee)
Se isso acontecer, agora examinamos as partições:
mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Deveria dizer:
No md superblock detected
Se isso acontecer, podemos criar o array RAID6:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Devemos esperar até que o array esteja totalmente criado, este processo podemos facilmente watch
:
watch cat /proc/mdstat
Após a criação do array, devemos observar seus detalhes:
mdadm --detail /dev/md0
Deveria dizer:
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Agora criamos um sistema de arquivos no array, se você usar ext4
, o abaixoescondidoÉ melhor evitar o comando, pois ext4lazyinit
levaria uma quantidade considerável de tempo no caso de uma matriz grande, daí o nome, "preguiçoso", portanto recomendo que você evite este:
mkfs.ext4 /dev/md0
Em vez disso, você deve forçar uma inicialização instantânea completa (com 0% reservado, root
pois é uma matriz de dados):
mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
Ao especificar essas opções, os inodes e o diário serão inicializados imediatamente durante a criação, o que é útil para arrays maiores.
Se você optou por usar um atalho e criou o ext4
sistema de arquivos com o "comando melhor evitado", observe que ext4lazyinit
levará um tempo considerável para inicializar todos os inodes, você pode assisti-lo até terminar, por exemplo, com iotop
ou nmon
.
De qualquer maneira que você escolher fazer a inicialização do sistema de arquivos, você deverá montá-lo após terminar sua inicialização.
Agora criamos algum diretório para este array RAID6:
mkdir -p /mnt/raid6
E simplesmente monte-o:
mount /dev/md0 /mnt/raid6
Como basicamente terminamos, podemos usar o GParted novamente para verificar rapidamente se ele mostra linux-raid
o sistema de arquivos, junto com o raid
sinalizador em todas as unidades.
Nesse caso, criamos corretamente o array RAID6 com partições GPT e agora podemos copiar arquivos nele.
Veja qual UUID o md
sistema de arquivos possui:
blkid /dev/md0
Copie o UUID para a área de transferência.
Agora precisamos editar fstab
, com seu editor de texto favorito, useinano
, no entantosudoedit
pode ser melhor usado:
nano /etc/fstab
E adicione uma entrada a ele:
UUID=<the UUID you have in the clipboard> /mnt/raid6 ext4 defaults 0 0
Eu mesmo não recomendo o uso de defaults
um conjunto de sinalizadores, apenas queria que a linha não fosse excessivamente complexa.
Aqui estão os sinalizadores de montagem que eu uso em um RAID de dados de backup do UPS (em vez de defaults
): nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro
Você pode verificar se está correto depois de salvar as alterações:
mount -av | grep raid6
Deveria dizer:
already mounted
Se isso acontecer, salvamos a configuração do array; caso você md
ainda não tenha nenhum dispositivo criado, basta fazer:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Caso já existam arrays, basta executar o comando anterior sem redirecionar para o arquivo de configuração:
mdadm --detail --scan
e adicione o novo array ao arquivo de configuração manualmente.
No final, não se esqueça de atualizar seu initramfs
, porque caso contrário seu novo array só será montado automaticamente somente leitura, provavelmente como /dev/md127
ou similar:
update-initramfs -u -k all
Verifique se você fez tudo conforme o planejado e, em caso afirmativo, reinicie:
reboot
Responder2
Se você criar matrizes RAID em 4 dispositivos de bloco brutos em vez de 2 x 4 partições, isso significa que todas as operações de recuperação RAID poderão necessariamente operar em todos os dispositivos e vice-versa.
Então, por exemplo, se você espera que os discos eventualmente comecem a desenvolver erros de E/S na última metade deles, com os arrays sobre partições, isso significaria que apenas um dos arrays notaria, enquanto o outro continuaria intocado, pelo menos até o dano se espalha pela metade. Isso pode fornecer alguma flexibilidade temporária ou ausência de lentidão de E/S.
Por outro lado, assim que você começar a intervir, será necessário retirar todo o disco físico para substituição, portanto, necessariamente será necessário degradar os dois arrays em algum momento. Além disso, com SSDs, aparentemente tornou-se mais comum que todo o disco falhe, portanto, ambos os arrays podem ser afetados por tais eventos de qualquer maneira.
Não há nada a ser dito sobre os detalhes do processo que não possa ser encontrado no particionamento típico e na documentação do mdadm.