terça-feira, 20 de setembro de 2016

Recuperando ReiserFS


Ok, voce tem um disco formatado em reiserfs e brotaram badblocks e agora o disco nao monta mais e fica dando erro de INPUT/OUTPUT ERROR!

Bom eu tive esse problema... e estou aqui pra mostrar como consegui recuperar meus dados...

Primeiro eu adoro reiserfs pena que o  Hans matou a mulher... Mas o file system é bom demais... o reiserfstools é completo é uma ótima escolha de filesystem para discos que irao ficar guardando backups... enfim... vamos ao que interessa.

 

O problema:

Meu senário é um disco SATA de 1TB, que estava com 48 bads que brotaram no inicio do disco... Acredito que um pouco de sorte estarem só no início mas o caso é que por estarem ali a particao nao montava mais... E pior magic number nao sabia mais que filesystem tinha ali dentro... Com isso nenhum fsck funcionava...

 

A Saga:

Normalmente quando se tem problemas no disco a primeira coisa a fazer é tentar rodar o fsck no caso do reiserfs minhas tentativas foram nesta linha:

WARNING!
Rode os comandos à partir de um live CD, ou algo do tipo e com disco desmontado.

Checando o filesystem
$reiserfsck --check /dev/sdb1

Este comando faz ou pelo menos tenta checar a integridade do disco, normalmente isso é o ponto de partida... No meu caso a checagem falhava, me retornando que o filesystem era desconhecido.

Nesse ponto se voce recebeu a mesma falha que eu, antes de continuar, faca um clone deste disco para outro para evitar perda de dados...

Antes de tudo faça seu backup
$dd if=/dev/sdb of=/dev/sdc bs=4k conv=noerror,sync

importante aqui neste dd é usar o noerror pra continuar fazendo a copia mesmo quando encontrar blocos danificados... a "resolução" da cópia no paramentro bs, no caso 4k se colocar mais a copia é mais rapido mas menos "precisa"...
isso ja garante que voce leve todos os dados para outro disco bom e tente fazer o rebuild-tree no outro disco assim vc ja tem outro disco com seus dados salvos e bem guardadinhos... Mas vamos alem... eu quero fazer a minha particao danificada funcionar novamente.

Depois de 8 horas de dd continuei a saga no disco, defeituoso...

Reconstruindo o filesystem, não faça isso sem backup!
$reiserfsck --rebuild-tree /dev/sdb1
SEM SUCESSO!!! 

o rebuilt-tree é meio perigoso, ele pode relocar blocos e tenta reconstuir o filesystem a partir de metadados... Mas infelizmente ele nao encontrou metadados... Por que eu perdi o inicio do disco... entao pra ele nem tem formatacao naquele disco.

Uma saída sería tentar fazer agora o rebuild-sb

Tentativa de reconstruir os superblocos do disco
$reiserfsck --rebuild-sb /dev/sdb1
FALHA!!!  ;(

O rebuild-sb quer encontrar os metadados quebrados e reconstruilos a partir de algum superblock bom... O problema é o mesmo... nao acha o filesystem... sem superblocks pra mim... ;(

Bom eu nao desisti... Tentei mapear os bads do disco e passar pra ele no fsck...

Gerando arquivo com mapa dos badblocks
$badblocks -v -o /dev/sdb1

ok... consegui gerar o arquivo "bads" com os badblocks do meu disco... vamos em frente...

Tentativa de isolar os badblocks com fsck
$reiserfsck --badblocks bads /dev/sdb1
estou tentando checar o disco passando pra ele o mapa de blocos defeituosos...

FALHA DE NOVO!!!
aqui eu comecei ficar sem opções...

Mas entre as tentativas do rebuild-tree o reiserfstools me deu uma dica, que deu uma nova idéia para encontrar o caminho das pedras...

A dica estava estampada na minha cara!
#############################################
No reiserfs metadata found. If you are sure that you had the reiserfs
on this partition, then the start of the partition might be changed
or all data were wiped out. The start of the partition may get changed
by a partitioner if you have used one. Then you probably rebuilt the
superblock as there was no one. Zero the block at 64K offset from the
start of the partition (a new super block you have just built) and try
to move the start of the partition a few cylinders aside and check if
debugreiserfs /dev/xxx detects a reiserfs super block. If it does this
is likely to be the right super block version.
If this makes you nervous, try *deletedurl*, and for
$25 the author of fsck, or a colleague if he is out, will step you
through it all.
#############################################

Opa, esse mensagem me interessou --> "Zero the block at 64K offset from the start of the partition..."

hummmmm... Como eu tinha 48 bads se eu tenta-se mover esses blocos, isso poderia funcionar...

Eu pensei em fazer isso com o dd, mas errar o cálculo não sería bom nessa altura... Então rersolvi usar uma ferramenta para lidar com os badblocks....

O HDAT2 é uma ferramenta que apesar de ainda rodar só em DOS, funciona que é uma maravilha...


Foi baixar a ferramenta, bootar pela iso, e aplicar o VERIFY,WRITE,VERIFY

Essa ferramenta trabalha a nível de bloco, ou seja ela ignora o filesystem assim voce pode literalmente usar com qualquer filesystem... O que o HDAT2 faz nesse menu é localizar setores defeituosos e jogar para o final do disco...


Depois de ter concluido o HDAT2, vamos rodar o rebuild-tree de novo...

Livre dos bads podemos continuar...
$reiserfsck --check /dev/sda1
$reiserfsck --rebuild-tree /dev/sdb1

E Voi-la... o disco esta vivo de novo e pode ser montado... Ufa... ;)
Como tinha muita coisa, ainda não encontrei algo que foi comprometido pelos bads... mas dependendo de como esta o estado do disco, muita coisa pode ser comprometida nesse procedimento, então sempre faça backup!

Nenhum comentário:

Postar um comentário