it-swarm.com.de

Grub kann nicht wiederhergestellt werden, da vmlinuz und intrd.img fehlen

Ich hatte eine dedizierte Grub-Partition, als ich versuchte, this Problem zu diagnostizieren, entschied ich mich, die Standardpartition auf das Ubuntu-System zu ändern.

Aber es hat nicht funktioniert. Also habe ich von der Live-CD gebootet, die alte Boot-Partition formatiert und eine Neuinstallation von grub durchgeführt. Ich habe grub.cfg kopiert und gedacht, es würde ausreichen, um das System zu booten.

Aber ich habe mich geirrt, jetzt bin ich Grub-Menü, das auftaucht, aber was ich nicht wusste, war vmlinuz und intrd.img wird auch benötigt, um ein System zu booten.

Welches ist kein wo? Wie kann ich aus diesem blöden Problem herauskommen?

2
Starx

Es tut mir leid zu hören, dass Sie neu installieren mussten ... aber für zukünftige Leser dieser Frage ist hier meine Antwort.

Die Ursache in meinem Fall:

Ich habe mit meinem Stiefel rumgespielt ... dachte, ich hätte das bestätigt mit:

# cd /
# tar czf boot.tgz boot

Dann meine Bootpartition gelöscht und neu formatiert. Dann wollte ich die Dateien zurücksetzen, aber es gab keine boot.tgz: /

# file /initrd.img  /vmlinuz 
/initrd.img: broken symbolic link to `/boot/initrd.img-3.2.0-23-generic'
/vmlinuz:    broken symbolic link to `boot/vmlinuz-3.2.0-23-generic

Also hatte ich das gleiche Problem wie du.

nd die Lösung:

Installieren Sie das initramfs-Zeug neu (das die initramfs-Datei in/boot generiert; nicht sicher, welches davon das wichtigste ist, also habe ich alles getan, war schnell):

# aptitude reinstall grub2-common grub-pc-bin grub-gfxpayload-lists grub-common

Um die Liste der Pakete für meinen obigen Befehl zu erhalten, habe ich Folgendes ausgeführt:

# aptitude search grub | grep -E "^i"

Installieren Sie das Kernel-Zeug neu (wodurch der Kernel in/boot verschoben wird; dies dauert lange; verwenden Sie zuerst die Suche, um den richtigen Paketnamen zu finden):

# aptitude reinstall linux-image-3.2.0-23-generic

Die Links waren nicht mehr kaputt. :)

# file /initrd.img  /vmlinuz 
/initrd.img: symbolic link to `/boot/initrd.img-3.2.0-23-generic'
/vmlinuz:    symbolic link to `boot/vmlinuz-3.2.0-23-generic'

Um den Fehler "cat: /boot/grub/video.lst: Keine solche Datei oder kein solches Verzeichnis" beim Ausführen von update-grub zu vermeiden, habe ich grub-install ausgeführt. (Ich musste auf mehreren Festplatten laufen, da ich raid verwende):

grub-install /dev/sda
grub-install /dev/sdb
...

Dann nur um sicher zu gehen ... update-grub nochmal (was die Neuinstallation von grub auch hätte tun sollen, aber video.lst nicht hatte und vielleicht die Kernel-Datei oder andere auch brauchte):

# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
done

Zum Abschluss stelle ich sicher, dass mein Boot und meine fstab korrekt sind:

# umount /boot
# mount -a
# ls /boot
abi-3.2.0-23-generic  config-3.2.0-23-generic  grub  initrd.img-3.2.0-23-generic  lost+found  System.map-3.2.0-23-generic  vmlinuz-3.2.0-23-generic

(Keine Ahnung, was abi-3.2.0-23-generic ist. Ich hatte diese Datei vorher nicht)

Und generieren Sie das initramfs erneut für den Fall, dass es einige relevante Fehlermeldungen generiert (ersetzen Sie den Dateinamen durch den richtigen auf Ihrem System).

# mkinitramfs -o /boot/initrd.img-3.2.0-23-generic
(no output if it works)

Zum Beispiel, bevor ich meinen Boot repariert und meine mdadm.conf-Datei eingerichtet habe, würde ich folgende Meldung erhalten:

grep: /boot/config-3.2.0-23-generic: No such file or directory
W: mdadm: the array /dev/md0 with UUID 656eb2a6:21526b55:a6f1834a:d3cc95e4
W: mdadm: is currently active, but it is not listed in mdadm.conf. if
W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare
W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes.

Danach habe ich den Boot getestet und es hat funktioniert. :)

nd ein paar grundlegende Hintergrundinformationen ... das ist alles, was nötig ist, um die obige Lösung zusammenzustellen:

  • Grub muss im MBR installiert werden, um dem BIOS mitzuteilen, was gebootet werden soll. (erstellt mit grub-install)
  • Der MBR verweist auf den mit grub-install erstellten Grub-Boot-Code auf der Festplatte außerhalb der Partitionen. (In meinem Fall mit GPT ist dies eine bios_grub-Partition).
  • Dann findet dieser Boot-Code/boot, um die Datei grub.cfg zu laden. (erstellt mit grub-mkconfig -o oder update-grub, wodurch auch andere wichtige Dateien erstellt werden)
  • Wenn Sie eine Boot-Option auswählen, ist grub weg und wird durch den Linux-Kernel (vmlinuz) ersetzt. Der Kernel beginnt mit der initramfs-Datei (erstellt mit mkinitramfs), die meiner Meinung nach einige Informationen über das System enthält (raid, lvm usw. mit einigen uuids von Partitionen oder raid/lvm-Volumes) und auch die Module, die Sie benötigen (ext3, ext4) , lvm, raid, etc.).
  • irgendwann wird das reguläre System gemountet und Ihr rc.d-Zeug übernimmt

Deshalb brauchen Sie all diese Dateien.

5
Peter

Wenn das, was Sie sagen, zutrifft, kann der Neuaufbau Ihres Systems mehr Probleme bereiten, als es wert ist. Sie könnten versuchen, den Kernel erneut zu installieren, wodurch auch grub auf der Festplatte aktualisiert werden sollte. Da Sie jedoch die alte Datei grub.cfg überschrieben haben, funktioniert dies möglicherweise nicht einmal. Um zu beginnen, müssen Sie Ihre Festplatte vom Live-Installationsprogramm aus chrooten und dann apt-get install --reinstall die zuletzt verwendete Kernel-Version. Der Rest liegt ganz bei Ihnen, das ist ein ziemliches Durcheinander, das Sie sich selbst angetan haben. Sie können dies zum Anlass nehmen, mehr darüber zu erfahren, wie die Distribution hochfährt und repariert, oder Sie können Ihre Daten sichern und von vorne beginnen. Viel Glück.

0
ppetraki