Saltar para o conteúdo principal
file-recoveryINFO

Recuperação de dados RAID 10: o driver do Linux não é um RAID 1+0, e é o layout que decide tudo

O RAID 10 passa por ser o caso fácil: pares em espelho, recupera-se cada par como um RAID 1. O driver md do Linux não funciona assim. Aceita um número de discos que não é múltiplo do número de cópias, oferece três layouts sob o mesmo número de nível, e o manual md diz que a sobrevivência no nível 10 depende da configuração.

Por Eric Gerard · Editor · Save My Disk8 min de leituraFoto via Pexels

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.

Filas de gavetas de discos montadas em rack fotografadas de cima em ângulo rasante, dezenas de tabuleiros idênticos com pequenos LED verdes de atividade, afastando-se desfocados para o fundo do armário.
Filas de gavetas de discos montadas em rack fotografadas de cima em ângulo rasante, dezenas de tabuleiros idênticos com pequenos LED verdes de atividade, afastando-se desfocados para o fundo do armário.

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.

Escolha editorial
4.5 / 5

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.

Fundada em 2004Garantia de 30 diasVersão gratuita de 2 GB
Ver a oferta

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

Escolha editorial
4.5 / 5

Recupera os teus ficheiros apagados → EaseUS

Análise gratuita · ficheiros apagados, formatados, perdidos · Windows & Mac

Fundada em 2004Garantia de 30 diasVersão gratuita de 2 GB
Ver a oferta

Perguntas frequentes

O RAID 10 é a mesma coisa que o RAID 1+0?

No Linux não, e a diferença conta no momento de recuperar. O manual md apresenta o nível assim: « RAID10 provides a combination of RAID1 and RAID0, and is sometimes known as RAID1+0 », e logo em seguida afasta-se desse modelo. Precisa que o número de discos de um array RAID10 não precisa de ser múltiplo do número de cópias de cada bloco, bastam pelo menos tantos discos quantas as cópias. Um RAID 1+0 clássico é um stripe construído sobre pares em espelho distintos, pelo que exige um número par de discos. Um RAID10 md com três discos e duas cópias é perfeitamente legítimo, e não tem nenhum par para recuperar um a um.

Quantos discos pode um RAID 10 perder?

Não há resposta única, e o manual md recusa dá-la. Onde enumera quantos discos cada nível tolera perder, dá um número para os níveis com paridade e « all but one » para o RAID 1, mas para o nível 10 indica que a sobrevivência « is dependent on configuration ». Não é imprecisão. Com duas cópias, saber se duas falhas simultâneas são sobreviventes depende de onde essas duas cópias foram parar, ou seja do layout e do número de discos. Duas falhas podem ser inofensivas ou fatais em arrays que declaram o mesmo nível.

O que são os layouts near, far e offset?

São três formas de colocar as cópias, escolhidas na criação do array. Em near, o manual indica que as cópias de um mesmo bloco são dispostas consecutivamente, tão perto umas das outras quanto possível, através dos stripes. Em far são dispostas tão longe quanto razoavelmente possível, o que permite ao md distribuir as leituras sequenciais pelos discos e aproximar-se da velocidade de um RAID0. Em offset, todas as cópias de um bloco são escritas consecutivamente, desfasadas do comprimento de um stripe, sobre os discos. Os dados são idênticos nos três casos. A sua posição nos pratos não.

Posso retirar um disco de um RAID 10 e ler os ficheiros nele?

Apenas em layout near com número par de discos, e ainda assim de forma parcial. Nessa disposição um membro contém blocos inteiros que uma ferramenta de sistema de ficheiros pode reconhecer, mas contém no máximo metade do array: obtém fragmentos de ficheiros, não ficheiros. Em far e em offset as cópias estão deslocadas de propósito, pelo que um disco lido sozinho não é um pedaço coerente do sistema de ficheiros. Um disco que nesta situação parece vazio está em geral intacto e mal lido.

Devo deixar o controlador reconstruir antes de tentar a recuperação?

Não. Uma reconstrução escreve, e no nível 10 pode não saber qual cópia o driver tratará como referência. Crie primeiro uma imagem de cada membro, já que criar uma imagem é uma leitura e só custa tempo, e trabalhe depois sobre as cópias. Reconstrua quando os seus dados já existirem noutro sítio que não o array.