Carregar duas instalações Grub2 em cadeia

14

Isso realmente está me deixando para baixo. Eu tenho o Gentoo e o Ubuntu, ambos com o Grub2. O Gentoo tem uma /bootpartição dedicada , enquanto o Ubuntu não. Eu tenho um menuentryno Gentoo /etc/grub.d/40_custompara inicializar o Ubuntu (e o Ubuntu inicializa bem).

Como o Ubuntu vem com o Grub, quero carregar em cadeia esse, em vez de manter minha entrada que define a raiz, o kernel, o initrd e outras coisas. Isto é o que eu tenho para o chainloader (o Ubuntu está ativado /dev/sda4e eu já instalei o Grub lá):

menuentry 'Chainloader' {
    insmod chain
    set root=(hd0,4)
    chainloader +1
}

Está me dando error: Invalid signaturee não encontrei nenhuma solução disponível. Alguém pode apontar alguma coisa?

Este é o resultado de </dev/sda4 head -c 512 | hd

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200

Este é o resultado de fdisk -l. /dev/sda1é /bootdo Gentoo, está no Gentoo, está no /dev/sda2Ubuntu /dev/sda4. Ubuntu está /bootestá em /dev/sda4também.

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe001152b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           9       72261   83  Linux
/dev/sda2              10       13064   104864287+  8e  Linux LVM
/dev/sda4   *       18152       19457    10490445   83  Linux

Não há erro com grub-install /dev/sda4 --no-floppy --force

/usr/sbin/grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR.  This is a BAD idea..
/usr/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported.
phunehehe
fonte
Claramente, você não instalou um gerenciador de inicialização /dev/sda4. Você tem mais de um disco? Qual é a sua tabela de partição? Por favor, publique a saída de fdisk -le as mensagens de grub-install /dev/sda4 --no-floppy --force.
Gilles 'SO- stop be evil'
sim, eu atualizei a pergunta #
phunehehe 17/10/10

Respostas:

4

Você pode carregar o GRUB2 em cadeia do GRUB2, tentei da maneira que você descreveu e funciona. No entanto, as informações que você forneceu fazem parecer que a imagem de inicialização não foi incorporada no MBR do disco (ou não seriam todos os zeros).

Eu tentaria isso, embora não esteja exatamente usando o GRUB2 do Ubuntu (apenas o arquivo de configuração). Você pode criar uma entrada de menu no arquivo de configuração do Gentoo GRUB2 que carrega o arquivo de configuração do Ubuntu. Existem duas maneiras de fazer isso.

O que eu usaria é o comando normal , que permite especificar um arquivo de configuração para carregar no modo normal. Se você seguir esse caminho, existe um comando chamado normal_exit que você pode adicionar como um item personalizado na sua configuração do Ubuntu que permitiria retornar à sua configuração do Gentoo.

A outra opção é o comando configfile , que permite especificar um arquivo de configuração alternativo para carregar. Parece que seria mais difícil "desistir" dessa opção.

Mais informações sobre esses comandos podem ser encontradas aqui .

silvein
fonte
3

A parte inicial do processo de inicialização consiste no carregamento do código do primeiro setor do disco rígido, o chamado Master Boot Record (MBR) . Normalmente, o Grub é gravado neste primeiro setor de disco rígido e não no primeiro setor da partição / inicialização. No entanto, você normalmente pode mudar isso durante a instalação do Linux, mas nas rotinas de instalação modernas, isso geralmente está oculto.

Você diz que possui o Grub instalado em / dev / sda4, mas sua configuração parece correta e a mensagem de erro que você postou sugere que o Grub pode não estar instalado corretamente na partição que você deseja carregar em cadeia. Você deve inicializar no Gentoo e depois chroot na partição Ubuntu. Certifique-se de que / boot agora aponte corretamente para o Ubuntu- / boot e não para o Gentoo! Agora instalar o GRUB 2 no primeiro setor do Ubuntu-partição / dev / sda4: grub-install /dev/sda4 --no-floppy.

Como sempre, ao mexer no MBR e nas partições, verifique se você possui um backup funcional e atualizado antes de iniciar.

fschmitt
fonte
faz diferença se eu inicializar no Ubuntu e executar o grub-install? porque é isso que eu fiz e ele não funciona :(
phunehehe
Eu pensei que você não pode inicializar no Ubuntu porque o carregamento em cadeia não funciona? Mas não, não deve fazer diferença se você inicializar no Ubuntu ou chroot nele.
Fschmitt 14/10/10
@phunehehe: A mensagem de erro significa que o Grub não encontrou uma assinatura do gerenciador de inicialização no primeiro setor de /dev/sda4(os últimos dois bytes devem ser 0x55 0xaa). Você poderia postar a saída de </dev/sda4 head -c 512 | hd?
Gilles 'SO- stop be evil'
@ Gilles: eu adicionei o resultado à pergunta. Não parece correto, não é?
phunehehe
na verdade, eu tenho que correr grub-install /dev/sda4 --no-floppy --force, caso contrário, haverá algumas queixas sobre blocklists
phunehehe
-1

O sda4 não será (hd0,3) no grub ou esse tipo de coisa mudou no grub2?

Neal
fonte
sim, eu tenho certeza que / dev / sda4 se tornará (hd0,4), porque isso é o que tenho vindo a utilizar para arrancar Ubuntu
phunehehe
3
Sim, o Grub 0.97 começou a contar discos rígidos e partições com 0. O Grub 2 ainda começa a contar discos com 0, mas começa a contar partições com 1. Então / dev / sda4 é hd0,3 no Grub 0.97 e hd0.4 no Grub 2.
fschmitt