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.

Esempio di terminale SLES che mostra systemd-modules-load.service in stato di errore dopo che un modulo fittizio example_drv non può essere caricato
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:

sudo journalctl -b -u systemd-modules-load.service --no-pager

È inoltre possibile esaminare i messaggi del kernel relativi al caricamento dei moduli:

sudo journalctl -b -k --no-pager | grep -iE 'module|modprobe|firmware|taint'

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.

Esempio di journalctl di SLES che evidenzia un errore fittizio nel caricamento di un modulo del kernel all'interno di systemd-modules-load.service.
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:

grep -Rns --color=auto 'MODULE_NAME'   /etc/modules-load.d /run/modules-load.d /usr/lib/modules-load.d   /etc/modprobe.d /usr/lib/modprobe.d 2>/dev/null

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:

uname -r
sudo modinfo MODULE_NAME
sudo modprobe MODULE_NAME
Esempio di terminale SLES che confronta la versione attiva del kernel con una voce statica modules-load.d e un errore di modulo non trovato di modprobe.
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:

grep -Rns --color=auto -E '^[[:space:]]*(blacklist|install)[[:space:]]+MODULE_NAME'   /etc/modprobe.d /usr/lib/modprobe.d 2>/dev/null

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.

Esempio di terminale SLES che mostra la ricostruzione dell'initramfs tramite dracut, seguita da una verifica del servizio di caricamento dei moduli systemd.
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:

sudo systemctl restart systemd-modules-load.service
systemctl status systemd-modules-load.service --no-pager
systemctl is-failed systemd-modules-load.service

Se il modulo richiesto deve essere caricato, confermalo:

lsmod | grep -w MODULE_NAME

Quindi riavvia il sistema durante un'apposita finestra di manutenzione e verifica il nuovo avvio:

sudo reboot

Dopo l'accesso:

systemctl --failed
journalctl -b -u systemd-modules-load.service --no-pager

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 troviLa mossa migliore da fare ora
Il modulo è assente e non è più necessario.Rimuovere la richiesta di avvio locale obsoleta.
Il modulo è assente ma richiestoRipristina 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 intenzionalmenteMantieni 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.

Lascia un commento

Risolvere l'elevato utilizzo della CPU da parte di tracker-miner-3 in Ubuntu GNOME

Risolvere l'elevato utilizzo della CPU da parte di tracker-miner-3 in Ubuntu GNOME

Scopri perché tracker-miner-fs-3 può utilizzare un elevato numero di CPU in Ubuntu GNOME, come verificare lo stato dell'indicizzazione, ridurre le posizioni ricercabili e ricostruire in modo sicuro l'indice di Tracker.

How to Dual-Boot Ubuntu 24.04 and Windows 11 with BitLocker Enabled

How to Dual-Boot Ubuntu 24.04 and Windows 11 with BitLocker Enabled

Learn when Ubuntu 24.04 can dual-boot with BitLocker on, how to protect your recovery key, and the safe same-drive or separate-drive installation paths.

Come aggiungere un client Pardus Linux a un dominio Active Directory

Come aggiungere un client Pardus Linux a un dominio Active Directory

Unisci Pardus Linux ad Active Directory con Pardus Domain Joiner. Verifica DNS e ora, installa la CLI, effettua l'accesso con SSSD e verifica l'accesso al dominio.

Come configurare Pardus Image Creator per la distribuzione di sistemi operativi personalizzati

Come configurare Pardus Image Creator per la distribuzione di sistemi operativi personalizzati

Scopri cosa può fare Pardus Image Writer, come installarlo e come distribuire in modo sicuro un'immagine ISO personalizzata e verificata su una chiavetta USB. Include istruzioni per la compilazione e il test.

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.

Diagnostica e correggi gli errori del servizio systemd-modules-load.service su SLES individuando il modulo difettoso, correggendo la configurazione di avvio e ricostruendo l'initramfs solo quando necessario.

Come migrare un desktop Debian a un sistema operativo immutabile con OSTree

Come migrare un desktop Debian a un sistema operativo immutabile con OSTree

Scopri perché Debian non può essere reso immutabile per OSTree installando un singolo pacchetto, quindi migra in sicurezza a un ambiente desktop OSTree o pianifica la creazione di un'immagine Debian personalizzata.

Risolvere il problema dei gesti del touchpad non funzionanti su Wayland in Ubuntu 24.04

Risolvere il problema dei gesti del touchpad non funzionanti su Wayland in Ubuntu 24.04

Risolvi il problema della mancata gestione dei gesti a tre dita del touchpad su Ubuntu 24.04 Wayland controllando le impostazioni di GNOME, gli eventi di libinput, gli aggiornamenti e le estensioni.

Come configurare uno script di commutazione dell'uscita audio PipeWire su Debian

Come configurare uno script di commutazione dell'uscita audio PipeWire su Debian

Crea uno script affidabile per commutare l'uscita audio di PipeWire su Debian con wpctl. Passa da altoparlanti, Bluetooth, USB o HDMI senza dover inserire ID fissi nel codice.

Come configurare le stampanti tramite CUPS su HamoniKR OS

Come configurare le stampanti tramite CUPS su HamoniKR OS

Configura stampanti USB e di rete su HamoniKR OS con CUPS. Aggiungi una coda di stampa, scegli un IPP senza driver o un driver specifico, imposta le impostazioni predefinite e stampa una pagina di prova.

Come limitare l'utilizzo di CPU e RAM di un processo con i cgroup su Ubuntu

Come limitare l'utilizzo di CPU e RAM di un processo con i cgroup su Ubuntu

Su Ubuntu, utilizza i cgroup di systemd per limitare il tempo di CPU e la memoria per un comando o un servizio. Confronta gli ambiti temporanei, i limiti persistenti e i principali compromessi.