¿Por qué mi partición grub independiente del sistema operativo puede iniciarse correctamente en Ubuntu usando una versión anterior del kernel pero no con una más nueva?

¿Por qué mi partición grub independiente del sistema operativo puede iniciarse correctamente en Ubuntu usando una versión anterior del kernel pero no con una más nueva?

Tengo un único disco duro con la siguiente configuración de partición: ingrese la descripción de la imagen aquí

  • sda1 y 2 son particiones de Windows
  • sda4 es una partición extendida que contiene las particiones lógicas sda5 y 6
  • sda5 es la partición de intercambio para ubuntu
  • sda6 es la partición raíz de ubuntu (versión 20.04)
  • sda3 es una partición que contiene solo archivos grub, la computadora arranca desde aquí y luego carga en cadena los cargadores de arranque de Windows o Ubuntu dependiendo de lo que esté seleccionado en el menú de grub.

Básicamente, he estado intentando personalizar mi menú de grub usando Grub Customizer, una interfaz gráfica de usuario para editar los archivos de configuración de grub y generar grub.cfg. Aunque lo personalizamos exitosamente con una duración de tiempo de espera diferente y una imagen de fondo, después de elegir iniciar Ubuntu, finalmente se bloquea y muestra el siguiente registro "[OK]" (no sé cómo llamarlo): ingrese la descripción de la imagen aquí

Tenga en cuenta que todavía puedo iniciar sesión en este punto sin interfaz gráfica de usuario usando Ctrl+Alt+F2.

Utilicé el comando diff para confirmar que Grub Customizer genera el mismo grub.cfg que el comando grub-mkconfig (casi equivalente a update-grub segúnesta discusión), por lo que el problema se aisló en la propia configuración de grub. Después de usar kdiff3 y experimentar extensamente, descubrí que si modificaba manualmente la entrada del menú de ubuntu en grub.cfg (la que está en la partición grub, por supuesto) de la siguiente manera, el problema desaparecería manteniendo las personalizaciones deseadas:

arranque defectuoso:

### BEGIN /etc/grub.d/10_linux_proxy ###

function gfxmode {
    set gfxpayload="${1}"
    if [ "${1}" = "keep" ]; then
        set vt_handoff=vt.handoff=7
    else
        set vt_handoff=
    fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode



menuentry "Ubuntu" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c1cf0131-85a4-4147-b74c-38df34cd47cc' {
    recordfail
    savedefault
    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,msdos6'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos6 --hint-efi=hd0,msdos6 --hint-baremetal=ahci0,msdos6 --hint='hd0,msdos6'  c1cf0131-85a4-4147-b74c-38df34cd47cc
    else
      search --no-floppy --fs-uuid --set=root c1cf0131-85a4-4147-b74c-38df34cd47cc
    fi
    linux   /boot/vmlinuz-5.4.0-45-generic root=UUID=c1cf0131-85a4-4147-b74c-38df34cd47cc ro acpi_sleep=nonvs quiet splash $vt_handoff
    initrd  /boot/initrd.img-5.4.0-45-generic
}
### END /etc/grub.d/10_linux_proxy ###

bota de trabajo:

...
    linux   /boot/vmlinuz-5.4.0-42-generic root=UUID=c1cf0131-85a4-4147-b74c-38df34cd47cc ro acpi_sleep=nonvs quiet splash $vt_handoff
    initrd  /boot/initrd.img-5.4.0-42-generic
}
### END /etc/grub.d/10_linux_proxy ###

(Simplemente cambié vmlinuz-5.4.0-45-generic e initrd.img-5.4.0-45-generic a vmlinuz-5.4.0-42-generic e initrd.img-5.4.0-42-generic respectivamente)

Me gustaría:

  1. Sepa cómo usar las imágenes 5.4.0-42 en lugar de las 5.4.0-45 hace alguna diferencia.
  2. Encuentre las opciones de configuración de grub correctas que funcionan con los "45", para no tener que editar grub.cfg manualmente cada vez que quiera personalizarlo.

ACTUALIZACIÓN 11:31 UTC+2, 9/9/20: Hace apenas una hora descargué el nuevo kernel de Linux (5.4.0-47) e intenté usarlo para arrancar, pero apareció el mismo problema que 5.4.0-45. Así que edité grub.cfg a 5.4.0-42. Ahora tengo 3 kernels diferentes disponibles para usar: 5.4.0-{42,45,47}. Sólo una idea, pero teniendo en cuenta que el escritorio gnome parece iniciarse correctamente según el registro de arranque "[OK]" (aún no sé cuál es su nombre), ¿no es ese el principal sospechoso? Eso y el demonio de nvidia fallando más cerca de la parte superior del registro.

ACTUALIZACIÓN 13:14 UTC+2 9/9/20: Aquí está el resultado sudo systemctl status nvdia-persistenced.servicedespués de un arranque fallido de la GUI:

● nvidia-persistenced.service - NVIDIA Persistence Daemon
     Loaded: loaded (/lib/systemd/system/nvidia-persistenced.service; static; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2020-09-09 11:54:44 EEST; 1min 43s ago
    Process: 876 ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced --no-persistence-mode --verbose (code=exited, status=1/FAILURE)
    Process: 896 ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced (code=exited, status=0/SUCCESS)

Σεπ 09 11:54:43 george-Aspire-E5-571G nvidia-persistenced[882]: Failed to query NVIDIA devices. Please ensure that the NVIDIA device files (/dev/nvidia*) exist, and that user 126 has read and write permissions for those files.
Σεπ 09 11:54:43 george-Aspire-E5-571G nvidia-persistenced[882]: PID file unlocked.
Σεπ 09 11:54:43 george-Aspire-E5-571G nvidia-persistenced[882]: PID file closed.
Σεπ 09 11:54:43 george-Aspire-E5-571G nvidia-persistenced[882]: The daemon no longer has permission to remove its runtime data directory /var/run/nvidia-persistenced
Σεπ 09 11:54:43 george-Aspire-E5-571G nvidia-persistenced[876]: nvidia-persistenced failed to initialize. Check syslog for more details.
Σεπ 09 11:54:43 george-Aspire-E5-571G nvidia-persistenced[882]: Shutdown (882)
Σεπ 09 11:54:42 george-Aspire-E5-571G systemd[1]: Starting NVIDIA Persistence Daemon...
Σεπ 09 11:54:43 george-Aspire-E5-571G systemd[1]: nvidia-persistenced.service: Control process exited, code=exited, status=1/FAILURE
Σεπ 09 11:54:44 george-Aspire-E5-571G systemd[1]: nvidia-persistenced.service: Failed with result 'exit-code'.
Σεπ 09 11:54:44 george-Aspire-E5-571G systemd[1]: Failed to start NVIDIA Persistence Daemon.

Respuesta1

Resulta que estaba ejecutando una versión anterior del controlador nvidia que no era compatible con los kernels más nuevos. Quitar los controladores antiguos de nvidia e instalar los más nuevos de los repositorios de ubuntu funcionó.

Suponiendo que el controlador de nvidia tenía la culpa, realicé una maniobra de alto riesgo y alta recompensa ejecutando este script (se encontró una versión ligeramente modificada de uno).aquí) para desinstalar todos los controladores de nvidia e instalar los más nuevos desde los repositorios de ubuntu:

#!/bin/bash

sudo apt remove --purge '^nvidia-.*' -y
sudo apt install ubuntu-desktop -y
sudo apt --purge remove "*cublas*" "cuda*" -y
sudo apt --purge remove "*nvidia*" -y
sudo add-apt-repository --remove ppa:graphics-drivers/ppa -y
sudo trash /etc/X11/xorg.conf
sudo apt autoremove -y

sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
sudo reboot

Después de instalar los nuevos controladores de nvidia, no modifiqué grub.cfg para usar el kernel más nuevo (5.0.4-47) para ver cómo funcionaría el kernel anterior (5.0.4-42). Eso resultó en el mismo error que se describe en la pregunta. Después de eso, cambié la versión del kernel en grub.cfg a 5.0.4-47 y finalmente pude iniciar correctamente el escritorio gnome.

Mi conclusión es que, después de todo, el problema fue causado por una incompatibilidad entre el kernel de Linux y el controlador de gráficos nvidia. Si tiene un problema similar, le sugiero que mantenga actualizados tanto el kernel de Linux como los controladores de gráficos y reinstale los controladores de nvidia si es necesario.

información relacionada