Dopo alcuni aggiornamenti recenti, il mio computer non si avvia più! Ecco cosa potrei determinare:
- Questo è un computer molto recente che mi è stato fornito dall'IT aziendale. Ha una recente CPU Intel (generazione Skylake).
- Il computer esegue Ubuntu 16.04.
- L'ultimo avvio del computer è stato eseguito correttamente a marzo. Il problema è presumibilmente dovuto a un aggiornamento del software o a un bug hardware.
- Ho un altro computer con 16.04 con praticamente lo stesso software installato (che ho usato
apt-clone
), e funziona perfettamente. Ha hardware diverso (anche amd64, ma CPU diversa, GPU diversa, ecc.). - Il kernel si avvia, initrd funziona correttamente. Quando avvio con una schermata iniziale in modalità grafica, mi viene richiesta la password per il mio volume dm-crypt e l'ultima cosa che vedo è che è montato correttamente.
- Il blocco si verifica prima che riceva un prompt di accesso. Quando il computer si blocca, è un blocco duro. Anche Alt+ SysRqnon risponde. La CPU è evidentemente bloccata al 100% da quando le ventole si accendono al massimo.
- Ho ancora il kernel che stavo eseguendo prima di riavviare. Quando seleziono questo kernel nel menu di Grub, ottengo lo stesso blocco. Quindi sembra che questo sia un bug del kernel preesistente che viene attivato da qualcos'altro - ma cosa?
- Se spengo la schermata iniziale (rimuovo
splash
dallalinux
riga di comando in Grub), vedo l'avvio di un numero di servizi, quindi si blocca. Posso ottenere una shell di root aggiungendola
init=/bin/sh
allalinux
riga di comando in Grub. Posso anche andare oltre aggiungendosystemd.unit=basic.target systemd.shell
Questo avvia un numero di servizi ed esegue una shell di root su tty9.
- Se corro
systemctl start multi-user.target
da quella shell di root, il computer si blocca. Quindi presumibilmente il problema è innescato da uno di questi servizi. - Corsi
systemctl list-dependencies multi-user.target
a vedere quali servizi iniziarono. Ho avviato manualmente le dipendenze elencate una per una e tutto è iniziato bene.
Quindi questo sembra un bug hardware (poiché si verifica su un computer ma non sull'altro) che viene attivato da alcuni software. Ma quale software? Dal momento che il computer si blocca così duramente, non riesco a ottenere alcun registro. Non riesco nemmeno a ottenere alcun risultato utile sulla console.
Utili tecniche di debug:
- Alt+ SysRq: tasto magico SysRq , che consente di eseguire operazioni come il riavvio di emergenza. Accede al kernel a un livello molto basso, quindi funziona in tutti gli arresti anomali tranne quelli peggiori. Nel mio caso, Alt+ SysRqnon risponde, il che dimostra quanto è profondo lo schianto.
- Per modificare i parametri di avvio, tenere premuto Shiftalcuni secondi dopo l'accensione. È necessario premerlo dopo che il BIOS ha inizializzato la tastiera, ma prima dell'avvio del sistema operativo. Questo fa apparire il menu Grub .
- Nel menu di Grub, premere eper modificare la riga di comando per una voce di menu. Per modificare i parametri di avvio di Linux, passare alla riga che inizia con
linux
. Su un moderno Ubuntu, troverai i vecchi kernel in "Opzioni avanzate per Ubuntu". Dopo aver apportato le modifiche desiderate alla riga di comando, premere Ctrl+ xper avviare. Tutte le modifiche apportate qui sono solo per questo avvio, non vengono salvate sul disco. - Alcune opzioni utili sulla
linux
riga di comando:quiet nosplash
nasconde quasi tutti i messaggi di avvio. Rimuoverli per ottenere messaggi sulla console durante l'avvio, che è necessario per avere qualsiasi possibilità di diagnosticare i problemi.recovery
ti dà una shell di root con quasi nessun servizio. Dovrai conoscere la password di root. La voce di menu "modalità di ripristino" utilizza questo.init=/bin/sh
ti dà una shell di root senza alcun servizio. Per riprendere il normale avvio, eseguireexec init
. A questo punto puoi passare le opzioni di systemd, ad esempioexec init --unit=basic.target
per avviare init e alcuni servizi (tieni presente che questo non inizia in alcun modo ad accedere, quindi è meglio avere una shell in esecuzione su un'altra console). Si noti che il filesystem di root è montato in sola lettura; corrimount -o remount,rw /
per poterti scrivere.systemd.unit=basic.target
avvia un set di servizi molto semplice. Nota che questo non include alcun modo per accedere! Puoi impostarlo come predefinito eseguendolosystemctl set-default basic.target
al prompt di root. Per ripristinare la destinazione predefinita originale, eseguiresystemctl set-default graphical.target
(osystemctl set-default multi-user.target
per un server senza GUI).systemd.debug-shell
avvia una shell di root su tty9. È possibile abilitare questo per ogni avvio eseguendosystemctl enable debug-shell
un prompt di root. Non dimenticare di disabilitarlo dopo aver risolto il problemasystemctl disable debug-shell
. Premi Alt+ F9per passare a tty9.- Vedi anche Fedora systemd suggerimenti , consigli problema di avvio di Arch Linux .