Recuperando o Sistema (Grub basicamente)

Iniciado por Mythus, 27 de Junho de 2007, 03:33

tópico anterior - próximo tópico

Mythus

Recentemente alguém me perguntou algo que achei interessante dividir com vocês, eis o problema hipotético:
o usuário tinha 2 HDs dividido da seguinte forma:
HD1 Ubuntu
hda1 /
hda2 /home
hda3 swap
hda5 /media/hda5

HD2 Fedora
hdb1 /
hdb2 /home
hdb3 swap
hdb5 /media/hdb5

Não satisfeito com a tranqüilidade e estabilidade dos sistemas, comprou um terceiro e colocou um pouco de mais emoção e aventura na sua vida, afinal de contas, é bom viver perigosamente. ;) O "técnico" de informática disse que na compra, com uma pequena taxa ele já instalava e configurava o Xistema oPeracional. Jogou os HDs anteriores para a IDE2 porque pensou que seria "backup" e colocou na Master da IDE1. Feliz e serelepe assim que iniciou, sentiu falta de algo, o livre arbítrio de escolher que sistema queria iniciar. O que fazer, se ambos sistemas estão instalados e atualizados?

Vamos esquecer por um momento que o Ubuntu tem uma opção "rescue", ok? Pra ficar divertido ;)

1º Tenha um CD live ou floppy de qualquer distro em mãos e dê boot por ele, abra um terminal e mãos à massa! \o/
Obs.: Cada distro tem seu root ou seu jeito de dar o poder de root aos usuários, então, supondo que do Ubuntu você já digitou um sudo su - ou vai prefixar cada comando abaixo, seguiremos:

2º Descobrindo por onde andam os hds. Você não tem idéia de onde estão os HDs e não pode abrir o gabinete:
fdisk -l /dev/hda
fdisk -l /dev/hdb
fdisk -l /dev/hdc
fdisk -l /dev/hdd
Se a IDE estiver livre ou tiver nela um leitor de CD, não vai apresentar nenhuma saída, mas se tiver, vai aparecer o "retrato" das suas partições. No caso em tela, alguns sistemas podem aparecer:
Windows:
W95 FAT32 (LBA)
W95 FAT32
W95 Ext'd (LBA) ou Win95 (LBA) Partição Extendida
HPFS/NTFS
Para LBA leia-se "Partição que já foi considerada imensa em dias pretéritos" (Logical Block Addressing)

Linux:
Linux
Linux swap / Solaris
Estendida

3º Descobriu as partições e descobriu que o HD com Windows foi dividido em 2 partições, vamos montar pra saber quem é o:
HD1 Windows
hda1 Windows
hda5 Meus Documentos

HD2 Linux
hdc1 /
hdc2 /home
hdc3 swap
hdc5 /media/hdc5

HD3 Linux
hdd1 /
hdd2 /home
hdd3 swap
hdd5 /media/hdd5

São 2 do HD com Windows + 3 do HD com Ubuntu + 3 do HD com Fedora = 8. Para não ter que digitar 8 vezes o mesmo comando, vou usar o for:
for i in a1 a5 c1 c2 c5 d1 d2 d5 ; do mkdir /media/hd$i ; done
Leia-se "Pra cada valor de i (a1 a d5) vou fazer um /media/hda1 até /media/hdd5
Para montar, como são tipos de partição diferente, vou usar o read com o for, que lerá o que eu digitar:
for i in a1 a5 c1 c2 c5 d1 d2 d5 ; do echo "digite o sistema da partição hd$i" ; read s ; mount -t $s  /dev/hd$i /media/hd$i; done
Sistema pode ser ext3, ntfs, vfat (Linux, HPFS/NTFS, W95 FAT32, respectivamente, conforme o que se achou no 2º passo)

Depois de tudo montado, basta navegar nos diretórios e descobrir, pelo conteúdo quem é o que :)

Intervalo para os comerciais:
http://wiki.ubuntubrasil.org/GuiaDapper#head-b9ea717f965346b1ccd1519ca249d90819071e2b
http://wiki.ubuntubrasil.org/GuiaDapper#head-f2c4a72d5ba3058985cbf80cc278fa4d29f4ac15

4º Grub lê Unix!
O Grub lê os drivers nas IDEs como Unix e não como Linux, eles contam a partir de 0, quando o Linux conta a partir de um, daí podemos concluir:

Na Motherboard => Linux => Unix
Master da IDE 1 => hda > hd0
Slave da IDE 1 => hdb > hd1
Master da IDE 2 => hdc > hd2
Slave da IDE 2 => hdd > hd3

Linux => Unix
hda1 => hd0,0
hdb2 => hd1,1
hdc1 => hd2,0
hdd7 => hd3,6

Agora é hora de editar menu.lst do Grub, depois de ter vasculhado os /media/hdXY descobrimos que o que queremos está em /media/hdc1
Backup! cp /media/hdc1/boot/menu.lst /media/hdc1/boot/menu.lst.backup
Editando o /media/hdc1/boot/menu.lst
=============================
default=0
timeout=5
splashimage=(hd3,0)/boot/Grub/splash.xpm.gz
hiddenmenu

title Fedora Core (2.6.20-1.2952.fc6)
        root (hd3,0)
        kernel /boot/vmlinuz-2.6.20-1.2952.fc6 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.20-1.2952.fc6.img

title           Ubuntu, kernel 2.6.20-15-generic
root            (hd2,0)
kernel          /boot/vmlinuz-2.6.20-15-generic root=UUID=7efb0622-377a-4a47-9b2b-f870d6bc38a9 ro quiet splash
initrd          /boot/initrd.img-2.6.20-15-generic

title Windows XP
        rootnoverify (hd0,0)
        chainloader +1
=============================

5º O pulo do gato
Terminamos de fazer tudo o que tinha pra fazer dentro do Linux-genérico, agora precisamos entrar no sistema de onde editamos o menu do Grub:
chroot /media/hdc1
Agora que você está lá no sistema novo, siga a documentação do "intervalo comercial"
Grub-install /dev/hda
E reinicie o computador, mas, agora, com livre arbítrio

Obs.: Esse pode não ser o jeito mais fácil, talvez tenham CDs de busca e recuperação que automatizam todas as tarefas, mas essa é uma forma que acho que cabe para praticamente todas as distros que usam Grub.
Obs.: Para quem ainda usa lilo, o arquivo de edição está em /etc/lilo.conf e é muito intuitivo, para instalar o lilo na MBR digita-se lilo no terminal.

Espero que isso sirva para algo e/ou alguém ;)
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.

furadordesys

tá então como se daria boot por uma iso do ubuntu 7.04 numa partição fat32 num segundo hd  master da IDE2 (sendo que ja tenho o grub na MBR instalada na slave ide1"(hd0,1)")?

Mythus

Citação de: furadordesys online 27 de Junho de 2007, 10:27
tá então como se daria boot por uma iso do ubuntu 7.04 numa partição fat32 num segundo hd  master da IDE2 (sendo que ja tenho o grub na MBR instalada na slave ide1"(hd0,1)")?

Quando você dá boot por um CD, pouco importa quais as partições que estão no computador. O linux iniciará até mesmo se nem partição ou HD tiver. Quem define "Onde está a inicialização do computador?" é a BIOS, lá que você precisa apontar se quer que o boot se dê pelo CD, Master da IDE 2, Floppy, Network, etc. Lá também vai definir a ordem de boot (em caso de falha, procura o seguinte).
No seu caso a sua BIOS poderia estar configurada dessa forma:
1º CD
2º Master da IDE2
3º Qualquer outra coisa
4º Procurar por outros dispositivos? Sim

Não sei se é o seu caso, mas muita gente confunde MBR com Partição e são duas coisas bastante diferentes (discutimos sobre isso aqui: http://ubuntuforum-br.org/index.php/topic,21750.msg118370.html#msg118370 seria bom você ler) Você pode ter o lilo instalado na MBR de um HD, o GRUB num segundo HD, O Gerenciador de Boot do Windows NT num terceiro, etc. Quem "decide" qual desses será lido para dar partida no computador é a BIOS, independente da formatação do HD a partir do 2º cilindro (a MBR fica no 1º).

Se no caso você quer que a MBR seja lida a do segundo master, depois de todo o procedimento acima, o "dev" será /dev/hdc.

Espero que eu tenha entendido a sua pergunta e tirado sua dúvida.
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.

furadordesys

Desculpa amigo mas eu quero saber como dar boot pela iso no ubuntu?
Tipo pegar uma iso ter o gub aonde estiver pode ser no disquete e dar o boot nessa iso e entrar no ubuntu isso que eu quero fazer já procurei em alguns lugares e não encontrei respostas inclusive tentei algumas coisas mas não deu!!!

Mythus

Quando você diz ISO, você quer dizer aquele arquivo de imagem de CD? Pensei que estava se referindo a um CD mesmo.

O Grub, por si só, não tem capacidade de montar isos, você precisa do mount pra isso, que por sua vez precisa de um kernel e este fica dentro de uma distro. Então o que se pode fazer é dar boot por uma mini-distro/floppy-distro, quando entrar no sistema, partir para o "3º passo":
mount -t tipo_de_sistema /dev/hdXY /media/hdXY
mount -t iso9660 /media/hdXY/caminho/completo/da/iso.iso /media/cdrom -o loop
chroot /media/cdrom
Só tem um problema aqui: essa iso tem que ser já um sistema instalado com /home /bin /usr /etc no caso do Ubuntu isso não ocorre porque é durante o boot que essa estrutura é formada. Se você examinar o cd ou iso do Ubuntu não vai encontrar nenhum /bin/bash.
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.