Wie lösche ich gelöschte Dateien in / boot? (vmlinuz fehlt, System bootet nicht)

7

Ich habe versehentlich eine der vmlinuzDateien in meinem /bootVerzeichnis gelöscht . Allerdings habe ich ein Backup von /bootinnen gemacht /tmp, nur um sicherzugehen.

Folglich kann ich nicht booten, da der fehlende vmlinuz-Dateifehler angezeigt wird. Also habe ich über einen Live-USB-Stick gestartet, aber als ich /bootauf meiner Festplatte (sda5) in das Verzeichnis kam, ist es komplett leer. Wenn ich die Dateien /tmp/bootin dieses /bootVerzeichnis kopiere , kann ich immer noch nicht booten.

Wie kann ich diese Dateien im entsprechenden Verzeichnis wiederherstellen?

NVaughan
quelle
1
Sogar dieser ältere Beitrag stellte eine ähnliche Frage. In seiner Antwort wurde nur erklärt, wie die Pakete neu installiert werden, um die Startdateien wiederherzustellen, ohne die chrootSchritte zu erläutern , da das OP dort wusste, wie es selbst zu tun ist. Im Gegensatz dazu wird in der aktuellen Frage explizit gefragt, wie Startdateien wiederhergestellt werden sollen, z. B. mithilfe von Live USB. Die Antwort sollte Schritte enthalten chroot. Daher sehe ich diese Frage als einzigartig an und habe mit +1 gestimmt.
Clearkimura

Antworten:

10

vmlinuz ist das Linux-Kernel-Image selbst (das z zeigt an, dass es komprimiert ist).

Die Neuinstallation des Kernel-Pakets, auf das derzeit von Linux-Image-Generic (oder Ihrem HWE-Kernel ) und wahrscheinlich Linux-Singed-Image-Generic in sicheren UEFI-Boot-Umgebungen verwiesen wird, sollte Ihr Problem lösen.

Neuinstallation eines Kernels aus einer Chroot

Starten Sie vorzugsweise Live-Medien derselben Version und mounten Sie die Partition Ihrer Installation (Sie können dies mit Nautilus tun, es wird ungefähr /media/ubuntu/…so sein) oder Ihre /bootPartition (dies wird etwas komplexer sein). Dies wird ${my_installation}in den folgenden Anweisungen beschrieben.

Suchen Sie in /lib/modules/Ihrer Installation ( ${my_installation}/lib/modules/) nach den bestimmten Kernelversionen, die installiert wurden, und wählen Sie die neueste Versionsnummer aus, ${kernel_ver}auf die Sie verweisen können. In meiner Test-VM war dies 3.16.0-46.

Wie ich bereits in einem Kommentar erwähnt habe, ist das Verfahren der Neuinstallation von Grub in chroot sehr ähnlich. Lassen Sie mich diese Antwort mit einigen geringfügigen Änderungen zitieren :

  1. Binden Sie ein paar andere notwendige Dinge zusammen:

    for i in /sys /proc /run /dev; do sudo mount --bind "$i" "${my_installation}$i"; done
    
  2. chroot in Ihre Ubuntu-Installation:

    sudo chroot ${my_installation}
    
  3. Zu diesem Zeitpunkt befinden Sie sich in Ihrer Installation, nicht in der Live-Sitzung, und werden als Root ausgeführt. …

Installieren Sie nun Ihren Kernel neu (das signedPaket ist für den sicheren UEFI-Start vorgesehen):

apt-get install --reinstall linux-image-${kernel_ver}-generic linux-signed-image-${kernel_ver}-generic

Überprüfen Sie das /bootVerzeichnis, ob das initrdfür diesen Kernel noch fehlt. So generieren Sie es manuell:

mkinitramfs -o /boot/initrd.img-${kernel_ver}-generic ${kernel_ver}-generic

Mein Beispiel:

mkinitramfs -o /boot/initrd.img-3.16.0-46-generic 3.16.0-46-generic

Führen Sie dann update-grubwie in der angegebenen Antwort ausgeführt aus, damit Sie sicher sein können, dass der "neue" Kernel und initrd enthalten sind.

Wenn Sie Grub ebenfalls neu installieren müssen, können Sie die verbleibenden Schritte ausführen. Denken Sie daran, dass diese Anweisungen für MBR geschrieben wurden. Wenn Sie über UEFI verfügen (bei dem sich Bootloader von verschiedenen Betriebssystemen nicht gegenseitig überschreiben sollten), müssen Sie grub-efi-amd64-binvor der Neuinstallation von Grub überprüfen, ob die Installation installiert ist.


LiveWireBT
quelle
1
Aber ich kann das nicht von einem USB-Live-Image aus machen, oder?
NVaughan
1
Hoppla, Sie haben Recht, aber es sollte genauso möglich sein, Grub über chroot neu zu installieren, nur dass Sie etwas anderes installieren. Die Live-Image-Version muss zu Ihrer Installation passen.
LiveWireBT
@clearkimura Okay, habe es gerade in einer VM reproduziert und meine Antwort aktualisiert.
LiveWireBT
@NVaughan Die Antwort wurde aktualisiert. Befolgen Sie also die Schritte und das Feedback, LiveWireBTob dies jetzt für Sie funktioniert.
Clearkimura
Hallo, ich erhalte eine Fehlermeldung, wenn ich versuche, apt-get install zu installieren ... Fehler ist: Kann nicht 'usr / share / syslinux / theme / debian-wheezy / extlinux / memtest.bin' angeben. Keine solche Datei oder kein solches Verzeichnis konnte nicht verarbeitet werden /etc/kernal/postrm.d
Paul Preibisch