Después de algunas actualizaciones recientes, ¡mi computadora ya no arranca! Esto es lo que podría determinar:
- Esta es una computadora muy reciente que me fue proporcionada por TI corporativa. Tiene una CPU Intel reciente (generación Skylake).
- La computadora ejecuta Ubuntu 16.04.
- La computadora se inició correctamente por última vez en marzo. El problema probablemente se deba a una actualización de software o un error de hardware.
- Tengo otra computadora con 16.04 con casi el mismo software instalado (que usé
apt-clone
), y funciona bien. Tiene hardware diferente (también amd64, pero CPU diferente, GPU diferente, etc.). - El núcleo se inicia, el initrd funciona correctamente. Cuando inicio con una pantalla de presentación en modo gráfico, se me solicita la contraseña para mi volumen dm-crypt, y lo último que veo es que se ha montado correctamente.
- El bloqueo se produce antes de recibir un mensaje de inicio de sesión. Cuando la computadora se cuelga, es difícil. Incluso Alt+ SysRqno responde. La CPU está evidentemente vinculada al 100% ya que los ventiladores se encienden a toda potencia.
- Todavía tengo el kernel que estaba ejecutando antes de reiniciar. Cuando selecciono este kernel en el menú Grub, obtengo el mismo bloqueo. Parece que este es un error del kernel preexistente que se activa por otra cosa, pero ¿qué?
- Si apago la pantalla de inicio (eliminar
splash
de lalinux
línea de comando en Grub), veo que se inician varios servicios y luego se bloquea. Puedo obtener un shell raíz agregando
init=/bin/sh
a lalinux
línea de comando en Grub. Incluso puedo llegar más lejos agregandosystemd.unit=basic.target systemd.shell
Esto inicia una serie de servicios y ejecuta un shell raíz en tty9.
- Si corro
systemctl start multi-user.target
desde ese shell raíz, la computadora se bloquea. Entonces, presumiblemente, el problema se desencadena por uno de estos servicios. - Corrí
systemctl list-dependencies multi-user.target
para ver qué servicios empezar. Inicié manualmente las dependencias enumeradas una por una, y todo comenzó bien.
Así que esto parece un error de hardware (ya que ocurre en una computadora pero no en la otra) que se activa por algún software. ¿Pero qué software? Como la computadora se bloquea tan fuerte, no puedo obtener ningún registro. Ni siquiera puedo obtener ninguna salida de consola útil.
Técnicas de depuración útiles:
- Alt+ SysRq: tecla mágica SysRq , que te permite hacer cosas como un reinicio de emergencia. Accede al kernel a un nivel muy bajo, por lo que funciona en todos los accidentes, excepto en los peores. En mi caso, Alt+ SysRqno responde, lo que muestra qué tan profundo es el choque.
- Para modificar los parámetros de arranque, presione y mantenga presionados Shiftunos segundos después de encenderlo. Debe presionarlo después de que el BIOS haya inicializado el teclado, pero antes de que se inicie el sistema operativo. Esto hace que aparezca el menú Grub .
- En el menú Grub, presione epara editar la línea de comando para una entrada de menú. Para cambiar los parámetros de arranque de Linux, navegue hasta la línea que comienza con
linux
. En un Ubuntu moderno, encontrará núcleos antiguos en "Opciones avanzadas para Ubuntu". Una vez que haya realizado los cambios deseados en la línea de comando, presione Ctrl+ xpara iniciar. Cualquier cambio que realice aquí es solo para este arranque, no se guardan en el disco. - Algunas opciones útiles en la
linux
línea de comando:quiet nosplash
oculta casi todos los mensajes de arranque. Elimínelos para obtener mensajes en la consola durante el arranque, lo cual es necesario para tener alguna posibilidad de diagnosticar problemas.recovery
le ofrece un shell de raíz casi sin servicios. Necesitará saber la contraseña de root. La entrada del menú "modo de recuperación" usa esto.init=/bin/sh
le ofrece un shell raíz sin ningún tipo de servicio. Para reanudar el arranque normal, ejecuteexec init
. Puede pasar las opciones de systemd en este punto, por ejemplo,exec init --unit=basic.target
para iniciar init y algunos servicios (tenga en cuenta que esto no inicia ninguna forma de iniciar sesión, por lo que será mejor que tenga un shell ejecutándose en otra consola). Tenga en cuenta que el sistema de archivos raíz está montado de solo lectura; corremount -o remount,rw /
para poder escribirle.systemd.unit=basic.target
inicia un conjunto muy básico de servicios. ¡Tenga en cuenta que esto no incluye ninguna forma de iniciar sesión! Puede hacer que esto sea el predeterminado ejecutandosystemctl set-default basic.target
en un indicador raíz. Para restaurar el objetivo predeterminado original, ejecutesystemctl set-default graphical.target
(osystemctl set-default multi-user.target
para un servidor sin GUI).systemd.debug-shell
inicia un shell de raíz en tty9. Puede habilitar esto para cada arranque ejecutandosystemctl enable debug-shell
en un indicador raíz. No olvide deshabilitar esto después de que haya resuelto el problemasystemctl disable debug-shell
. Presione Alt+ F9para cambiar a tty9.- Véanse también las sugerencias systemd de Fedora , las sugerencias de problemas de arranque de Arch Linux .