Come correggere l'avvio nel prompt di initramfs e "mount: impossibile leggere '/ etc / fstab': nessun file o directory di questo tipo” e “Nessun init trovato”?


25

Installare un nuovo sistema usando un disco partizionato GPT dedicato a una singola partizione, formattato ext4 , extlinux (versione 4.05) come bootloader, Ubuntu Core versione 13.10 amd64 come rootfs e Ubuntu linux-image-3.11.0-18-generic come kernel, ed extlinux-update per generare la configurazione del bootloader.

Il risultato dopo il riavvio (sempre all'interno di una macchina virtuale basata su KVM) è un prompt (initramfs) e questi messaggi:

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox è v1.20.2.

Regressione:

  • il file system è stato verificato con fsck.ext4

Controlla l'esistenza di root

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

Argomento di avvio principale

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

Controlla i moduli caricati

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ contenuto della cartella di avvio

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

Come far avviare questo sistema al prompt bash predefinito previsto?


Perché due immagini init? Puoi per favore metterlo su un disco reale e provare ad avviarlo? Qemu ed EFI presentano problemi: ad esempio, se non si utilizza un'immagine del firmware di avvio EFI, non si arriva molto lontano.
Mikeserv,

E se tutto ciò che vuoi è un prompt di bash, puoi sempre includere bash nei tuoi initramfs ...
mikeserv

In effetti, mi ricordo di aver visto le GRANDI partizioni GPT in Ubuntu e quelle registrate come completamente vuote. Dopo aver tenuto il turno al riavvio per ottenere la selezione di grub per il loro disco live sono stato in grado di selezionare l'opzione Efi, dopo di che avevo un disco.
Mikeserv,

Risposte:


11

Modifica il parametro di avvio del kernel impostando l' root=/dev/sdaXopzione. sdaXsarebbe tuo /o rootpartizione. Al successivo avvio, vedrai che i tuoi initramfstentativi di montare la partizione prima di provare ad accedere /etc/fstabe montare i file system.

Vedi la domanda " initramfs usa / etc / fstab? " Per maggiori dettagli.


Aggiunta root=/dev/sdaX migliora la situazione, non c'è più un (initramfs)ma un bashrichiamo di inizio invece.
Pro Backup

1
Oltre ad aggiungere manualmente l' root=/dev/sdaXavvio del kernel, ho bisogno di aggiornare /mnt/etc/default/extlinuxe modificare EXTLINUX_ROOT=""il suggerito EXTLINUX_ROOT="/dev/sdaX"ed eseguire di extlinux-updatenuovo.
Pro Backup

10

Quello che devi capire initramfsè che si tratta di un filesystem. Dal kernel 2.6 è, in sostanza, l'unico filesystem imposto dal kernel (lasciando da parte VFS, che è probabilmente anche un filesystem) sul tuo computer. La tua initramfs imageè un'immagine del disco.

All'interno del tuo initramfs imagesarà qualsiasi file che la tua distribuzione ha deciso fosse abbastanza cruciale da richiedere prima che venga trovato il tuo disco di root. Di solito si tratta di Busybox e di qualunque modulo kernel sia necessario per trovare e montare il dispositivo root. Questo non funziona per te.

Non c'è nessun vero mistero qui, tutto sommato. Se riesci a trovare un modo per aggirare un prompt del terminale, puoi navigare initramfs.Ma prima devi demistificarlo.

Prima di tutto e ancora una volta - questo è solo /.il root di Linux che fa cose di tipo root di Linux. In effetti, se si trova in un file separato dal kernel, in realtà è già il tuo secondo dispositivo root. Ogni kernel Linux contiene praticamente un proprio vuoto /che monta prima di estrarre il tuoinitramfs.

Inoltre, initramfsla vera radice. È il punto in cui il kernel Linux inizializza lo spazio utente eseguendo inite successivamente rinunciando a tutte le responsabilità per qualsiasi problema che si possa verificare in seguito. Il vostro initsembra essere Busybox, come sono molti, che significa controllare le sue azioni dovrebbero essere semplice come modificare gli script di shell di accompagnamento.

Quindi perché l'errore di non trovare init?quasi sicuramente questo si riferisce a un programma chiamato in initcui il tuo attuale initè stato istruito tramite shell script a eseguirsi.

La cosa più sorprendente per me è che i pseudo file system del kernel - dev sys proc- non montano. Questo è molto preoccupante o un ottimo indizio. Hai citato KVM che mi porta a mettere in discussione le capacità del kernel, ma prima di percorrere quella strada buia e sconnessa, possiamo prima provare qualcos'altro?

cd /root || mkdir /root

Mi sembra che il messaggio di errore sia ripetutamente:

Nessun file o directory con questo nome

In caso contrario, è necessario ricostruire la tua initramfsimmagine. Avvia un disco live per farlo ed esegui qualsiasi strumento fornito dalla tua distribuzione per raggiungere questo scopo. Oh, e assicurati che questo disco live sia caricato in modalità EFI .

Quindi ecco l'unica cosa davvero fuori dal comune initramfs - switchroot.

Il kernel di Linux fornisce una syscall molto speciale destinata ai primi spazi utente e alla gestione del passaggio dal initramfsdispositivo al disco principale. Funziona montando prima il disco di root in un mountpoint initramfse quindi ruotando il filesystem di root in esso. Suppongo che il initramfs'spunto di montaggio target sia rootbasato sul modo in cui continua a gemere al riguardo. Perché non assicurarti che sia lì?

Per ulteriori indagini dovrai diventare un po 'grintoso. Regola il tuo bootloader per passare ...

init=/bin/sh

... come parametro del kernel.


... il punto di montaggio target è root ... Perché non assicurarsi che sia lì? Non ho la più pallida idea di come verificarlo.
Pro Backup

Non è più necessario. Hai bash che significa che sei passato a initramfs. Ma sei ancora in kvm?
Mikeserv,

Sì, sono ancora in kvm.
Pro Backup

@ProBackup Se ce l'hai fatta devi dare all'altro il tuo dono - questo è quello che hai dichiarato era il tuo obiettivo, comunque. Non importa - apparentemente lo hai già fatto. Sono curioso di sapere perché è necessario specificare due immagini init - perché initrd e boot? Cos'è quello? Vorrei anche sapere cosa, se non altro, è possibile rimanere fuori esecuzione efibootmgrquando richiesto nella macchina virtuale.
Mikeserv,

Ho fatto una nuova domanda SE per il perché: unix.stackexchange.com/questions/120999/… Nota: penso che questo KVM (Parallels Desktop v8) abbia solo un BIOS (non UEFI) a causa del messaggio di avvio del BIOS.
Pro Backup

0

Ho avuto lo stesso problema. Ciò che Alex ha detto è corretto. Per prima cosa ho modificato il mio fstab ma non mi è stato di aiuto. Quindi, ho controllato il mio grub. Se hai la possibilità di accedere al menu di grub.

  • Seleziona Linux, ciò che vuoi avviare e che crea problemi.
  • Premi "e" e cerca "boot_image" o "boot ... root".
  • Controlla " uuid ".
  • Nel mio caso, era sbagliato. Faccio una foto in initramfs digitando 'blkid' e prendo il uuid su quale partizione è installato il mio Linux.
  • Passato l'UUID corretto da BLKID a GRUB -> boot_image.

Ciò ha risolto il mio problema. Dopo il riavvio, il mio Linux ha avuto bisogno di più tempo per iniziare a controllare il disco. Ma ora funziona di nuovo.

Spero di poterti aiutare.

Saluti

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.