GRUB confunde kernels / initramfs de la instalación de Ubuntu y Arch Linux

9

Tengo una máquina que solía iniciar dual Ubuntu (16.04 actualmente) y Windows 7, con GRUB de Ubuntu como gestor de arranque.

Ahora acabo de agregar Arch Linux como tercer sistema operativo, siguiendo las instrucciones oficiales de instalación. No instalé GRUB desde Arch porque quería usar el controlado por Ubuntu. Las instrucciones contenían un comando mkinitcpio -p linuxque probablemente generó algunos archivos de arranque que ejecuté como se describe.

Ahora, cuando intento arrancar Ubuntu desde GRUB a través de su entrada predeterminada, aparece este error desagradable (perdón por la foto de la pantalla):

mensaje de error

Como uname -amuestra la salida , está intentando arrancar el núcleo Arch, pero /dev/sda6es la partición raíz de Ubuntu.

Tengo que navegar Advanced options for Ubuntuy seleccionar una de las Ubuntu, with Linux 4.4.0-*entradas para poder cargar Ubuntu, aunque no pude encontrar una entrada que cargue correctamente Arch.

Ejecutar sudo update-grubdesde Ubuntu ( " update-grubes un código auxiliar para ejecutar grub-mkconfig -o /boot/grub/grub.cfgpara generar un archivo de configuración grub2" ) no cambia nada. La grub-customizerherramienta también fue inútil para solucionar esto hasta ahora.

¿Qué causa esta confusión de GRUB y cómo lo soluciono para que cada versión de Linux arranque con el núcleo correcto y desde la partición correcta?

Parece que instalé estúpidamente Arch con Ubuntu / boot montado, por lo que probablemente colocó sus archivos de arranque allí.

Estoy bien con borrar todo lo relacionado con Arch para volver a cargar el cargador de arranque de Ubuntu y hacer una instalación limpia de Arch más tarde.


Actualizaciones (gracias a @terdon por su apoyo en el chat Ask Ubuntu):

Aquí esta mi /boot/grub/grub.cfg.

Todas las entradas de Linux parecen apuntar a mi partición / dev / sda6, que es la raíz de 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

Intenté actualizar la configuración de GRUB desde 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

Intenté reinstalar GRUB en el MBR desde 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.

Esos son los paquetes de kernel de Ubuntu instalados por cierto, intenté con dpkg-reconfiguretodos ellos, pero sin ningún efecto sobre el 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

También intenté regenerar Ubuntu initramfs:

$ 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

Mi diseño de partición:

Comprobado desde el sistema Ubuntu. Las etiquetas deben explicarse por sí mismas.

$ 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]

Mi estructura de menú GRUB:

Página principal de GRUB

Opciones avanzadas para Ubuntu:
Opciones avanzadas de GRUB para Ubuntu

Opciones avanzadas para Arch:
Opciones avanzadas de GRUB para Arch


Mi /bootdirectorio:

$ 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

Los núcleos 4.4.0 y 4.2.0 deberían ser Ubuntu, Arch debería tener un kernel 4.5.0. Pero, ¿cómo puedo saber qué archivo sin la versión del kernel en su nombre pertenece a qué?


Mi directorio raíz de Ubuntu (directorios excluidos):

$ 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

El directorio raíz de My Arch no contiene ningún archivo o enlace.

Byte Commander
fuente
Tuve el mismo problema con el arranque triple de ubuntu, windows y arch linux. necesita reparar grub manualmente si es necesario, iniciar en arch linux y luego reconstruir grub desde allí, es posible que deba instalarlo os-prober. luego ejecuta estos sudo mkinitcpio -p linuxy sudo grub-mkconfig -o /boot/grub/grub.cfgfinalmentesudo grub-install /dev/sda
Edward Torvalds
Cuando estaba instalando varias distribuciones de Linux en mi computadora portátil (mientras reemplazaba una anterior, manteniendo intactas las ventanas) tuve un problema similar. Lo que hice fue simplemente eliminar la carpeta respectiva del sistema operativo anterior de efi y hacer una actualización grub. Pero en mi caso, 1. Era el sistema UEFI 2. No mantuve múltiples sistemas operativos Linux.
Usuario registrado
Durante el arranque, ¿puede modificar dinámicamente el kernel y el initrd para arrancar en Ubuntu? Si lo ha hecho, ¿cuál es el error?
SHW
La pantalla informados contiene el mensaje de error: Root device mounted successfully, but /sbin/init does not exists. ¿Investigaste esto? ¿ initRealmente falta? Si es así, definitivamente debe instalarlo, si en cambio está presente, ¿alguna idea de por qué no se puede encontrar?
MariusMatutiae

Respuestas:

5

Finalmente lo resolví atacando la partición Arch y sus archivos de arranque en el /bootdirectorio de mi Ubuntu desde la órbita. Ubuntu está bien nuevamente ahora, todas las entradas restantes de GRUB están funcionando nuevamente.

Aquí hay una lista de lo que hice:

  • Eliminar los initramfsarchivos de Arch :

    sudo rm /boot/initramfs-linux*
    
  • Eliminar el vmlinuzarchivo de Arch :

    sudo rm vmlinuz-linux
    
  • Formatee la partición Arch ( /dev/sda8) usando GParted

  • Actualice la configuración de GRUB:

    sudo update-grub
    
  • Reiniciar y disfrutar!

Byte Commander
fuente
Creo que la primera línea codificada initramfs-linuxno debe contener...ranfs...
Anwar
1
@Anwar Por supuesto, gracias por prestar atención. Arreglé el error tipográfico.
Byte Commander
1

Fijación manual de grub.cfg (no recomendado)

Mirando tu grub.cfg

la entrada de Ubuntu está rota (y algunas de las siguientes también)

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
}

Las dos últimas líneas son su comando emitido por grub para cargar kernel e initrd, y actualmente están buscando el kernel ARCH y initiramfs. Además, los busca en la /partición in identificada por la uuid=eee18451-b607-4875-8a88-c9cb6c6544c8cual podrían o no alojar los archivos de Ubuntu previstos.

Puedes arreglar esto de la siguiente manera:

sudo blkid

para obtener el uuid de su partición raíz de ubuntu.

Luego reemplace las dos últimas líneas con el enlace simbólico a sus últimas imágenes de kernel e initrd (ya que esta es la forma en que ubuntu espera que sea)

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

Si esto no lo soluciona de inmediato, es posible que se requiera alguna otra corrección. Puede encontrarlos "copiando" una de las entradas probadas y en funcionamiento, y le recomiendo que use la más vainilla (p. Ej., Ningún parámetro advenedizo u otro parámetro del núcleo, como el nomodeset que se pasa).

Este debería ser un buen 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'

La entrada Arch está igualmente rota, ya que probablemente busca Arch initramfs y el núcleo en la partición raíz de Ubuntu. La ubicación predeterminada de esos es bajo / boot. Ajuste las dos líneas finales de la entrada de Arch corrigiendo la ubicación y verificando que la partición raíz uuid sea la que contenga la raíz de Arch.

Una (varias) palabra (s) de advertencia:

En general, NO se recomienda que los usuarios de Ubuntu jueguen a grub.cfgmano. Definitivamente haga una copia y tenga cuidado en su edición. Esté preparado para la posibilidad de que su sistema no se pueda iniciar (pero podrá resucitarlo utilizando el procedimiento de inicio descrito en mi respuesta anterior).

Además, si bien esto podría solucionar su problema esta vez, podría volver a morderle la próxima vez que tenga que repoblar su menú de grub. Por alguna razón, el sondeo del sistema operativo de grub bajo ubuntu se confunde con la presencia del kernel de Arch bajo / boot. Supongo que una utilidad como la reparación de arranque debería poder hacer que todas sus distribuciones sean de arranque correctamente, pero si no recuerdo mal, no funcionó para usted.

Una solución permanente podría consistir en instalar el núcleo del archivo y las imágenes en un directorio diferente al predeterminado / boot. Esto es complicado y debe consultar la entrada de grub de Arch wiki sobre cómo hacerlo correctamente.

ANTIGUA RESPUESTA (recomendada si planea cambiar a Arch a largo plazo) Esto es lo que haría, y de alguna manera lo he hecho hace unos meses.

Vaya a la página de grub wiki del arco y lea la sección correspondiente para su tabla de particiones (es probable que sea UEFI, así que lea sobre ESP y así sucesivamente).

Arrancar en Arch manualmente

Esta es una experiencia altamente formativa que recomiendo probar. Suponiendo que su núcleo Arch Linux se encuentra en algún lugar de su disco, presione cen el indicador de grub y escriba ls para ver una lista de dispositivos y particiones que se vean como (hd0,msdos1),(hd1,gpt1),.... Puede ver cada uno de ellos para ver el contenido.

Necesitas descubrir tres cosas:

  • ¿Dónde está tu /partición raíz de Arch?
  • ¿Dónde está tu kernel Arch? vmlinuz
  • Donde esta tu arco intiramfs-linux.img

una vez que posea estos tres, ejecutará tres comandos en grub> prompt, algo similar a esto.

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

Tenga en cuenta que grub puede encontrar, por ejemplo

grub> find /sbin/init

(el grub no puede encontrar automáticamente y darle un pánico al núcleo;))

Todo esto lo he aprendido aquí , una fuente que recomiendo encarecidamente. Si puedes hacerlo, ¡salta a arreglar grub! De otra manera...

Arranque Arch desde una clave en vivo! Obtenga un entorno de Arch en vivo y siga la wiki de instalación chrooten Arch de la misma manera que lo hizo la primera vez.

Gusano de fijación

Desde el interior de Arch, instale los paquetes de grub relevantes, y en particular os-proberpara permitir grub-installdetectar su otro sistema. Siga cuidadosamente la guía de instalación allí y debería poder (al menos) arrancar tanto arch como ubuntu desde el menú de grub. La instalación de comandos terminará luciendo así.

** Advertencia ** No ejecute estos comandos, son ejemplos, necesita resolver los apropiados para su sistema

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

** Si todo lo demás falla **

Desafortunadamente, esto es tan específico como se obtiene dada la cantidad limitada de información y SE no es realmente un foro para tales problemas, por lo tanto, mi respuesta "genérica" ​​se refiere a recursos útiles.

Si no puede resolverlo, tal vez pase por los foros de Arch, y siempre que haya hecho todo lo posible y haya leído los documentos de antemano, puede encontrar ayuda.

Hacer todo esto a través de Arch ha sido una experiencia de aprendizaje fundamental para mí.

Tres diag
fuente
1
Gracias por su respuesta. Primero, es un sistema BIOS con disco particionado MBR. Segundo, quiero usar el paquete grub y la configuración de Ubuntu, reinstalar GRUB desde Arch no es lo que planeo. También dudo que esto haga algún cambio ... Y puedo arrancar en Ubuntu a través de la entrada GRUB en algún lugar de las Opciones avanzadas. El problema es que GRUB de alguna manera parece no poder determinar qué kernel o ramdisk inicial o lo que sea que pertenezca a qué sistema en qué partición.
Byte Commander
Básicamente, se aplican los mismos pasos. grub-install y grub-mkconfig (que lo convierte en un nuevo archivo grub.cfg) son comandos grub que también están disponibles en ubuntu. Compruebe si os-prober también está disponible o algo similar (esto permite que mkconfig encuentre otros sistemas de archivos). Esto lo arregla asumiendo que las imágenes del kernel están en el lugar correcto, releyendo su publicación. No estoy muy seguro de que sea así. Inspeccione su partición / boot para asegurarse de que todos los núcleos y .img estén allí. Es posible que haya sobrescrito su linux initrd.img con initramfs de arch. Accede a los foros de ubuntu o askubuntu.
Three Diag
Mientras escribía, ejecuté el grub-mkconfig en vano, pero comprobaré las imágenes disponibles en / boot cuando vuelva a casa. Y hay algunos scripts de os-prober.
Byte Commander
Lo siento, me perdí eso. Entonces probablemente haya sobrescrito su kernel de ubuntu e initrd con los de arch. Puede colocarlos en su lugar ejecutando su secuencia de actualización / actualización desde el kernel alternativo de ubuntu (creo)
Three Diag
Los núcleos de Ubuntu deberían estar bien, ya que puedo arrancarlos todos desde el menú "Opciones avanzadas para Ubuntu". Si algo está mal allí, podría ser solo el enlace simbólico al kernel predeterminado ... Voy a verificar eso esta noche.
Byte Commander
0

Mi solución es más simple. Yo uso el terminal y hago lo siguiente:

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

Si tiene más problemas, simplemente use boot-repair, que es una descarga gratuita, lo suficientemente pequeña como para grabar en un disco CD.

BAD-Boop
fuente
El OP ya se ha ejecutado update-grub. La reparación de arranque es muy poco probable que ayude con este problema en particular.
terdon
grub y algunos procesos de reparación o actualización de arranque asumen que lo que está en /boot/grub/grub.cfg es actual y correcto. Pero haga cambios, como un formateo de partición, obtendrá un nuevo UUID, que lo pone en grub-rescue> Para lidiar con esto, solo haga esto: sudo rm /boot/grub/grub.cfg; sudo update-grub. Todas las entradas en grub.cfg serán nuevas y actuales.
BAD-Boop
Sí, pero nuevamente, el OP ya ha hecho esto y no ayudó. Me doy cuenta de que la pregunta es grande y es fácil pasarla por alto, pero sudo grub-mkconfig -o /boot/grub/grub.cfgestá ahí. update-grubes un script de shell muy simple que se ejecuta grub-mkconfig -o /boot/grub/grub.cfg . Puedes ver esto con cat /usr/sbin/update-grub.
terdon