Panico del kernel con errore "Impossibile aprire il dispositivo root", dove devo aggiungere l'opzione "root ="?


9

ogni volta che provo ad avviare il kernel linux 3.0.0.13 (quello installato dagli aggiornamenti) ricevo un errore di panico nel kernel:

VFS: Impossibile aprire il dispositivo root "sda1" o blocco sconosciuto (0,0) Aggiungere un'opzione di avvio "root =" corretta;

Fortunatamente se avvio con la versione precedente non ho alcun problema. Come posso risolvere questo? Dove devo aggiungere il corretto root= option? Se non riesco a far funzionare questo kernel, come posso rimuoverlo come predefinito e attenermi a quello più vecchio?


Lo stesso problema qui. La differenza principale che osservo è che fino alla 3.0.0.12, il grub conf tenta di identificare il disco rigido usando il suo UUID, 3.0.0.13 ora usa / dev / sda6 .. strano ...
Dan Soap

Risposte:


11

Non hai fornito molte informazioni con i log e simili per procedere, ma suppongo che molto probabilmente questo errore che stai riscontrando sia dovuto al fatto che il kernel è confuso da un'unità IDE / SATA. Fare una rapida ricerca su Google mi ha portato al collegamento 1 , collegamento 2 , collegamento 3

Di seguito è riportato un estratto da un legame di cui da uno dei link di cui sopra :

Molto probabilmente uno dei problemi più ricorrenti (ma una volta risolto, molto probabilmente non lo vedrai mai più):

Unable to mount root fs on unknown-block(0,0)

o

VFS: Cannot open root device "sda3" or unknown-block(8,3)
Please append a correct "root=" boot option; here are the available partitions:
  sda driver: sd
    sda1 sda2

Le cifre 0,0o 8,3possono essere diverse nel tuo caso - si riferisce al dispositivo a cui il kernel tenta di accedere (e che non riesce). In generale si può dire che, se la prima cifra è 0, il kernel non è in grado di identificare l'hardware. Se è un'altra cifra (come 8), non è in grado di identificare il file system (ma è in grado di accedere all'hardware).

Il problema qui è che il kernel che si sta avviando non può tradurre il root=/dev/...parametro che gli è stato dato (all'interno della configurazione del boot loader) in un file system reale e accessibile. Diverse ragioni possono causare un tale errore:

  • nella configurazione del kernel mancano i driver per il controller HDD (casi 1, 4, 5)
  • nella configurazione del kernel mancano i driver per il bus utilizzato dal controller HDD
  • nella configurazione del kernel mancano i driver per il file system che si sta utilizzando
  • il dispositivo è erroneamente identificato nel parametro root = (casi 2, 3)

Risolvere il problema è facile se sai qual è il motivo. Molto probabilmente no, quindi ecco un rapido check-up.

Aprire la procedura guidata di configurazione del kernel (la parte make menuconfig ) in modo da poter aggiornare la configurazione del kernel di conseguenza.

  • Controllare se si dispone del supporto integrato (e non come modulo) per il bus / protocollo utilizzato dal controller del disco rigido.
  • Molto probabilmente si tratta del supporto PCI, del supporto SATA (che è sotto il supporto del dispositivo SCSI), ...
  • Controlla se hai il supporto integrato (e non come modulo) per il controller HDD che usi. Uno dei casi più frequenti: è stato selezionato il supporto per il protocollo del controller del disco rigido (IDE, SATA, SCSI, ...) ma si è dimenticato di
    selezionare il driver del controller dell'HDD stesso (come Intel PIIX). Prova a
    eseguire il seguente comando lscpi e incolla il suo output su
    http://kmuto.jp/debian/hcl/ . Il sito ti mostrerà quali driver del kernel devi selezionare per il tuo sistema. All'interno di menuconfig,
    è possibile digitare "/" per aprire la funzione di ricerca e digitare il
    nome del driver per scoprire dove risiede. # lspci -n
  • Controlla se hai il supporto integrato (e non come modulo) per i file system che usi.
  • Supponiamo che il tuo file system di root utilizzi btrfs (che non consiglio vivamente) ma non l'hai selezionato o selezionato per essere costruito come
    modulo, quindi otterrai l'errore che vedi. Assicurarsi che il
    supporto del file system sia integrato nel kernel.
  • Controlla se il parametro kernel per root=sta puntando alla partizione corretta.

    Non è così stupido come sembra. Quando si avvia con un kernel, è possibile che i dischi vengano elencati come / dev / sda mentre il kernel (configurato) si aspetta che sia / dev / hda. Ciò non è perché i kernel sono incoerenti tra loro, ma a causa dei driver utilizzati: i driver più vecchi usano la sintassi hda, i nuovi sda.

    Prova a cambiare hda con sda (e hdb con sdb e ...).

    Inoltre, i kernel recenti offrono una panoramica delle partizioni trovate sul dispositivo. In tal caso, potrebbe essere utile identificare se si è deselezionata una partizione (nell'esempio fornito all'inizio di questa sezione, vengono trovate solo due partizioni mentre il kernel è stato incaricato di avviare la terza). In caso contrario, è molto probabile perché il kernel non conosce il dispositivo con cui iniziare (quindi non può tentare di visualizzare le partizioni).

  • Controlla se il kernel che viene avviato dal boot loader è il kernel corretto. Ho visto persone che, dopo aver creato un primo kernel (che non si avvia), dimenticano che devono montare /bootprima di sovrascrivere il kernel con uno nuovo. Di conseguenza, copiano il kernel nel file system radice ( /) mentre il boot loader si aspetta ancora che l'immagine del kernel si trovi sulla /bootpartizione.


1
Ciao, è passato molto tempo, ma grazie. Ho avuto un CD-Rom difettoso, rimuovendo che tutto ha funzionato bene!
lucacerone,

Link 1, Link 4 e Link 5 sono tutti morti ora.
Questionmark

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.