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

8

ogni volta che provo ad avviare con il kernel Linux 3.0.0.13 (quello installato dagli aggiornamenti) ottengo un errore di panico del kernel:

  

VFS: impossibile aprire il dispositivo di root "sda1" o il blocco sconosciuto (0,0)   Aggiungi una corretta opzione di avvio "root=";

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

    
posta lucacerone 24.10.2011 - 09:48

2 risposte

9

Non hai fornito molte informazioni con i registri e così via per procedere, ma suppongo che molto probabilmente l'errore che stai affrontando sia dovuto al fatto che il kernel è confuso da un'unità IDE / SATA. Fare una rapida ricerca su Google mi ha portato a link 1 , link 2 , link 3

Di seguito è riportato l'estratto da un link riferito a da uno dei link sopra :

  

Molto probabilmente uno dei problemi più frequenti (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,0 o 8,3 possono essere diverse nel tuo caso - si riferisce a   il dispositivo a cui il kernel tenta di accedere (e che non riesce).   In generale si può dire che, se la prima cifra è 0, allora il   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 identificare   accedere all'hardware).

     

Il problema qui è che il kernel che stai avviando non può   traduci il parametro root=/dev/... che hai fornito (all'interno del boot   configurazione del caricatore) in un file system reale e accessibile. Parecchi   i motivi possono causare un tale fallimento:

     
  • la configurazione del kernel manca dei driver per il tuo controller HDD (casi 1, 4, 5)
  •   
  • la configurazione del kernel manca di driver per il bus utilizzato dal tuo controller HDD
  •   
  • la configurazione del kernel manca di 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. Tu più   probabilmente no, quindi ecco un rapido check-up.

     

Apri la configurazione guidata del kernel (la parte make menuconfig ) così   che puoi aggiornare la configurazione del kernel di conseguenza.

     
  • Verifica se hai un supporto integrato (e non come modulo) per il bus / protocollo utilizzato dal controller del disco rigido.
  •   
  • Molto probabilmente questo è il supporto PCI, il supporto SATA (che è al di sotto del supporto per dispositivi SCSI), ...
  •   
  • Controllare se è stato integrato (e non come modulo) il supporto per il controller HDD che si utilizza.      Uno dei casi più frequenti: hai selezionato il supporto per il tuo protocollo del controller del disco rigido (IDE, SATA, SCSI, ...) ma ti sei dimenticato di
      selezionare il driver del controller HDD stesso (come Intel PIIX). Prova
      eseguendo il seguente comando lscpi e incollando l'output su link . Il sito ti mostrerà quale kernel   driver che devi selezionare per il tuo sistema. All'interno del menuconfig,
      puoi digitare "/" per aprire la funzione di ricerca e digitare il driver
      nome per scoprire dove risiede.      %codice%
  •   
  • Verifica se hai un supporto integrato (e non come modulo) per i file system che usi.
  •   
  • Supponiamo che il tuo file system di root usi btrfs (che sicuramente non consiglio) ma non lo hai selezionato, o selezionato per essere costruito come un   modulo, quindi riceverai l'errore che vedi. Assicurati che il file system
      il supporto è integrato nel kernel.
  •   
  • Controlla se il parametro del kernel per # lspci -n punta alla partizione corretta.

         

    Questo non è così stupido come sembra. Quando sei stato avviato con uno   kernel, potrebbe elencare i tuoi dischi come / dev / sda mentre il tuo   Il kernel (configurato) si aspetta che sia / dev / hda. Questo non è   perché i kernel sono incoerenti tra loro, ma a causa del   driver usati: i driver più vecchi usano la sintassi hda, newer sda.

         

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

         

    Inoltre, i kernel recenti forniscono una panoramica delle partizioni che hanno trovato   sul dispositivo detto. Se lo fa, potrebbe aiutarti a identificare se tu   ha selezionato una partizione selezionata (nell'esempio riportato all'inizio di questo   sezione, si trovano solo due partizioni mentre il kernel era   incaricato di avviare il terzo). Se non lo fa, è molto probabile   perché il kernel non conosce il dispositivo per cominciare (quindi non può   tenta di visualizzare le partizioni).

  •   
  • Controlla se il kernel che sta per essere 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 root= prima del   sovrascrivere il kernel con uno nuovo. Di conseguenza, copiano il file   kernel nel file system di root ( /boot ) mentre il boot loader è ancora attivo   si aspetta che l'immagine del kernel si trovi sulla partizione / .

  •   
    
risposta data Nitin Venkatesh 27.02.2012 - 05:51
0

Dopo aver letto questa risposta che spiega cosa sta succedendo, prova ad usare il [Boot-Reapir CD] [1] [1]: link

Ha funzionato alla perfezione nel riparare "il dispositivo è erroneamente identificato nel parametro root = (casi 2, 3)".

    
risposta data madcap66 30.09.2013 - 14:25

Leggi altre domande sui tag