domingo, 29 de maio de 2011

Sistema de Recuperação

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 -> 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ção
Esta é a parte mais fácil:

mount /dev/sda2 /mnt

2) montando os dispositivos virtuais (detalhe técnico)

mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
mount -o bind /sys /mnt/sys

3) a "mágica" do chroot

 Agora que está tudo preparado,  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.lst
Todos 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

 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...

4 comentários:

  1. Parabens pelo post.
    tentei usar a dica em um sistema suse, fiz os procedimentos descritos, todas as alterações foram aceitas e gravadas, porem ainda estou com problema no boot. no caso trata-se de uma maquina fisica que foi necessario trocar placa mae e processador.
    o erro ainda apresentado é could not find /dev/sda2 ....
    Poderia me ajudar?

    ResponderExcluir
  2. Olá! Desculpe a demora em responder, mas estava muito atarefado num projeto e fiquei meio "off-line" por um bom tempo...

    Sei que a esta altura você já deve ter encontrado uma solução, mas vou responder para ficar registrado o que fazer nestes casos. Vamos lá...

    Você trocou placa mãe e procesador... hmmmmm...

    O melhor a fazer é utilizar o fdisk, para descobrir como a placa mãe reconheceu o HD. As placas mais novas tratam todos os HD como SATA, mesmo os HD IDE!!!

    HDs IDE, em interfaces IDE aparacem como /dev/hda, /dev/hdb e por aí vai... Nas placas novas, tanto os HDs IDE como os HDs SATA aparecem sempre como /dev/sda, /dev/sdb, etc...

    Tente usar

    fdisk /dev/hda (ou fdisk /dev/hdb ou fdisk /dev/hdc)

    Se der erro, tua placa não reconheceu o HD em modo IDE. Então tente

    fdisk /dev/sda (ou fdisk /dev/sdb ou fdisk /dev/sdc)

    Uma vez que o fdisk tenha entrado sem erro, basta usar o comando p para listar as partições. A partição de boot é que aparece um asterisco (*) do lado.

    ResponderExcluir
  3. Olá, meu OpenSuse não reconhece um cd ou dvd virgem, o que fazer? Já tentei mudar o fstab e nada.

    ResponderExcluir
  4. parabéns amigo,

    Estava com problema no OpenSUSE 12.1 quando criei um novo usuário e não entrava mais.

    Vi que tem a opção de iniciar o "Yast" pelo prompt, foi a solução.

    obrigado.

    ResponderExcluir