Eu tenho uma máquina que costumava inicializar o Ubuntu duas vezes (16.04 atualmente) e o Windows 7, com o GRUB do Ubuntu como carregador de inicialização.
Agora acabei de adicionar o Arch Linux como terceiro sistema operacional, seguindo as instruções oficiais de instalação. Não instalei o GRUB a partir 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 executei conforme descrito.
Agora, quando tento inicializar o Ubuntu a partir do GRUB por meio da entrada padrão, recebo este erro desagradável (desculpe pela foto da tela):
Como resultado do uname -a
show, ele está tentando inicializar o kernel do Arch, mas /dev/sda6
é a partição raiz do Ubuntu.
Eu tenho que navegar Advanced options for Ubuntu
e selecionar uma das Ubuntu, with Linux 4.4.0-*
entradas para poder carregar o Ubuntu, mas não consegui encontrar uma entrada que carregasse corretamente o Arch.
A execução sudo update-grub
no Ubuntu ( " update-grub
é um esboço para a execução grub-mkconfig -o /boot/grub/grub.cfg
de um arquivo de configuração do grub2." ) Não muda nada. A grub-customizer
ferramenta também foi inútil para corrigir 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 a partição correta?
Parece que eu estupidamente instalei o Arch com o Ubuntu / boot montado, então provavelmente colocou seus arquivos de inicialização lá.
Eu estou bem em apagar todas as coisas relacionadas ao Arch para obter o gerenciador de inicialização do Ubuntu novamente e fazer uma instalação limpa do Arch mais tarde.
Atualizações (obrigado a @terdon por seu apoio no chat Ask Ubuntu):
Aqui está o meu /boot/grub/grub.cfg
.
Todas as entradas do Linux parecem apontar para 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
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.
A propósito, esses são os pacotes de kernel do Ubuntu instalados, tentei dpkg-reconfigure
todos eles, mas sem qualquer 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ção:
Verificado a partir do 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 menus do GRUB:
Opções avançadas para o Ubuntu:
Meu /boot
diretório:
$ 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 o 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 nenhum arquivo ou link.
os-prober
. em seguida, executar estessudo mkinitcpio -p linux
, em seguida,sudo grub-mkconfig -o /boot/grub/grub.cfg
por últimosudo grub-install /dev/sda
Root device mounted successfully, but /sbin/init does not exists
. Você investigou isso? Estáinit
realmente faltando? Em caso afirmativo, você deve instalá-lo definitivamente, se estiver presente, alguma idéia de por que não foi encontrado?Respostas:
Eu finalmente resolvi colocando a partição Arch e seus arquivos de inicialização no
/boot
diretório do meu Ubuntu a partir da órbita. O Ubuntu está bom novamente agora, todas as entradas restantes do GRUB estão funcionando novamente.Aqui está uma lista do que eu fiz:
Exclua os
initramfs
arquivos do Arch :Exclua o
vmlinuz
arquivo do Arch :Formate a partição do Arch (
/dev/sda8
) usando GPartedAtualize a configuração do GRUB:
Reinicie e divirta-se!
fonte
initramfs-linux
não...ranfs...
Reparando 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)
As duas últimas linhas são seu comando emitido pelo grub para carregar o kernel e o initrd, e atualmente estão procurando o kernel ARCH e o initiramfs. Além disso, ele os procura
/
na partição in identificada pelauuid=eee18451-b607-4875-8a88-c9cb6c6544c8
qual pode ou não hospedar os arquivos Ubuntu desejados.Você pode corrigir isso:
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 (já que é assim que o ubuntu espera que seja)
Se isso não for corrigido imediatamente, alguma outra correção poderá ser necessária. Você pode descobri-los "copiando" uma das entradas testadas e funcionando, e eu recomendo que você use a mais baunilha (por exemplo, nenhum parâmetro inicial ou outro parâmetro do kernel, como o conjunto de nós que está sendo aprovado).
Este deve ser um bom candidato:
A entrada do Arch também é quebrada, pois provavelmente procura o initramfs e o kernel do Arch na partição raiz do Ubuntu. O local padrão desses está em / boot. Ajuste as duas linhas finais da entrada do Arch, corrigindo o local e verificando se o uuid da partição raiz é o que contém a raiz do Arch.
Uma (várias) palavra (s) de advertência:
Em geral, NÃO é recomendado que os usuários do Ubuntu mexam com a
grub.cfg
mão. Definitivamente faça uma cópia e seja cuidadoso em sua edição. Esteja preparado para a chance de seu sistema não ser inicializado (mas você poderá ressuscitá-lo usando o procedimento de inicialização descrito na minha antiga resposta).Além disso, embora isso possa resolver seu problema desta vez, ele pode voltar a mordê-lo na próxima vez em que você precisar preencher novamente o menu do grub. Por alguma razão, a investigação do grub no ubuntu fica confusa com a presença do kernel do Arch em / boot. Eu acho que um utilitário como o reparo de inicialização deve poder tornar 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 grub do Arch wiki sobre como fazê-lo corretamente.
RESPOSTA ANTIGA (recomendado se você planeja mudar para o Arch a longo prazo) Aqui está o que eu faria e, de alguma forma, fiz alguns meses atrás.
Vá para a página do wiki do arch wiki e leia a seção relevante para sua tabela de partições (você provavelmente é UEFI, leia sobre ESP e assim por diante).
Inicializando no Arch manualmente
Esta é uma experiência altamente formativa que recomendo tentar. Supondo que seu kernel do Arch Linux esteja localizado em algum lugar do seu disco, pressione
c
no prompt do grub e digite ls para ver uma lista de dispositivos e partições parecidos(hd0,msdos1),(hd1,gpt1),...
. Você pode ls cada um deles para ver o conteúdo.Você precisa descobrir três coisas:
/
partição raiz do Archvmlinuz
intiramfs-linux.img
depois de possuir esses três, você executará três comandos no grub> prompt, algo semelhante a este.
Observe que o grub pode encontrar, por exemplo
(o grub não pode ser encontrado automaticamente e causando pânico no kernel;))
Tudo isso eu aprendi aqui , uma fonte que eu recomendo. Se você pode gerenciar, pule para corrigir o grub! De outra forma...
Arco de inicialização a partir de uma chave ativa! Obtenha um ambiente ao vivo do Arch e siga o wiki de instalação
chroot
no Arch da mesma maneira que você fez na primeira vez.Grub de fixação
De dentro do Arch, instale os pacotes grub relevantes e, em particular,
os-prober
para permitirgrub-install
detectar seu outro sistema. Siga cuidadosamente o guia de instalação e você poderá (pelo menos) inicializar o arch e o ubuntu no menu grub. A instalação de comandos terminará assim.** Aviso ** Não execute estes comandos, eles são uma exemplificação, você precisa descobrir os adequados ao seu sistema
** Se todo o resto falhar **
Infelizmente, isso é tão específico quanto é dado o número limitado de informações e o SE não é realmente um fórum para esses problemas, portanto, minha resposta "genérica" se refere a recursos úteis.
Se você não conseguir descobrir, talvez visite os fóruns do Arch e, desde que você tenha tentado o melhor e lido os documentos com antecedência, poderá encontrar ajuda.
Fazer tudo isso através do Arch foi uma experiência de aprendizado fundamental para mim.
fonte
Minha solução é mais simples. Eu uso o terminal e faço o seguinte:
Se você tiver mais problemas, basta usar
boot-repair
, que é um download gratuito, pequeno o suficiente para gravar em um disco de CD.fonte
update-grub
. É muito improvável que o reparo de inicialização ajude com esse problema específico.sudo grub-mkconfig -o /boot/grub/grub.cfg
está aí.update-grub
é um shell script muito simples que é executadogrub-mkconfig -o /boot/grub/grub.cfg
. Você pode ver isso comcat /usr/sbin/update-grub
.