Sistema de Recuperação
Autor: Carlos Washington | Publicado: 2011-05-29T19:21:00-03:00

Uma das coisas que me fazem gostar muito do Linux é que, salvo uma pane muito grave, dificilmente você se vê numa situação de "perda total", onde a "única alternativa" é formatar e reinstalar tudo outra vez!
Recentemente, me deparei com uma situação inusitada que, embora tenha acontecido em um ambiente virtual e controlado, bem pode acontecer numa situação do dia-a-dia, como por exemplo você clonar uma partição do HD (boot, por exemplo) e depois tentar recuperá-la em outro HD.

O pessoal do suporte costuma fazer muito isto! Digamos que uma empresa comprou 15 máquinas idênticas para seus colaboradores. Ao invés do pessoal do suporte instalar tudo em todas as máquinas, instala-se tudo em uma máquina e depois é só cloná-la e restaurar o clono nas outras. Mole, mole...

Mas podem ocorrer algumas "pegadinhas" como esta que ocorreu comigo, embora haja uma boa explicação para isto!
Ao tentar o boot em uma máquina virtual que importei de outro ambiente (uso muito o VirtualBox), deparei-me com a situação mostrada na figura abaixo.

Como vocês podem ver na figura acima, o sistema não conseguiu completar o boot porque não encontrou a partição de boot! Prestem atenção na seguinte informação:
Could not find /dev/disk/by-id/ata-VBOX_HARDDISK_VB82ef4f0b-5de0e2e8-part2.
Bem, o que interessa aqui é o detalhe do /disk/by-id/!
Normalmente, as partições são identificadas no Linux por algo como /dev/sdaN, onde N é o número da partição. Isto é o que chamamos de device name. As versões mais novas do Linux estão identificando o(s) disco(s) e suas respectivas partições agora pelo ID do dispositivo (device ID). Isto também tem uma boa razão para ser assim, principalmente quando você pode ter muito baratamente muitos discos em um mesmo sistema!.
Enfim, caso isto ocorra com você, vou mostrar como corrigir isto, usando o Sistema de Recuperação do OpenSuSE.
O sistema de recuperação do opensuse nada mais é que a possibilidade de você dar boot pelo DVD e "assumir" o sistema em modo root. Veja como fazer isto seguindo as figuras abaixo.

Selecionando o Sistema de Recuperação do DVD de instalação
Não deixe de apertar F2 e selecionar nosso idioma. Senão o teclado vai ficar uma bagunça!

Pronto para entrar em modo root?
Digite root e aperte Enter, para assumir o controle em modo root!

Explorando o ambiente
Usando o fdisk
O FDISK


Normalmente, em sistemas com um só HD, /dev/sda1 é a partição de swap e /dev/sda2 a partição de boot. Em outras situações onde existem dois ou mais HD as coisas podem estar de forma diferente e usar o fdisk pode ser a maneira mais apropriada para descobrir quem é quem. 

O fdisk é o particionador de linha de comando do linux. Ele pode ser usado para obter informações a respeito do(s) disco(s) instalado(s) no sistema. Em nosso caso, vamos acionar o fdisk para ver como nosso disco foi particionado. É só digitar:
fdisk /dev/sda
NOTA: Se você é um daqueles raros que ainda usa uma placa mãe não SATA, com HD IDE, então use /dev/hda.
Uma vez no fdisk, tecle p e Enter, para exibir as partições de /dev/sda

Agora podemos ver que sda tem duas partições -&gt; sda1 e sda2. sda1 é a partição de swap e sda2 é nossa partição de boot. Pronto, já temos as informações que precisamos para resolver o problema!

Montando a partição de boot do sistema e assumindo o controle como o root "de verdade".
Existe um truque no openSuSE para você montar a partição de boot "original" e assumir o controle como se você tivesse dado boot normalmente. Este truque consiste em montar a partição "original" e usar o comando chroot. Mas, para isto, tem um pequeno detalhe técnico que vou mostrar agora. Siga as instruções!
1) montando a partiçãoEsta é a parte mais fácil:

mount /dev/sda2 /mnt
2) montando os dispositivos virtuais (detalhe técnico)

mount -o bind /proc /mnt/procmount -o bind /dev /mnt/devmount -o bind /sys /mnt/sys
3) a "mágica" do chroot 

&nbsp;Agora que está tudo preparado,&nbsp; basta digitar

chroot /mnt
Pronto, agora você está em seu HD, como se tivesse dado o boot por ele, e com os privilégios do super usuário root! Veja na figura abaixo a sequência completa destes comandos e como o prompt muda para a cor vermelha, sinalizando que você está em modo root. 

A tela após você assumir o root do sistema

Verificando as pastas do sistema "original"

Resolvendo o problema

Agora que estamos no controle do sistema "original" (verdadeiro), podemos corrigir o problema.

O GRUB e o arquivo menu.lstTodos sabem(?) que o Grub é o gerenciador de boot do Linux. E sabem também que ele usa um arquivo chamado menu.lst, para obter as informações necessárias para o boot, certo? Ok. Então vamos verificar os dados contidos em menu.lst do nosso sistema "original".
Basta usar um belo cat /boot/grub/menu.lst para ver algo como o mostrado na tela abaixo.



Ops, Grub!
Podemos ver na figura acima que o grub procura a partição de boot em /dev/disk/by-id/ata-VBOX_HARDDISK_VB82ef4f0b-5de0e2e8-part2. Ocorre que ata-VBOX_HARDDISK_VB82ef4f0b-5de0e2e8 é o ID do HD de origem, mas estamos em outro HD, não é mesmo? Então o ID aqui é diferente e o Grub se ferra!


FSTAB
Outro arquivo usado pelo sistema e que pode atrapalhar o processo de boot é o fstab. O fstab guarda as informações a respeito das partiçoes do(s) disco(s) e seus respectivos pontos de montagem. Veja ne figura abaixo o resultado do comando cat /etc/fstab.

cat /etc/fstab

Como podemos ver na figura acima, as informações contidas no fstab usam disk-by-id. Este é outro arquivo que vamos ter que editar.
Alterando as configurações das partições
Há duas maneiras de corrigir inconsistências no fstab: através do yast ou editando o arquivo diretamente.
Eu prefiro trabalhar com arquivos de configuração editando-os diretamente. Mas isto porque já me sinto seguro em fazer alterações neles. Se você está iniciando, pode fazer quase tudo diretamente no yast, o utilitário de console para configuração do sistema (o yast2 é para o modo gráfico).
Usando o yast
Para entrar no yast, basta digitar yast na linha de comando.

Tela inicial do yast
Para chegar no particionador via yast, basta selecionar Sistema / Particionador. Veja na figura abaixo o yast exibindo o modo como a partição /dev/sda1 está montada em /etc/fstab.

/dev/sda1 em /etc/fstab, vista pelo yast
Como podemos ver na figura acima, /dev/sda1 está montada via fstab como a opção Device ID e é justamente isto que está causando o problema. Basta agora mudar para Device name e pronto.Salvando esta modificação e voltando à linha de comando, podemos dar um novo cat /etc/fstab para ver o resultado. Deve ser algo como o mostrado na figura abaixo.
/etc/fstab modificado pelo yast
Podemos ver na figura acima que /dev/sda1 (a partição de swap) agora está montada pelo device name em fstab. Note que a partição /dev/sda2 continua montada pelo seu Device ID.
Editando fstab diretamente

Depois que você ganha experiência, tende a editar os arquivos de configuração diretamente. Vamos fazer isto com /etc/fstab, usando o joe. O joe é um editor de textos do console que acho melhor que o vi! Para chamá-lo, basta digitar joe, seguido do caminho/arquivo a ser editado.

Editando /etc/fstab com o joe
Para saber o que fazer com o joe, basta apertar Ctrl+K, depois H, para obter ajuda na tela.Depois que editar fstab com o joe, basta Ctrl+K X, para salvar e sair.

Hora de editar /boot/grub/menu.lst

/boot/grub/menu.lst antes de editar

/boot/grub/menu.lst editado
&nbsp;Note na figura acima que as informações de partição foram modificadas para Device name, à semelhança de /etc/fstab.

/boot/grub/device.map

Há um último lugar onde as informações do HD estão gravadas no formato /dev/disk/byid. Trata-se do arquivo device.map, usado também pelo grub. Podemos abrí-lo com o joe e editá-lo, como mostrado nas figuras abaixo.


/boot/grub/device.map antes da edição
/boot/grub/device.map depois da edição

De volta ao controle!

Depois de todas as alterações feitas a gravadas, basta reiniciar o sistema, para ver se tudo deu certo! Basta digitar

reboot


De volta ao sistema "original"
Até o próximo artigo...