Quem nunca perdeu dados importantes por problemas ou
descuidos relacionados ao particionamento do HD, nunca reinstalou o sistema por
que um vírus apagou a tabela de partições do HD, ou por que o fsck não
encontrava o superbloco da partição, que atire a primeira
pedra :). Este tutorial ensina a recuperar partições deletadas e recuperar
sistemas de arquivos corrompidos, usando as ferramentas disponíveis no Linux.
Todo o processo pode ser feito a partir de um live-CD, como o Kurumin.
Fazendo backup e recuperando
a MBR e tabela de partições
Ao comprar um novo HD, você precisa primeiro formatá-lo
antes de poder instalar qualquer sistema operacional. Existem vários programas
de particionamento, como o QTParted, GParted, CFDisk e outros.
Os programas de particionamento salvam o particionamento na
tabela de partição, gravada no início do HD. Esta tabela contém informações
sobre o início e final de cada partição. Depois do particionamento, vem a
formatação de cada partição, onde você pode escolher o sistema de arquivos que
será usado em cada uma (ReiserFS, EXT3, FAT, etc.).
Ao instalar o sistema operacional, é gravado mais um
componente: o gerenciador de boot, responsável por carregar o sistema durante o
boot.
Tanto o gerenciador de boot quanto a tabela de
particionamento do HD são salvos no primeiro setor do HD, a famosa trilha MBR,
que contém apenas 512 bytes. Destes, 446 bytes são reservados para o setor de
boot, enquanto os outros 66 bytes guardam a tabela de partição.
Ao trocar de sistema operacional, você geralmente subscreve
a MBR com um novo gerenciador de boot, mas a tabela de particionamento só é
modificada ao criar ou deletar partições. Caso por qualquer motivo, os 66 bytes
da tabela de particionamento sejam subscritos ou danificados, você perde acesso
a todas as partições do HD. O HD fica parecendo vazio, como se tivesse sido
completamente apagado.
Para evitar isso, você pode fazer um backup da trilha MBR do
HD. Assim, você pode recuperar tudo caso ocorra qualquer eventualidade. Para
fazer o backup, use o comando:
# dd
if=/dev/hda of=backup.mbr bs=512 count=1
O comando vai fazer uma cópia dos primeiros 512 bytes do
"/dev/hda" no arquivo "backup.mbr". Se o seu HD estivesse
instalado na IDE secundária (como master), ele seria visto pelo sistema como
"/dev/hdc". Basta indicar a localização correta no comando.
Você pode salvar o arquivo num disquete ou pendrive, mandar
para a sua conta do GMail, etc. Caso no futuro, depois da enésima reinstalação
do Windows XP, vírus, falha de hardware ou de um comando errado a tabela de
particionamento for pro espaço, você pode dar boot com o CD do Kurumin e
regravar o backup com o comando:
# dd
if=backup.mbr of=/dev/hda
Lembre-se de que o backup vai armazenar a tabela de
particionamento atual. Sempre que você reparticionar o HD, não se esqueça de
atualizar o backup.
Usando o Gpart
Caso o pior aconteça, a tabela de particionamento seja
perdida e você não tenha backup, ainda existe uma esperança. O Gpart é capaz de
recuperar a tabela de partição e salvá-la de volta no HD na maioria dos casos.
Você pode executá-lo dando boot pelo CD do Kurumin, ou baixá-lo no: http://www.stud.uni-hannover.de/user/76201/gpart/#download.
Baixe o "gpart.linux" que é o programa já
compilado. Basta marcar a permissão de execução para ele:
# chmod +x gpart.linux
Nas distribuições derivadas do Debian, você pode instalá-lo
pelo apt-get:
# apt-get install gpart
Execute o programa indicando o HD que deve ser analisado:
# ./gpart.linux /dev/hda
(ou simplesmente "gpart /dev/hda" se você tiver
instalado pelo apt-get)
O teste
demora um pouco, pois ele precisará ler o HD inteiro para determinar onde
começa e termina cada partição. No final, ele exibe um relatório com o que
encontrou:
Primary partition(1) type: 007(0x07)(OS/2 HPFS,
NTFS, QNX or Advanced UNIX) size: 3145mb #s(6442000) s(63-6442062) chs:
(0/1/1)-(1023/15/63)d (0/1/1)-(6390/14/61)r
Primary partition(2) type: 131(0x83)(Linux ext2
filesystem) size: 478mb #s(979964) s(16739730-17719693) chs:
(1023/15/63)-(1023/15/63)d (16606/14/1)-(17579/0/62)r
Primary partition(3) type: 130(0x82)(Linux swap
or Solaris/x86) size: 478mb #s(979896) s(17719758-18699653) chs:
(1023/15/63)-(1023/15/63)d (17579/2/1)-(18551/3 /57)r
Se as informações estiverem corretas você pode salvar a
tabela no HD usando o parâmetro "-W":
# gpart -W
/dev/hda /dev/hda
Veja que é preciso indicar o HD duas vezes. Na primeira você
indica o HD que será vasculhado e em seguida em qual HD o resultado será salvo.
Em caso especiais, onde você tenha dois HDs iguais, por exemplo, você pode
gravar num segundo HD, com em: "gpart -W /dev/hda /dev/hdc"
O gpart não é muito eficiente em localizar partições
extendidas (hda5, hda6, etc.). Em boa parte dos casos ele só vai conseguir
identificar as partições primárias (hda1, hda2, hda3 e hda4). Nestes casos,
você pode usar o cfdisk ou outro programa de particionamento para criar
manualmente as demais partições (apenas crie as partições e salve, não
formate!). Se você souber indicar os tamanhos aproximados, principalmente onde
cada uma começa, você conseguirá acessar os dados depois.
Usando o Testdisk
Outra ferramenta "sem preço" para recuperação de
partições é o Testdisk. Embora a função seja a mesma, ele utiliza um algoritmo
bastante diferente para detectar partições, o que faz com que ele funcione em
algumas situações em que o Gpart não detecta as partições corretamente e
vice-versa. Por isso vale a pena ter ambos na caixa de ferramentas.
Lembre-se que ambos são capazes de recuperar partições
apenas enquanto as informações não são subscritas. Se você acabou de apagar a
sua partição de trabalho, é bem provável que consiga recuperá-la, mas se o HD
já tiver sido reparticionado e formatado depois do acidente, as coisas ficam
muito mais complicadas. Sempre que um acidente acontecer, pare tudo e volte a
usar o HD só depois de recuperar os dados.
O Testdisk permite recuperar desde partições isoladas
(incluindo as extendidas), até toda a tabela de partição, caso o HD tenha sido
zerado. Ele suporta todos os principais sistemas de arquivos, incluindo FAT16,
FAT32, NTFS, EXT2, EXT3, ReiserFS, XFS, LVM e Linux Raid.
A página oficial é a http://www.cgsecurity.org/testdisk.html
onde, além da versão Linux, você encontra versões para Windows, DOS e até para
o Solaris.
Embora não seja exatamente um utilitário famoso, o Testdisk
é incluído em muitas distribuições. Nos derivados do Debian, você pode
instalá-lo via apt-get:
# apt-get install testdisk
Para instalar a versão em código fonte, além dos
compiladores básicos (veja mais detalhes no capítulo 3) , é necessário ter
instalado o pacote "ncurses-dev"
ou "libncurses-dev". A
instalação propriamente dita é feita usando a receita tradicional: descompactar
o arquivo, acessar a pasta criada e rodar os comandos "./configure",
"make" e "make install".
Vamos a um exemplo prático de como recuperar duas partições
deletadas "acidentalmente". Onde o cfdisk está mostrando "Free Space" existem na verdade as
partições "/dev/hda2" e "/dev/hda3", que removi
previamente:
Comece chamando o Testdisk como root:
# testdisk
Na tele inicial, selecione o HD que será analisado, acesse a
opção "Analyse" e em seguida
"Proceed ", para iniciar a
varredura do disco.
O Testdisk
verifica a tabela de partições atual e em seguida pesquisa em todos os setores
onde podem existir informações sobre outras partições que não constem na tabela
principal.
Veja que, apenas com o teste rápido, ele já conseguiu
localizar as duas partições que haviam sido deletadas:
Pressionando a tecla "P" você pode ver os dados
dentro da partição, para ter certeza que os arquivos estão lá (a versão
disponível no apt-get não consegue mostrar arquivos dentro de partições
ReiserFS, mas a recuperação funciona normalmente).
Nos raros casos onde ele localize a partição, mas
identifique incorretamente o sistema de arquivos, use a opção "T"
para indicar o correto.
Depois de checar se o particionamento detectado está
correto, pressione "Enter" mais uma vez e você chega à tela final,
onde você pode salvar as alterações, usando a opção "Write". Reinicie o micro e monte a partição para checar os
dados.
Caso a lista não exiba a partição que você está procurando,
use a opção "Search " no lugar
do Write. Isto ativa o teste mais longo, onde ele vasculha todos os setores do
HD em busca de partições deletadas. Este segundo teste demora alguns minutos e,
num HD com bastante uso, pode retornar uma longa lista de partições que foram
criadas e deletadas durante a vida útil do HD. Neste caso, preste atenção para
recuperar a partição correta.
Todas as partições listadas aqui parecem com o atributo
"D", que significa que a partição foi deletada. Para recuperar uma
partição, selecione-a usando as setas para cima/baixo e use a seta para a
direita para mudar o atributo para "*" (se ele for uma partição
primária e bootável, como o drive C: no Windows), "P" se ela for uma
partição primária ou "L" se ela for uma partição lógica. Lembre-se de
que. no Linux, as partições de 1 a 4 são primárias e de 5 em diante são
extendidas.
É possível também adicionar uma partição manualmente, caso
você saiba os setores de início e final, mas isso raramente é necessário.
Pressione "Enter" mais uma vez e ele mostra uma
tela de confirmação, com a tabela de particionamento alterada que será salva no
disco. Use o "Write" para
salvar ou volte à tela inicial para começar novamente em caso de erros.
Tenha em mente que o tamanha da partição é reportado de
acordo com o número de setores de 512 bytes. Uma partição de 5 GB tem pouco
mais de 10 milhões de setores.
O ideal é que você faça todo o processo usando um live-CD. O
Kurumin vem com o Testdisk pré-instalado a partir da versão 6.0 e ele pode ser
encontrado também nas versões recentes do Knoppix, PLD e Ultimate Boot CD.
Depois de recuperar qualquer partição, é importante checá-la
usando o utilitário apropriado, para que qualquer problema dentro da estrutura
do sistema de arquivos seja corrigido.
Recuperando partições
danificadas
Assim como no Windows, você nunca deve desligar o micro no
botão ao rodar qualquer distribuição Linux.
Mas, acidentes acontecem. A energia elétrica acaba de vez em
quando, alguns dos drivers de softmodems podem fazer o micro travar (estes
drivers são proprietários, por isso não é possível corrigir bugs, como em
outras partes do sistema; você depende unicamente da boa vontade do fabricante)
e assim por diante.
Durante o boot, o sistema verifica as partições em busca de
problemas, tentando resolver qualquer inconsistência no sistema de arquivos
causado por um desligamento incorreto. Você pode perder alguns arquivos que
ainda não tivessem sido salvos no HD, mas a idéia é que a verificação coloque
todo o resto em ordem.
Para partições em ReiserFS é usado o reiserfsck, para
partições em EXT2 ou EXT3 é usado (respectivamente) o fsck.ext2 ou o fsck.ext3
e para partições em XFS é usado o xfs_repair.
Mas, em alguns casos, o dano pode ser grande o suficiente
para que não seja possível repará-lo automaticamente, fazendo com que o sistema
simplesmente deixe de dar boot.
Não há motivo para pânico. Você pode dar boot pelo CD do
Kurumin e usá-lo para reparar as partições danificadas.
Abra um terminal e vire root (su), lembre-se de que, ao
rodar o Kurumin pelo CD, você pode definir a senha de root usando o comando
"sudo passwd". A partição a ser reparada precisa estar desmontada.
Vou usar como exemplo a partição /dev/hda1.
Se for uma partição EXT3, use o comando:
# fsck.ext3 /dev/hda1
Ele vai começar a apontar os erros e perguntar se cada um
deve ser corrigido. Normalmente você pode ir apenas respondendo "y"
para tudo, mas caso existam dados realmente importantes na partição é melhor
prestar mais atenção. Arquivos danificados ou fragmentos de arquivos que
puderam ser recuperados vão para a pasta "lost+found" no diretório
raiz da partição.
Você pode também adicionar o parâmetro "-f", que
força a verificação da partição, mesmo que o sistema de arquivos pareça não ter
problemas:
# fsck.ext3 -f /dev/hda1
O fsck não é capaz de recuperar o sistema de arquivos em
casos de problemas com o superbloco, o setor que contém informações essenciais,
como o tipo, tamanho, status e informações sobre a estrutura do sistema de
arquivos. Quando não encontra o superbloco, o fsck simplesmente falha
miseravelmente, exibindo um "fatal error", sem maiores explicações.
É difícil estimar quantas reinstalações já foram feitas, e
qual foi o efeito negativo sobre a reputação do sistema durante sua história
por causa deste simples problema, que é felizmente fácil de resolver.
Sempre que a partição é criada, são criados vários
superblocos alternativos, que servem justamente de backups para casos de
problemas com o primeiro. Você pode ver a lista de endereços usando o comando
"mkfs.ext3 -n partição", como em:
# mkfs.ext3 -n /dev/hda1
Ao usar o comando, nunca esqueça de incluir o "-n",
caso contrário ao invés de mostrar as informações, ele vai formatar a partição.
No final do relatório você encontra:
Superblock backups stored on
blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Alternativamente, você pode usar também o comando "dumpe2fs
/dev/hda1 | grep -i superblock". O Testdisk (que vimos a pouco) também
oferece uma opção para listar superblocos alternativos em partições EXT, que
você acessa em "Advanced > Superblock
".
Chame novamente o comando "fsck.ext3", adicionando
a opção "-b", seguida do endereço do superbloco que será usado. Caso
eventualmente o primeiro resulte em erro, experimente o segundo, e assim por
diante:
# fsck.ext3
-f -b 32768 /dev/hda2
Para partições EXT2, use o
comando "fsck.ext2", que suporta os mesmos parâmetros.
Numa partição ReiserFS, comece com o comando:
# reiserfsck
--check /dev/hda1
Ele exibe um aviso:
Do you want
to run this program?[N/Yes] (note need to type Yes if you do):
Ou seja, você precisa digitar "Yes" para
continuar, caso apenas dê Enter ele aborta a operação.
Ele vai verificar toda a estrutura do sistema de arquivos e
indicar os erros encontrados. O próximo passo é usar a opção "-fixfixable":
# reiserfsck --fix-fixable /dev/hda1
Este segundo comando efetivamente corrige todos os erros
simples, que possam ser corrigidos sem colocar em risco as demais estruturas do
sistema de arquivos. Em 90% dos casos isto é suficiente.
Caso seja encontrado algum erro grave, ele vai abortar a
operação. Estes erros mais graves podem ser corrigidos com o comando:
# reiserfsck --rebuild-tree /dev/hda1
Este comando vai reconstruir do zero todas as estruturas do
sistema de arquivos, vasculhando todos os arquivos armazenados. Esta operação
pode demorar bastante, de acordo com o tamanho e quantidade de arquivos na
partição. Nunca interrompa a reconstrução, caso contrário você não vai
conseguir acessar nada dentro da partição até que recomece e realmente termine
a operação.
O "--rebuild-tree"
vai realmente corrigir qualquer tipo de erro no sistema de arquivos. Ele só não
vai resolver o problema caso realmente existe algum problema físico, como, por
exemplo, um grande número de setores defeituosos no HD.
Finalmente, caso você esteja usando uma partição formatada
em XFS, comece com o:
# xfs_check /dev/hda1
Ele vai indicar os problemas encontrados. Para realmente
corrigi-los, rode o:
# xfs_repair /dev/hda1
Assim como no caso do reiserfsck, todo o processo é
automático. Ao contrário do EXT2, tanto o ReiserFS quanto o XFS são sistemas de
arquivos muito complexos, por isso qualquer intervenção manual só aumentaria a
possibilidade de destruir tudo.
Mas, ambos incluem algumas opções avançadas, que podem ser
especificadas no comando. Você pode dar uma olhada dentro dos manuais: "man
reiserfsck" ou "man xfs_repair".
0 comentários:
Postar um comentário