Tengo un único disco duro con la siguiente configuración de partición:
- 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):
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:
- Sepa cómo usar las imágenes 5.4.0-42 en lugar de las 5.4.0-45 hace alguna diferencia.
- 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.service
despué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.