O RAID 10 tem fama de ser o nível fácil. Sem paridade para reconstruir, sem aritmética de stripes, apenas pares em espelho: encontra-se a metade sobrevivente de cada par, copiam-se os ficheiros, acabou. Essa fama vem da definição de manual do RAID 1+0.
O driver md do Linux, sobre o qual corre a maioria dos arrays RAID 10 fora dos controladores de hardware, não implementa essa definição de manual. Implementa algo mais amplo, que a contém. Se o seu plano de recuperação pressupõe pares, pode ser o plano de um array que não tem.
O nome promete pares, o driver não os exige
O manual md abre a secção exatamente como toda a gente espera. Descreve o RAID10 como « a combination of RAID1 and RAID0, and is sometimes known as RAID1+0 », e acrescenta que « every datablock is duplicated some number of times, and the resulting collection of datablocks are distributed over multiple drives ».
Releia esta segunda frase, porque é ela que faz o trabalho a sério. Não diz que os discos são agrupados em espelhos. Diz que as cópias são distribuídas. O manual enuncia depois a consequência sem rodeios: « It should be noted that the number of devices in a RAID10 array need not be a multiple of the number of replica of each data block; however, there must be at least as many devices as replicas. »
Um RAID 10 de três discos com duas cópias de tudo é portanto um array legítimo e vulgar. Um de cinco discos também. Nenhum dos dois se decompõe em pares, pela simples razão de que não há pares. A redundância é real, mas está espalhada pelo conjunto em vez de fechada em duplas, e qualquer reflexo de recuperação construído sobre « encontrar a outra metade deste espelho » deixa de ter a que se agarrar.
Três layouts escondem-se atrás de um único número de nível
Na criação do array decidem-se duas coisas que depois nunca aparecem no número de nível: quantas cópias de cada bloco existem e para onde vão. O manual é explícito: « When configuring a RAID10 array, it is necessary to specify the number of replicas of each data block that are required (this will usually be 2) and whether their layout should be 'near', 'far' or 'offset'. »
Os três diferem apenas na colocação.
Near junta as cópias. O manual descreve-as colocadas « consecutively ('as close to each other as possible') across the stripes of the array », e nota que com um número par de discos acabam provavelmente no mesmo deslocamento em discos diferentes. É a disposição que se comporta como o manual escolar, e o próprio manual md chama-lhe « the 'classic' RAID1+0 ».
Far afasta-as deliberadamente, « quite distant ('as far as reasonably possible') from each other ». A razão é a velocidade, não a segurança: « The advantage of this layout is that MD can easily spread sequential reads over the devices, making them similar to RAID0 in terms of speed. » Um array montado para o débito em leitura é muitas vezes um array far, e a sua segunda cópia não está em lado nenhum perto da primeira.
Offset é o compromisso, em que « all the copies of a given chunk are striped consecutively ('offset by the stripe length after each other') over the devices ». O manual espera dele características de leitura próximas do far com um tamanho de bloco suficientemente grande, sem tanto deslocamento de cabeça em escrita.
Do lado dos dados nada difere entre os três. Do lado de onde os procurar, difere tudo.

Porque é isto que decide se a reconstrução devolve ficheiros ou ruído
Reconstruir um array em stripe é responder a três perguntas: que discos, por que ordem, com que tamanho de bloco. O RAID 10 acrescenta uma quarta que os níveis com paridade não têm: onde vive a segunda cópia de cada bloco. Erre nela e a reconstrução chega ao fim na mesma. Limita-se a entrelaçar blocos vindos dos deslocamentos errados, e o resultado é um volume que não monta nada ou, pior, que monta uma árvore de pastas cheia de ficheiros que abrem em lixo.
É a razão prática pela qual o layout tem de ser recuperado antes dos dados. Está inscrito nos metadados do array, e é por isso que ler os metadados de cada membro antes de tocar seja no que for conta aqui mais do que em qualquer outro nível. Se os metadados desapareceram e o layout é desconhecido, isto torna-se um pequeno problema de procura: três layouts, um punhado de números de cópias e tamanhos de bloco plausíveis, testados sobre uma cópia até aparecer um sistema de ficheiros. Essa procura só é segura sobre imagens, porque cada tentativa é uma escrita na direção errada se a executar sobre os discos.
A que sobrevive um RAID 10, e porque ninguém lho dirá de antemão
A afirmação mais repetida sobre o RAID 10 é que sobrevive a uma falha por par, pelo que um array de quatro discos pode perder dois desde que não sejam do mesmo par. É verdade num RAID 1+0 clássico, e o manual md tem o cuidado de não generalizar.
Onde enumera quantos discos cada nível tolera perder, dá números concretos para os outros: « this number is one for RAID levels 4 and 5, two for RAID level 6, and all but one (N-1) for RAID level 1. » Para o nível 10 limita-se a indicar que a sobrevivência « is dependent on configuration ».
É a resposta honesta, e decorre de tudo o que antecede. Com duas cópias espalhadas por cinco discos em layout far, saber se dois discos mortos são recuperáveis depende de existir algum bloco cujas duas cópias estavam precisamente nesses dois. Dois arrays que declaram o mesmo nível, o mesmo número de discos e a mesma capacidade podem diferir nisto. Decide-se na criação e não se lê no número de nível.
A consequência operacional é simples: depois de uma segunda falha no nível 10, não presuma que está tudo bem nem que está tudo perdido. Ambas as conclusões são apostas.
A ordem que lhe preserva as opções
Pare de escrever. Um array degradado deixado em serviço é uma reconstrução à espera de ser autorizada, e neste nível pode ignorar que cópia ela tomará como origem.
Registe os metadados de cada membro antes de mais nada. Layout, número de cópias, tamanho de bloco, ordem dos discos e contadores de eventos. É a informação que transforma a recuperação num procedimento em vez de numa procura, e é também a que um recreate apressado destrói.
Crie imagens de todos os membros, não só dos sobreviventes. Criar uma imagem é uma leitura. Não pode agravar nada, e torna reversível cada erro seguinte. Num array em que o layout correto talvez exija várias tentativas, trabalhar sobre imagens não é prudência: é a única maneira de ter direito a mais do que uma tentativa.
Monte o array em apenas leitura e confirme que vê um sistema de ficheiros antes de acreditar nos parâmetros. Uma reconstrução com o layout errado não se anuncia. Um sistema de ficheiros montável, navegável, cujos ficheiros abrem: eis o teste.
Reconstrua por último, em hardware já comprovado, assim que os dados existirem noutro sítio que não este array.
Reler os ficheiros depois de feitas as imagens e encontrado o layout
Funciona sobre uma imagem ou um volume que já consiga montar. Não determina por si o layout near, far ou offset, e não substitui a criação prévia de imagens dos membros.
Em resumo
O RAID 10 no Linux não é o array de pares em espelho que o nome sugere. O manual md permite um número de discos que não é múltiplo do número de cópias, o que dá arrays sem nenhum par para recuperar um a um. Oferece os layouts near, far e offset sob o mesmo número de nível, e só near com número par de discos se parece com o RAID 1+0 clássico.
Como as cópias podem ser colocadas longe umas das outras por desenho, o layout tem de ser conhecido antes de qualquer tentativa de reconstrução, ou a reconstrução irá até ao fim e produzirá disparates. E como a colocação se decide na criação, o manual recusa dizer quantos discos um RAID 10 pode perder: neste nível, a sobrevivência depende da configuração.
Registe os metadados de cada membro, crie imagens de todos, experimente os layouts sobre as cópias e reconstrua só quando os seus ficheiros estiverem noutro lado.
A descrição do RAID10 como combinação de RAID1 e RAID0, a afirmação de que o número de discos não precisa de ser múltiplo do número de cópias, as definições dos layouts near, far e offset, a observação de que near com número par de discos é o RAID1+0 clássico, e a afirmação de que a sobrevivência depende da configuração no nível 10, provêm todas da página de manual Linux md(4), consultada no momento da redação. As citações ficam na língua original. Verifique na versão de kernel e mdadm que está a usar. As ligações comerciais levam o atributo rel="sponsored nofollow"; pode aplicar-se uma comissão de afiliação, sem custo adicional para si.
Guias relacionados
- Recuperação RAID 1: um só espelho quase sempre chega - a lógica de espelho que os layouts near herdam, e os dois comandos que destroem ambas as cópias.
- Recuperação de dados RAID: o método completo para RAID 0, 1, 5, 6 e 10 - a visão de conjunto por nível, incluindo a aritmética de paridade que o RAID 10 não usa.
Recupera os teus ficheiros apagados → EaseUS
Análise gratuita · ficheiros apagados, formatados, perdidos · Windows & Mac



