Wie behebt man das Problem, dass das Booten in die initramfs-Eingabeaufforderung und "mount: / etc / fstab kann nicht gelesen werden: Keine solche Datei oder kein solches Verzeichnis" und "Kein Init gefunden" erfolgt?

25

Installieren eines neuen Systems mit einer GPT- partitionierten Festplatte, die einer einzelnen Partition zugeordnet ist, ext4- formatiert, extlinux (Version 4.05) als Bootloader, Ubuntu Core Version 13.10 amd64 als rootfs und Ubuntu linux-image-3.11.0-18-generic als Kernel, und extlinux-update zur Erzeugung der Bootloader-Konfiguration.

Das Ergebnis nach dem Neustart (noch in einer KVM-basierten virtuellen Maschine) ist eine (initramfs) -Aufforderung und diese Meldungen:

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 ist v1.20.2.

Regression:

  • Das Dateisystem wurde mit überprüft fsck.ext4

Überprüfen Sie, ob Root vorhanden ist

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

Root-Boot-Argument

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

Überprüfen Sie die geladenen Module

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

/ boot Ordnerinhalt

$ 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

Wie lässt man dieses System zur erwarteten Standard-Bash-Eingabeaufforderung booten?

Pro Backup
quelle
Warum zwei Init-Images? Kannst du das bitte auf eine aktuelle Diskette schreiben und versuchen sie zu booten? Qemu und EFI haben Probleme - wenn Sie beispielsweise kein EFI-Boot-Firmware-Image verwenden, werden Sie überhaupt nicht weit kommen.
mikeserv
Und wenn alles, was Sie wollen, eine Bash-Eingabeaufforderung ist, können Sie Bash immer in Ihr initramfs aufnehmen ...
mikeserv
Tatsächlich erinnere ich mich, wie ich GROSSE GPT-Partitionen in Ubuntu sah und sie als vollständig leer registrierten. Nachdem ich Shift beim Neustart gedrückt hatte, um die Auswahl von Grub für die Live-Festplatte zu erhalten, konnte ich die Efi-Option auswählen, nach der ich eine Festplatte hatte.
mikeserv

Antworten:

11

Ändern Sie Ihren Kernel-Boot-Parameter, indem Sie die root=/dev/sdaXOption setzen. sdaXwäre deine /oder rootPartition. Beim nächsten Start werden Sie feststellen, dass Sie initramfsversuchen, die Partition zu mounten, bevor Sie versuchen, auf /etc/fstabdie Dateisysteme zuzugreifen und diese zu mounten .

Weitere Informationen finden Sie in der Frage " Verwendet initramfs / etc / fstab? ".

Alex
quelle
Hinzufügen root=/dev/sdaX verbessert die Situation, ist es nicht mehr ein , (initramfs)sondern ein bashLogin - Prompt statt.
Pro Backup
1
Neben dem manuellen Hinzufügen root=/dev/sdaXzum Kernel-Boot muss ich das vorgeschlagene aktualisieren /mnt/etc/default/extlinuxund ändern und erneut ausführen . EXTLINUX_ROOT=""EXTLINUX_ROOT="/dev/sdaX"extlinux-update
Pro Backup
10

Was Sie verstehen müssen, initramfsist, dass es sich um ein Dateisystem handelt. Seit Kernel 2.6 ist es im Grunde das einzige vom Kernel auferlegte Dateisystem (abgesehen von VFS, das vermutlich auch ein Dateisystem ist) auf Ihrem Computer. Ihr initramfs imageist ein Disk-Image.

In Ihrer initramfs imageListe finden Sie alle Dateien, die Ihre Distribution als entscheidend genug erachtet hat, um Ihre Root-Festplatte zu finden. Normalerweise sind das Busybox und alle Kernel-Module, die Sie benötigen, um Ihr Root-Gerät zu finden und zu mounten. Dies funktioniert nicht für Sie.

Alles in allem gibt es hier kein wirkliches Rätsel. Wenn Sie sich in einer Eingabeaufforderung des Terminals zurechtfinden, können Sie im Navigationsbereich navigieren. initramfs.Sie müssen ihn jedoch zuerst entmystifizieren.

In erster Linie und noch einmal - dies ist nur /.der Linux-Stamm, der Linux-Stammtypen ausführt. Wenn es sich in einer separaten Datei von Ihrem Kernel befindet, ist es tatsächlich bereits Ihr zweites Root-Gerät. Jeder Linux-Kernel enthält ein im Grunde genommen leeres, /das zuerst gemountet wird, bevor Sie es herunterladeninitramfs.

Was mehr initramfsist, ist die wahre Wurzel. Hier initialisiert der Linux-Kernel den Benutzerbereich, initindem er alle Verantwortlichkeiten für eventuell auftretende Probleme ausführt und anschließend aufgibt . Sie initscheinen wie viele andere Busybox zu sein, was bedeutet, dass die Steuerung der Aktionen so einfach sein sollte wie das Bearbeiten der zugehörigen Shell-Skripte.

Warum dann der Fehler, dass er nicht gefunden wird? Mit init?ziemlicher Sicherheit handelt es sich um ein Programm mit dem Namen, in initdas sich Ihr tatsächlicher initCode über ein Shell-Skript ausführen soll.

Am auffälligsten ist für mich, dass die Kernel-Pseudo-Dateisysteme - dev sys proc- nicht eingebunden werden . Dies ist entweder sehr beunruhigend oder ein sehr guter Hinweis. Sie erwähnen KVM, was mich dazu bringt, die Kernelfähigkeiten in Frage zu stellen. Aber können wir zuerst etwas anderes ausprobieren, bevor wir diese dunkle und geriffelte Straße entlangfahren?

cd /root || mkdir /root

Es fällt mir auf, dass die Fehlermeldung immer wieder auftritt:

Keine übereinstimmende Datei oder Ordner

Andernfalls müssen Sie Ihr initramfsImage neu erstellen . Starten Sie dazu eine Live-CD und führen Sie das von Ihrer Distribution bereitgestellte Tool aus, um dieses Ziel zu erreichen. Oh, und bitte stellen Sie sicher, dass diese Live-Diskette im EFI- Modus geladen ist .

Also hier ist das einzig wirklich Außergewöhnliche initramfs - switchroot.

Der Linux-Kernel bietet einen speziellen Systemaufruf für den frühen Benutzerbereich und für die Verwaltung des Wechsels von initramfsIhrem Root-Plattengerät. Es funktioniert, indem Sie zuerst Ihre Root-Festplatte in einen Mountpoint einhängen initramfsund dann das Root-Dateisystem hineinschwenken. Ich nehme an, Ihr initramfs'sZiel-Mount-Punkt rootbasiert auf der Art und Weise, wie er darüber stöhnt. Warum nicht sicherstellen, dass es da ist?

Für weitere Nachforschungen müssen Sie ein wenig grobkörnig werden. Passen Sie Ihren Bootloader an ...

init=/bin/sh

... als Kernelparameter.

mikeserv
quelle
... Ziel-Einhängepunkt ist root ... Warum nicht sicherstellen, dass er da ist? Ich habe keine Ahnung, wie ich das überprüfen soll.
Pro Backup
Das brauchst du nicht mehr. Sie haben Bash, was bedeutet, dass Sie an Initramfs vorbei sind. Aber bist du noch in kvm?
mikeserv
Ja ich bin noch in kvm
Pro Backup
@ProBackup Wenn du es dort geschafft hast, musst du dem anderen Typ dein Kopfgeld geben - das hast du sowieso als Ziel angegeben. Nevermind - das haben Sie anscheinend schon getan. Ich bin gespannt, warum Sie zwei Init-Images angeben müssen - warum initrd und boot? Was ist das? Ich würde auch gerne wissen, was, wenn überhaupt, Sie efibootmgran Ihrer Eingabeaufforderung in Ihrer virtuellen Maschine außer Betrieb setzen können .
mikeserv
Ich habe eine neue SE-Frage zum Warum gestellt: unix.stackexchange.com/questions/120999/… Hinweis: Ich glaube, dass dieser KVM (Parallels Desktop v8) aufgrund der BIOS-Startmeldung nur ein BIOS (nicht UEFI) hat.
Pro Backup
0

Ich hatte das gleiche problem Was Alex gesagt hat, ist richtig. Zuerst habe ich meine fstab angepasst, aber das hat nicht geholfen. Also habe ich meine Made überprüft. Wenn Sie die Möglichkeit haben, auf das Menü zuzugreifen.

  • Wählen Sie das Linux aus, was Sie starten möchten und was Probleme macht.
  • Drücken Sie 'e' und suchen Sie nach 'boot_image' oder 'boot ... root'.
  • Überprüfen Sie die ' uuid '.
  • In meinem Fall war es falsch. Ich mache ein Bild in initramfs, indem ich 'blkid' eingebe und die UUID nehme, auf welcher Partition mein Linux installiert ist.
  • Hinter der korrekten UUID von BLKID zu Grub -> boot_image.

Das hat mein Problem gelöst. Nach dem Neustart benötigte mein Linux längere Zeit, um die Festplatte zu überprüfen. Aber jetzt klappt es wieder.

Ich hoffe, ich konnte dir helfen.

Grüße

Abe Nudel
quelle