Home
» LINUX
»
Risolvere l'errore "Impossibile avviare il caricamento dei moduli del kernel" all'avvio di SLES.
Risolvere l'errore "Impossibile avviare il caricamento dei moduli del kernel" all'avvio di SLES.
Il messaggio di avvio SLES "Impossibile avviare il caricamento dei moduli del kernel" di solito significa che systemd-modules-load.serviceè stato tentato di caricare almeno un modulo del kernel e che una richiesta è fallita. L'obiettivo utile non è semplicemente nascondere la riga di avvio rossa. Una buona riparazione mantiene il servizio integro, rimuove le richieste di moduli obsolete, preserva tutti i driver effettivamente necessari al sistema e sopravvive al successivo riavvio.
Questa guida è stata scritta per SUSE Linux Enterprise Server 15 ed è allineata con l'attuale Guida di amministrazione di SLES 15 SP7. La documentazione SUSE indica che systemd-modules-load.servicei moduli vengono caricati con il nome specificato in /etc/modules-load.d/*.conf, mentre la maggior parte dei moduli hardware moderni viene normalmente caricata automaticamente quando vengono rilevati i dispositivi. Questa distinzione è importante: se una voce statica obsoleta punta a un modulo che non esiste più, eliminare o correggere tale voce è spesso più sicuro che forzare il reinserimento di un driver obsoleto nel sistema. Consultare la documentazione di SUSE sulla gestione dei moduli del kernel per SLES 15 SP7 .
Come dovrebbe apparire una soluzione efficace
Prima di apportare qualsiasi modifica, definisci il risultato desiderato. Dopo la riparazione:
systemctl status systemd-modules-load.servicenon dovrebbe più segnalare un risultato negativo.
Il registro non dovrebbe più mostrare lo stesso errore di caricamento del modulo durante un nuovo avvio.
Se il modulo è effettivamente necessario, modprobe MODULE_NAMEl'installazione dovrebbe avere successo e l'hardware o la funzionalità correlata dovrebbero funzionare.
Se il modulo è obsoleto, la richiesta non più valida dovrebbe essere rimossa anziché sostituita con un modulo non correlato.
Se il problema è legato all'avvio iniziale, l'initramfs dovrebbe essere ricostruito e la macchina dovrebbe riavviarsi normalmente.
Se non tutti questi controlli sono applicabili alla tua situazione, utilizza quelli che corrispondono al componente difettoso. Ad esempio, un server può avviarsi correttamente anche se un modulo opzionale non funziona. Vale comunque la pena di risolvere questo problema, ma è diverso da un driver di archiviazione mancante che impedisce la visualizzazione del file system root.
Passaggio 1: Confermare l'unità guasta e acquisire l'errore esatto del modulo
Invece di cercare di indovinare dal messaggio visualizzato nella schermata iniziale, iniziate esaminando il servizio stesso:
sudo systemctl status systemd-modules-load.service --no-pager
Cerca il nome di un modulo e un errore come Module ... not found, No such device, Operation not permitted, oppure un messaggio che indica che un modulo non supportato è stato rifiutato. La formulazione esatta determina l'azione successiva.
Una visualizzazione rappresentativa dello stato del servizio: concentrarsi sul nome del modulo e sul primo errore di caricamento concreto, piuttosto che solo sullo stato di errore finale.
Se l'output di stato è troncato, non modificare ancora la configurazione. Ottieni prima il log di avvio completo.
Passaggio 2: Leggere il registro di avvio prima di modificare i file del modulo
Interroga solo questo servizio per l'avvio corrente:
Il primo comando indica quale richiesta di caricamento statico non è andata a buon fine . Il log del kernel può fornire ulteriori informazioni contestuali, come ad esempio un driver che rifiuta il dispositivo rilevato, una dipendenza dal firmware, problemi di firma o altri errori di livello inferiore.
Il registro di servizio circoscrive il problema alla richiesta del modulo che non è riuscita durante questo avvio, e questa è la prova necessaria prima di scegliere una riparazione.
Un risultato come questo di Module foo not found in directory /lib/modules/...solito indica una configurazione obsoleta, un'incompatibilità tra kernel e pacchetti o un driver di terze parti che non è stato ricompilato per il kernel attivo. No such deviceè diverso: il file del modulo potrebbe esistere, ma l'hardware o il dispositivo virtuale corrente potrebbe non corrispondere a ciò che il driver si aspetta.
Passaggio 3: Scopri chi sta chiedendo a SLES di caricare quel modulo
Cerca le posizioni di caricamento statico standard e la configurazione di modprobe:
Sostituire MODULE_NAMEcon il nome dal journal. Su SLES 15 SP7, le voci locali in /etc/modules-load.d/sono la posizione standard gestita dall'amministratore per i moduli che devono essere caricati all'avvio, mentre le voci pacchettizzate possono trovarsi in /usr/lib/modules-load.d/. SUSE fa notare che la maggior parte dei moduli non necessita affatto di una voce manuale modules-load.d.
Quindi verifica se il kernel attivo possiede effettivamente il modulo:
Confronta il nome del modulo configurato con quello del kernel in esecuzione. Una voce statica che indica un modulo assente in quel kernel è un chiaro segnale di configurazione obsoleta o di pacchetto driver mancante.
Se il modulo è obsoleto
Rimuovere o disabilitare il file locale che lo richiede. Non eliminare un file di fornitore /usr/libsolo per silenziare l'errore, perché gli aggiornamenti dei pacchetti possono ripristinarlo. Se si determina che un /etc/modules-load.d/*.conffile locale è stato creato per hardware obsoleto o software vecchio, rimuovere la relativa voce locale e ripetere il test.
Se il modulo dovrebbe esistere ma modinfo non riesce a trovarlo
Verifica che il kernel in esecuzione corrisponda all'albero dei moduli installati:
uname -r
ls -ld /lib/modules/$(uname -r)
rpm -q kernel-default
Un controllo di qualità comune è semplice: /lib/modules/$(uname -r)il sistema deve esistere e contenere i moduli per il kernel effettivamente in esecuzione. Se un driver di terze parti è stato compilato per un kernel precedente, reinstallatelo o ricompilatelo per il kernel SLES corrente utilizzando la procedura supportata dal fornitore. Evitate di copiare un .kofile da un'altra versione del kernel solo per cercare modprobequalcosa; le differenze nell'ABI o nella firma del kernel possono rendere questa operazione pericolosa o inefficace.
Se il modulo è nella lista nera
Cerca una blacklist o installa una soluzione alternativa:
Rimuovere una blacklist solo dopo aver verificato il motivo per cui è stata aggiunta. Una blacklist può proteggere il sistema da un driver in conflitto. La guida ai moduli di SUSE documenta sia le blacklist permanenti che quelle temporanee in fase di esecuzione di GRUB, quindi la soluzione migliore potrebbe essere quella di rimuovere la richiesta di caricamento statico anziché la blacklist.
Se SLES segnala un modulo non supportato
Non abilitare automaticamente il caricamento di moduli non supportati. SLES contrassegna i moduli del kernel per lo stato di supporto e forzare un modulo non supportato può influire sulla compatibilità. SUSE documenta il meccanismo di eccezione per scenari di test o hotfix del fornitore nella sua Guida di amministrazione. Utilizzalo solo quando comprendi le conseguenze sul supporto e hai un requisito legittimo per il driver. La stessa guida SUSE aggiornata è disponibile alla pagina Guida di amministrazione di SLES 15 SP7 .
Passaggio 4: Ricostruire initramfs solo se la modifica influisce sull'avvio iniziale.
Se il modulo guasto è necessario all'interno dell'initramfs, oppure se hai modificato un driver critico per l'avvio o una configurazione della blacklist che deve essere riflessa lì, rigenera l'immagine:
sudo dracut -f
SUSE documenta specificamente la ricostruzione dell'initramfs dopo le modifiche ai driver che influiscono sull'avvio. La sua guida attuale sul processo di avvio spiega quando è necessario aggiungere i driver all'initramfs e come dracutviene utilizzato per rigenerarlo: Introduzione al processo di avvio in SLES 15 SP7 .
Non eseguire questa operazione dracut -fcome rituale per ogni errore relativo ai moduli opzionali. Se un normale modulo post-avvio è stato semplicemente elencato in /etc/modules-load.d, potrebbe essere sufficiente correggere quel file. La ricostruzione di initramfs è più rilevante quando la configurazione errata è incorporata nell'immagine di avvio o il driver richiesto deve essere disponibile prima che il file system root effettivo venga completamente montato.
Quando la riparazione influisce sull'avvio iniziale, ricostruisci initramfs e poi verifica il servizio invece di presumere che un comando dracut eseguito correttamente abbia risolto da solo l'errore del modulo originale.
Verificare la riparazione prima di considerare l'incidente chiuso.
Eseguire prima un test senza riavviare il sistema, quando sarà possibile farlo in sicurezza:
Il segnale di successo più evidente non è la scomparsa del messaggio nella console, bensì il fatto che, a un nuovo avvio, lo stesso errore del modulo non si ripresenti e che l'hardware o il sottosistema che dipende da tale modulo continui a funzionare correttamente.
Quando cambiare approccio
Ciò che trovi
La mossa migliore da fare ora
Il modulo è assente e non è più necessario.
Rimuovere la richiesta di avvio locale obsoleta.
Il modulo è assente ma richiesto
Ripristina il pacchetto driver SLES o del fornitore corretto per il kernel in esecuzione; non copiare un file binario di un modulo a caso.
Il modulo esiste ma viene visualizzato il messaggio "Dispositivo non trovato".
Verifica l'hardware, il modello del dispositivo VM, gli ID PCI/USB e se il driver è ancora appropriato.
Il modulo è stato inserito nella lista nera intenzionalmente
Mantieni la lista nera e rimuovi la voce di caricamento forzato contraddittoria, a meno che i requisiti non siano cambiati.
Il modulo di terze parti si è arrestato dopo un aggiornamento del kernel.
Utilizza la procedura di ricostruzione/reinstallazione supportata dal fornitore di terze parti per il nuovo kernel, oppure avvia un kernel supportato e funzionante durante la riparazione.
È coinvolto un driver di archiviazione, filesystem o multipath critico per l'avvio.
Trattalo come un problema di initramfs/ripristino di avvio e verifica la situazione dalla console o tramite accesso di ripristino prima di riavviare nuovamente.
Limiti di questa correzione
La riga "Impossibile avviare il caricamento dei moduli del kernel" è un sintomo, non un singolo difetto. Questa procedura risolve gli errori causati da richieste statiche di moduli, moduli mancanti o non corrispondenti, blacklist e sincronizzazione di initramfs. Non sostituisce la diagnostica hardware, il supporto di driver di terze parti, le procedure di firma di Secure Boot o il ripristino dello storage quando il dispositivo root stesso non è disponibile.
Per i sistemi SLES in produzione, è fondamentale preservare la compatibilità: si consiglia di utilizzare il modulo fornito per il kernel SLES, di mantenere i driver di terze parti allineati alla matrice di supporto del rispettivo fornitore e di utilizzare i meccanismi documentati da SUSE anziché aggirare i controlli semplicemente per risolvere un errore di servizio. La riparazione è completa quando lo stato del servizio, il registro di avvio e l'hardware dipendente concordano sulla risoluzione del problema.