Saltar para o conteúdo principal
file-recoveryINFO

Recuperação de RAID 1: um espelho costuma bastar, e dois comandos destroem os dois

O RAID 1 é o nível em que a recuperação devia ser fácil, porque cada disco guarda uma cópia completa. O que estraga tudo não é a falha, é o comando seguinte. Contra o que avisa o Linux RAID wiki, e porque a versão de metadados predefinida hoje não te deixa montar simplesmente um membro isolado.

Por Eric Gerard · Editor · Save My Disk8 min de leituraPhoto via Pixabay

O RAID 1 é o nível em que a recuperação devia ser simples. Não há paridade para reconstruir, nem ordem de faixas para descobrir, e cada disco guarda uma cópia completa de tudo. Na prática é também o nível em que as pessoas destroem os próprios dados com mais leviandade, porque o array continua a parecer vivo e a solução parece óbvia.

Raramente é a falha que faz perder os dados. É o comando seguinte.

O que o espelhamento te dá, e a única coisa que nunca fez

O RAID 1 mantém dois ou mais discos idênticos. Cada escrita vai para cada membro, por isso qualquer membro por si só é uma cópia integral do conjunto. É todo o mecanismo, e é por isso que as hipóteses de recuperação são boas.

É também a razão pela qual a proteção é mais estreita do que se supõe. Uma eliminação é uma escrita. Uma cifragem por ransomware também, tal como um ficheiro sobrescrito ou uma gravação corrompida. O espelhamento propaga todos eles aos dois discos à velocidade da máquina, fielmente, porque é precisamente essa a sua função.

O RAID 1 protege da morte de um disco. Nunca protegeu de nada que chegue aos dados através do sistema de ficheiros. Se os teus ficheiros desapareceram e as unidades estão saudáveis, o array fez exatamente aquilo para que foi construído, e nenhum conhecimento de RAID os traz de volta. Isso é um problema de recuperação de ficheiros sobre um espelho, não um problema de RAID.

A regra que decide como isto acaba

Antes de qualquer diagnóstico, o Linux RAID wiki dá uma única instrução, e o parêntesis é a parte importante:

não executes nenhum comando que escreva nos discos (como mdadm -C, fsck ou até mount, etc.).

A maioria lê essa lista e para nos dois primeiros. O mount está lá. Um sistema de ficheiros com journal reproduz o seu journal ao ser montado, o que é uma escrita, executada antes de teres decidido o que quer que seja. Num array degradado com um membro que ainda não identificaste como bom, essa escrita pode cair no pior sítio possível.

A mesma página exclui a abordagem que quase toda a gente adota sob pressão:

Não tentes resolver as coisas por tentativa e erro, pede a alguém que reveja as medidas que estás prestes a tomar para recuperar os teus dados antes de as pores em prática.

A tentativa e erro funciona quando as tentativas são gratuitas. Aqui cada tentativa pode ser aquela que elimina a cópia de que precisavas.

Três situações, e só uma é difícil

Um membro falhou e o array ainda funciona. Este é o caso bom e não merece drama nenhum. Tens uma cópia completa. Copia os teus dados para fora agora, para outro sítio, antes de fazeres seja o que for ao disco avariado. Substituí-lo primeiro e reconstruir sujeita a tua única cópia sobrevivente a uma leitura do disco inteiro exatamente no momento em que não podes dar-te ao luxo de uma segunda falha.

A controladora ou a máquina morreram e os discos estão bem. Não se perdeu nada. Os dados estão intactos em cada membro, e a única questão é como lá chegar, ao que a versão dos metadados responde mais abaixo.

Os membros divergem e não sabes qual está atualizado. Este é o único caso genuinamente difícil, e é um problema de diagnóstico, não de reparação. Tudo o que destrói dados vive aqui.

Uma câmara reflex de dois objetivos fotografada de lado, com os seus dois objetivos um por cima do outro.
Uma câmara reflex de dois objetivos fotografada de lado, com os seus dois objetivos um por cima do outro.

Dois objetivos de aspeto idêntico, e só um está a pôr alguma coisa na película. Saber qual é qual é todo o trabalho.

Porque é que o teu disco isolado parece não formatado

O conselho que encontras em todo o lado é que podes tirar um disco de um espelho e lê-lo como uma unidade normal. Era verdade, e a predefinição mudou.

O manual do mdadm é preciso:

As várias subversões guardam o superbloco em localizações diferentes do dispositivo, no fim (para a 1.0), no início (para a 1.1) ou a 4K do início (para a 1.2).

Lê o que isso implica. Com a 1.0, o superbloco fica no fim, o sistema de ficheiros começa no offset zero, e um membro isolado comporta-se mesmo como um disco vulgar. Com a 1.1 e a 1.2, os metadados ocupam o início, por isso o sistema de ficheiros começa mais adiante. Uma ferramenta que olha para o offset zero encontra metadados onde esperava uma tabela de partições, e reporta o disco como não formatado ou em bruto.

A 1.2 é a predefinição moderna. Por isso o desfecho mais comum, na configuração mais comum, é um disco que parece vazio e está completamente intacto. Quem aceita uma proposta de formatação nesse momento perde tudo, e o disco nunca esteve danificado. Estava deslocado.

O comando que devora arrays

Quando a montagem do array falha, a internet vai sugerir recriá-lo com os mesmos parâmetros. O wiki aborda isto diretamente:

A recriação deve ser considerada um último recurso, a usar apenas quando tudo o resto falha. As pessoas que erram nisto são uma das principais razões pelas quais se perdem dados.

E explica a armadilha que a torna tão implacável:

Usar um mdadm com predefinições diferentes daquele que foi originalmente usado para criar o array vai deixar o array completamente inacessível.

Os parâmetros que importam não são apenas os que escreves. Incluem as predefinições da versão do mdadm que construiu o array há anos, numa distribuição que talvez já nem uses. Recriar com as predefinições de hoje escreve a disposição de metadados de hoje por cima da de ontem, e esse desencontro não se resolve tentando outra vez.

O --assemble reutiliza o que já está nos discos. O manual descreve-o como reunir os componentes de um array criado anteriormente num array ativo. É o sentido seguro: lê a descrição existente em vez de a substituir. E quando montares o array, o --readonly existe exatamente para este momento. O manual indica que inicia o array só de leitura em vez de leitura-escrita como é habitual, sem permitir escritas no array, e sem iniciar qualquer ressincronização, recuperação ou reshape. Uma reconstrução que arranca sozinha, antes de teres identificado o membro atualizado, é precisamente o modo de falha contra o qual te estás a proteger.

Escolha editorial
4.5 / 5

Reler os ficheiros a partir da imagem de um espelho

Aplica-se a uma imagem de disco que já tenhas feito, ou a um membro que consigas ler. Não identifica qual o espelho atualizado, e não te ajuda antes de teres parado de escrever no array.

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

A ordem que te mantém as opções abertas

Desliga em vez de experimentar. Um array degradado deixado a funcionar é uma reconstrução à espera de arrancar.

Faz imagem dos dois membros antes de mais nada. Do bom não, dos dois. Clonar um disco é uma leitura, por isso não te custa nada, e todos os erros seguintes passam a ser reversíveis. É este único passo que separa uma tarde má de uma perda definitiva.

Trabalha sobre as cópias. Monta o array só de leitura, monta o sistema de ficheiros só de leitura, recupera a partir das imagens.

Identifica o membro atualizado antes de reconstruir, não depois. Se ambos os discos estiveram online até há pouco, compara o que os metadados dizem sobre cada um. Se não conseguires decidir, isso é uma razão para parar, não uma razão para escolher um.

Reconstrói por último. Assim que os teus dados estiverem noutro sítio por completo, um palpite errado não custa nada.

A versão curta

O RAID 1 é o nível mais recuperável que existe, porque cada disco é uma cópia completa e não há nada para reconstruir. O que estraga tudo é escrever antes de diagnosticar, e o Linux RAID wiki põe o mount na lista das coisas que escrevem.

Se o teu disco parece não formatado depois de o teres tirado do array, verifica a versão dos metadados antes de acreditares nisso. Com a 1.1 e a 1.2, as predefinições modernas, o sistema de ficheiros não começa no offset zero e o disco está intacto. E trata a recriação do array como a última coisa que alguma vez tentas, porque as predefinições que o construíram importam tanto como os parâmetros de que te lembras.

Faz imagem dos dois discos, monta o array só de leitura, e reconstrói apenas quando os dados estiverem seguros em algum lado que não seja o array.

A instrução para não executar comandos que escrevam nos discos, incluindo o mount, o aviso contra a reparação por tentativa e erro, a descrição da recriação como último recurso e a nota sobre predefinições divergentes do mdadm são retirados do Linux RAID wiki. As localizações do superbloco de metadados para as versões 1.0, 1.1 e 1.2, a descrição do --assemble e o comportamento do --readonly são retirados da página de manual do mdadm. Ambos foram verificados no momento em que isto foi escrito; confirma-o com a versão do mdadm que estás a usar. As ligações comerciais têm o atributo rel="sponsored nofollow"; pode aplicar-se uma comissão de afiliado sem custo adicional para ti.

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

Posso simplesmente tirar um disco de um array RAID 1 e lê-lo?

Depende inteiramente da versão dos metadados, e a predefinição moderna joga contra ti. O manual do mdadm indica que as várias subversões guardam o superbloco em localizações diferentes do dispositivo, no fim (para a 1.0), no início (para a 1.1) ou a 4K do início (para a 1.2). Com a 1.0 o superbloco fica no fim, por isso o sistema de ficheiros começa no offset zero e um membro isolado lê-se muitas vezes como um disco vulgar. Com a 1.1 e a 1.2 o superbloco ocupa o início, por isso o sistema de ficheiros não começa onde uma ferramenta espera, e o disco parece não formatado. Não está danificado. Está deslocado.

O RAID 1 protege-me de apagar um ficheiro por acidente?

Não, e é esta a falha que as pessoas realmente vivem. O espelhamento significa que ambos os discos são mantidos idênticos, por isso uma eliminação é escrita nos dois ao mesmo tempo. O mesmo se aplica à cifragem por ransomware, a uma gravação errada ou a um ficheiro corrompido. O RAID 1 protege da morte de um disco. Nunca protegeu de nada que tu ou o teu software façam aos dados, e é por isso que não substitui uma cópia de segurança.

Devo reconstruir o array antes de recuperar os meus dados?

Não. Uma reconstrução escreve sobre um membro, e se escolheste o sentido errado sobrescreve a cópia boa com a má. Recupera primeiro, a partir de imagens, e reconstrói depois em hardware que já tenhas comprovado. O Linux RAID wiki é direto quanto às escritas durante a recuperação: não executes nenhum comando que escreva nos discos, e inclui mount entre eles.

Qual é a diferença entre --assemble e --create?

O assemble reutiliza os metadados que já estão nos discos. O manual descreve-o como reunir os componentes de um array criado anteriormente num array ativo. O create escreve metadados novos, o que significa que pode sobrescrever a descrição do teu array existente. O wiki trata a recriação como um último recurso, a usar apenas quando tudo o resto falha, e diz que as pessoas que erram nisto são uma das principais razões pelas quais se perdem dados.

Preciso de software de recuperação RAID para um espelho de dois discos?

Muitas vezes não. O RAID 1 não tem paridade para reconstruir nem ordem de faixas para descobrir, por isso, assim que tenhas um membro legível e o offset certo, uma recuperação de ficheiros vulgar sobre uma imagem desse membro costuma bastar. Recorre a ferramentas RAID dedicadas quando os membros divergem e não consegues dizer qual está atualizado, o que é um problema de diagnóstico e não de reconstrução.