O GRUB confunde kernels / initramfs da instalação do Ubuntu e Arch Linux

9

Eu tenho uma máquina que usava o dual-boot Ubuntu (16.04 atualmente) e o Windows 7, com o GRUB do Ubuntu como carregador de boot.

Agora adicionei o Arch Linux como terceiro SO, seguindo as instruções oficiais de instalação. Eu não instalei o GRUB do Arch porque queria usar o controlado pelo Ubuntu. As instruções continham um comando mkinitcpio -p linux que provavelmente gerou alguns arquivos de inicialização que eu executei conforme descrito.

Agora, quando tento inicializar o Ubuntu do GRUB por meio de sua entrada padrão, recebo esse erro desagradável (desculpe a foto da tela):

Comomostraasaídadeuname-a,eleestátentandoinicializarokerneldoArch,mas/dev/sda6éapartiçãoraizdoUbuntu.

EutenhoquenavegarparaAdvancedoptionsforUbuntueselecionarumadasentradasUbuntu,withLinux4.4.0-*parapodercarregaroUbuntu,nãoconseguiencontrarumaentradaquecarregassecorretamenteoArch.

Executandosudoupdate-grubdoUbuntu(" update-grub é um stub para executar grub-mkconfig -o /boot/grub/grub.cfg para gerar um arquivo de configuração do grub2." ) não muda nada. A ferramenta grub-customizer também foi inútil em consertar isso até agora.

O que causa essa confusão do GRUB e como corrigi-lo para que cada versão do Linux seja inicializada com o kernel correto e com a partição correta?

Parece que eu estupidamente instalei o Arch com o Ubuntu / boot montado, então ele provavelmente colocou seus arquivos de inicialização lá.

Eu estou bem em apagar todas as coisas relacionadas ao Arch para fazer o gerenciador de inicialização do Ubuntu voltar a funcionar e fazer uma instalação limpa do Arch depois.

Atualizações (graças ao @terdon por seu apoio no chat Ask Ubuntu):

Aqui está o meu /boot/grub/grub.cfg .

Todas as entradas do Linux parecem apontar para a minha partição / dev / sda6, que é a raiz do Ubuntu:

$ grep ' linux /' /boot/grub/grub.cfg
    linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset

Eu tentei atualizar a configuração do GRUB no Ubuntu:

$ sudo grub-mkconfig -o /boot/grub/grub.cfg 
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done

Eu tentei reinstalar o GRUB no MBR do Ubuntu:

$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

Esses são os pacotes de kernel do Ubuntu instalados, mas eu tentei dpkg-reconfigure de todos eles, mas sem nenhum efeito sobre o problema:

$ dpkg -l linux-image* | grep ^ii
ii  linux-image-4.2.0-35-generic       4.2.0-35.40  amd64        Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-21-generic       4.4.0-21.37  amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.2.0-35-generic 4.2.0-35.40  amd64        Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-21-generic 4.4.0-21.37  amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

Eu também tentei regenerar o initramfs do Ubuntu:

$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic

Meu layout de partições:

Verificado no sistema Ubuntu. Os rótulos devem se explicar.

$ lsblk -f /dev/sda
NAME    FSTYPE LABEL       UUID                                 MOUNTPOINT
sda                                                             
├─sda1  ntfs   win7-boot   90DCF3A5DCF3842E                     /win/boot
├─sda2  ntfs   windows7    482C7A572C7A3FCC                     /win/c
├─sda3  ext4   grub-boot   6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5  ext4   images      81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6  ext4   ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7  ext4   ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8  ext4   arch-root   8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec 
├─sda9  ext4   arch-home   32522902-a53d-44c8-90f2-6bbf14c40f1f 
└─sda10 swap   linux-swap  8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]

Minha estrutura de menu do GRUB:

OpçõesavançadasparaoUbuntu:

Opções avançadas para Arch:

Meu diretório /boot :

$ ls -la /boot
total 118480
drwxr-xr-x  4 root root     4096 Apr 24 20:50 .
drwxr-xr-x 28 root root     4096 Apr 24 19:44 ..
-rw-r--r--  1 root root  1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r--  1 root root  1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r--  1 root root   184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r--  1 root root   189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x  6 root root     4096 Apr 26 19:58 grub
-rw-r--r--  1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r--  1 root root  3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r--  1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r--  1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------  2 root root    16384 Okt 28 17:43 lost+found
-rw-r--r--  1 root root   182704 Jan 28 13:44 memtest86+.bin
-rw-r--r--  1 root root   184380 Jan 28 13:44 memtest86+.elf
-rw-r--r--  1 root root   184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw-------  1 root root  3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw-------  1 root root  3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw-------  1 root root  6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw-------  1 root root  7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r--  1 root root  4435552 Apr 14 19:20 vmlinuz-linux

Os kernels 4.4.0 e 4.2.0 devem ser Ubuntu, o Arch deve ter um kernel 4.5.0. Mas como descobrir qual arquivo sem a versão do kernel em seu nome pertence a quê?

Meu diretório raiz do Ubuntu (diretórios excluídos):

$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx   1 root      root         32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx   1 root      root         32 Apr  5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx   1 root      root         29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx   1 root      root         29 Apr  5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic

Meu diretório raiz do Arch não contém arquivos ou links.

    
por Byte Commander 26.04.2016 / 21:11

3 respostas

5

Eu finalmente resolvi isso nublando a partição do Arch e seus arquivos de inicialização no diretório /boot do meu Ubuntu a partir da órbita. O Ubuntu está bem novamente agora, todas as entradas restantes do GRUB estão funcionando novamente.

Aqui está uma lista do que eu fiz:

  • Exclua os arquivos initramfs do Arch:

    sudo rm /boot/initramfs-linux*
    
  • Exclua o arquivo vmlinuz do Arch:

    sudo rm vmlinuz-linux
    
  • Formate a partição do Arch ( /dev/sda8 ) usando o GParted

  • Atualize a configuração do GRUB:

    sudo update-grub
    
  • Reinicie e divirta-se!

por 06.05.2016 / 14:55
1

Corrigindo o grub.cfg manualmente (não recomendado)

Olhando para o seu grub.cfg

a entrada do Ubuntu está quebrada (e algumas das seguintes também)

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-eee18451-b607-4875-8a88-c9cb6c6544c8' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos3'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    else
      search --no-floppy --fs-uuid --set=root 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    fi
    linux   /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro  
    initrd  /initramfs-linux.img
}

As últimas duas linhas são o comando do grub para carregar o kernel e initrd, e atualmente estão procurando pelo kernel ARCH e initiramfs. Além disso, ele os procura sob a partição / in identificada por uuid=eee18451-b607-4875-8a88-c9cb6c6544c8 , que pode ou não hospedar os arquivos desejados do Ubuntu.

Você pode corrigir isso por:

sudo blkid

para obter o uuid da sua partição raiz do Ubuntu.

Em seguida, substitua as duas últimas linhas pelo simlink para as imagens mais recentes do kernel e do initrd (pois é assim que o Ubuntu espera que seja)

linux   /vmlinuz root=UUID=<correct-uuid-ubuntu-partition> ro  
initrd  /initrd.img

Se isso não corrigir imediatamente, outra correção poderá ser necessária. Você pode encontrá-los "copiando" uma das entradas testadas e de trabalho, e eu recomendo que você use a mais baunilha (por exemplo, nenhum parâmetro de kernel iniciante ou outro, como o nomodeset sendo passado).

Este deve ser um bom candidato:

menuentry 'Ubuntu, with Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-eee18451-b607-4875-8a88-c9cb6c6544c8'

A entrada do Arch está similarmente quebrada, pois provavelmente procura Arch initramfs e kernel sob a partição raiz do Ubuntu. A localização padrão deles está em / boot. Ajuste as duas linhas finais da entrada Arch, corrigindo a localização e verificando se o uuid da partição raiz é o que contém a raiz do Arch.

Uma (várias) palavra (s) de aviso:

Geralmente, NÃO é recomendado aos usuários do Ubuntu mexerem com grub.cfg manualmente. Definitivamente faça uma cópia e tenha cuidado na sua edição. Esteja preparado para a chance de que seu sistema se torne não inicializável (mas você poderá ressuscitá-lo usando o procedimento de inicialização descrito na minha resposta antiga).

Além disso, embora isso possa resolver seu problema desta vez, ele pode voltar a te morder na próxima vez que você tiver que preencher novamente o menu do grub. Por alguma razão, o sistema operacional do grub sob o Ubuntu fica confuso pela presença do kernel do Arch em / boot. Eu diria que um utilitário como o boot-repair deve ser capaz de fazer corretamente todas as suas distros inicializáveis, mas se bem me lembro, não funcionou para você.

Uma correção permanente pode consistir na instalação do kernel do arco e das imagens em um diretório diferente do padrão / boot. Isso é complicado e você deve consultar a entrada do grub do wiki do Arch sobre como fazê-lo corretamente.

OLD ANSWER (recomendado se você planeja mudar para o Arch a longo prazo) Aqui está o que eu faria, e de alguma forma já faz alguns meses.

Vá para a página wiki grub do arco e leia a seção relevante para a sua tabela de partições (você é provável UEFI, então leia sobre ESP e assim por diante).

Iniciar manualmente no Arch

Esta é uma experiência altamente formativa que recomendo tentar. Supondo que seu kernel do Arch Linux esteja localizado em algum lugar no seu disco, pressione c no prompt grub e digite ls para ver uma lista de dispositivos e partições parecendo (hd0,msdos1),(hd1,gpt1),... . Você pode ls cada um deles para ver o conteúdo.

Você precisa descobrir três coisas:

  • Onde está sua partição raiz do Arch /
  • Onde está o seu kernel do Arch vmlinuz
  • Onde está o seu Arch intiramfs-linux.img

uma vez possuindo esses três, você executará três comandos no grub > pedir algo semelhante a isso.

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /intiramfs-linux.img
grub> boot

Observe que o grub pode encontrar, por exemplo,

grub> find /sbin/init

(o que o grub não consegue encontrar automaticamente e dá um pânico ao kernel;))

Tudo isso eu aprendi aqui , uma fonte que eu recomendo. Se você conseguir, pule para consertar o grub! Caso contrário ...

Boot Arch a partir de uma chave ativa! Obtenha um ambiente do Arch ao vivo e siga o wiki de instalação chroot no Arch da mesma maneira que você fez na primeira vez.

Corrigir o grub

Do interior do Arch, instale os pacotes do grub relevantes e, em particular, os-prober para permitir que grub-install detecte seu outro sistema. Siga atentamente o guia de instalação e você poderá (pelo menos) inicializar o arch e o ubuntu no menu do grub. Instalar comandos acabará ficando assim.

** Atenção ** Não execute estes comandos, eles são exemplos, você precisa descobrir os que são apropriados para o seu sistema

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg

** Se tudo mais falhar **

Infelizmente, isso é tão específico quanto possível, dado o número limitado de informações, e o SE não é realmente um fórum para essas questões, por isso minha resposta "genérica" se refere a recursos úteis.

Se você não conseguir descobrir, talvez vá até os fóruns do Arch e, desde que tenha feito o melhor possível e lido os documentos antes, você pode encontrar ajuda.

Fazer tudo isso através do Arch foi uma experiência fundamental de aprendizado para mim.

    
por 27.04.2016 / 01:32
0

Minha solução é mais simples. Eu uso o terminal e faço o seguinte:

sudo rm /boot/grub/grub.cfg
sudo update-grub

Se você tiver mais problemas, use apenas boot-repair , que é um download gratuito, pequeno o suficiente para gravar em um disco de CD.

    
por 02.05.2016 / 03:43