
Mir ist bewusst, dass es bereits mehrere Fragen von Leuten gibt, die bereits Probleme beim Booten hatten, aber ich glaube, meiner ist ein ziemlich spezieller Fall. Daher stelle ich noch eine weitere Frage in der Hoffnung, einige neue Probleme anzusprechen.
Ich habe den Startvorgang einer VM repariert, die einen initramfs
( initrd.img
und vmlinuz
Dateien darin /boot
) von nicht mehr installierten Kerneln hatte, und habe versucht, weiterhin von ihnen zu starten.
Ich bin fast fertig, aber es startet immer wieder in systemd
's neu emergency mode
(wo es heißt:)
You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" or "exit" to boot into default mode.
Give root password for maintenance
(or press Control-D to continue):
Ich habe von einer Live-CD gebootet, die drei entsprechenden Partitionen auf gemountet /mnt
und per Chroot auf Folgendes umgeleitet /mnt
:
mount /dev/sda3 /mnt
mount /dev/sda2 /mnt/boot
mount /dev/sda1 /mnt/boot/efi
for i in proc dev dev/pts sys tmp run; do mount --bind /$i /mnt/$i; done
chroot /mnt
Habe meine Reparaturen durchgeführt und einen Neustart durchgeführt.
Jetzt fstab
mountet mein meine Partitionen nicht. Ich dachte, es wäre richtig konfiguriert – UUIDs werden direkt von kopiert blkid | grep /dev/sda
. Ich dachte nicht, dass etwas fehlt.
Hier sind die Fehler, die mir direkt vor der Eingabeaufforderung für den Notfallmodus angezeigt werden:
[FAILED] Failed to mount /boot
See 'systemctl status boot.mount' for details.
[DEPEND] Dependency failed for Local File Systems
[DEPEND] Dependency failed for Unattended Upgrades Shutdown
[DEPEND] Dependency failed for /boot/efi
Also habe ich mir natürlich angesehen systemctl status boot.mount
, aber es ist aktiv (grün) und zeigt an, dass es geladen ist, obwohl mein /boot
Ordner leer ist, sofern ich es nicht manuell mounte /dev/sda2
.
Scheint sehr seltsam. Warum wird boot.mount
gesagt, dass die Partition geladen wird /boot
, wenn dies eindeutig nicht der Fall ist?
Antwort1
Ich habe das Problem also tatsächlich herausgefunden, während ich die Frage geschrieben habe. Wie Sie aus dem, was ich am Anfang geschrieben habe, ersehen können, war es ein sehr langer Prozess (ich hatte etwa 2 Tage daran gearbeitet, bevor ich an den Punkt kam, an dem ich um Hilfe bitten wollte).
Wenn Sie sich das Ende der Frage ansehen, sehen Sie, dass ich dmesg
während des Bootvorgangs diese Meldung erhalten habe:
[FAILED] Failed to mount /boot
See 'systemctl status boot.mount' for details.
Also habe ich natürlich versucht, systemctl status boot.mount
nachzuschauen, was da steht, aber da stand „ boot.mount
ist aktiv (grün), es ist geladen und funktioniert ordnungsgemäß“, obwohl /boot
es leer war, sofern ich es nicht manuell gemountet habe /dev/sda2
(was genau das Gegenteil von dem ist, was ich erwarten würde).
Also begann ich zu denken, dass etwas mit dem Dienst nicht stimmte. Ich habe ihn deaktiviert, boot.mount
obwohl ersagtees hat einwandfrei funktioniert:
systemctl disable --now boot.mount
Ich habe versucht, es wieder zu aktivieren, aber es ist eine Fehlermeldung aufgetreten:
systemctl enable --now boot.mount
Failed to enable unit: Unit /run/systemd/generator/boot.mount is transient or generated
OK, das macht Sinn, es wird durch den Bootvorgang ausgelöst und kann nicht durch einen Benutzerbefehl aufgerufen werden. Also habe ich versucht, alle Geräte erneut zu mounten mit:
mount -a
Und sah, dass die Datei einen Fehler enthielt /etc/fstab
:
error: rw,relatime is not a valid file system
(oder so ähnlich).
Der Schlüssel hier ist, wenn ich nicht versucht hätte, das Dateisystem manuell zu mounten, hätte ich dieses Feedback nie erhalten. Die Fehlermeldung, die mount -a
man erhält, wenn fstab
sie eine falsche Syntax enthält, ist unglaublich hilfreich. Viel hilfreicher als:
[FAILED] Failed to mount /boot
See 'systemctl status boot.mount' for details.
... und dann wird eine „funktionierende“ systemd-Einheit angezeigt, boot.mount
wenn /boot
sie nicht gemountet wird (obwohl sietatbring mich schließlich an den richtigen Ort).
Also habe ich die bearbeitet fstab
und die Dateisysteminformationen für die /boot
Partition eingegeben, die nicht gemountet werden konnte. Dann habe ich sie erneut ausgeführt mount -a
(was im Wesentlichen dasselbe bewirkt wie boot.mount
) und eine positive Antwort erhalten.
Jetzt werden die beiden Partitionen nach einem Neustart ordnungsgemäß gemountet und alles ist gut im Land von Meerrettich und Marmelade.
Wenn hierdurch keines Ihrer Probleme behoben wird, finden Sie hier einige zusätzliche Hinweise zu dem Prozess, den ich durchlaufen habe, bevor ich zu dem oben genannten Punkt gelangte, an dem ich nach Hilfe suchte (Sie können ruhig mit dem Lesen aufhören, wenn Sie bei Ihrem Problem angekommen sind):
Das ursprüngliche Problem, das ich vor zwei Tagen hatte, war, dass das System versuchte, von Kerneln zu booten, die nicht mehr auf dem System vorhanden waren. Nachdem ich mit der Live-CD gebootet hatte, löschte ich den Inhalt des Ordners (in dem sich /boot
alle Dateien befinden).initrd
initramfs
Ich dachte, ich würde einfach die using -Dateien aus den aktuell installierten Kerneln neu erstellen , aber dann stellte ich fest, dass ich die oder -Dateien update-initramfs -c -k all
nicht allein mit neu erstellen konnte . Dies erwies sich als etwas problematischer, als ich erwartet hatte.config
System.map
depmod
Der einfachste Weg, alle diese Dateien neu zu generieren oder abzurufen, ist meiner Meinung nach:
- lösche den gesamten Inhalt von
/boot
, - Deinstallieren Sie alle Dateien
linux-image
,linux-header
dielinux-modules
ich nicht verwenden wollte. - Löschen Sie alle restlichen Verzeichnisse in
/usr/lib/modules
und dann - Neuinstallation und Dateien
linux-image
, die ich verwenden wollte (die aktuellsten zwei generischen Versionen)linux-modules
linux-headers
Hinweis: Die Neuinstallation dieser 3 Dateitypenalles zur selben ZeitSo habe ich es geschafft, die Dateien /boot/System.map
und wiederherzustellen - vorher hat es nicht geholfen, /boot/config
die Dateien einfach neu zu installieren . Es ist möglich, dass sie in (Module wären sinnvoll) oder Paketen enthalten sind, aber so hat es bei mir funktioniert.linux-image
modules
headers
- Anschließend habe ich
update-grub
die Dateien neu installiert und bestätigt, dass/boot
sie richtig ausgefüllt wurden. - Ich habe auch
bootctl install
und ausgeführt/etc/kernel/postinst.d/zz-udpate-systemd-boot
, daher hätte ichsystemd-boot
es als Fallback installiert.
An einem Punkt nach einem Neustart musste ich die Konfiguration system.target
auf multi-user.target
anstelle von ändern graphical.target
, wahrscheinlich, weil ich vor ein paar Tagen chroot
alle diese Mounts auf einer grafischen Live-CD verwendet hatte, um das boot-repair
Programm auszuführen, wofür Grafiken erforderlich sind (und die, glaube ich, /dev/pts
/tmp
zum Funktionieren /run
benötigt wurden display :0.0
):
systemctl set-default multi-user.target
Ok, das ist alles. Hoffe, das hilft jemandem.