Website-Suche

So ermitteln und beheben Sie Boot-Probleme unter Linux


Das Linux-System bootet so schnell, dass die meisten Ausgaben zu schnell vorbeilaufen, um den an die Konsole gesendeten Text (der die gestarteten Dienste anzeigt) lesen zu können. Daher wird die Beobachtung von Boot-Problemen/-Fehlern für uns zu einer kleinen Herausforderung.

In diesem Artikel erklären wir kurz die verschiedenen Phasen eines Linux-Systemstartvorgangs und erfahren dann, wie Sie Bootprobleme feststellen und auf den Grund gehen: in Bezug auf zu untersuchende Dateien oder Befehle zum Anzeigen von Systemstartmeldungen.

Zusammenfassung des Linux-Boot-Prozesses

Zusammenfassend führt das BIOS (Basic Input Output System), ein in einem Motherboard integriertes Programm, sobald wir die Einschalttaste drücken, eine Aktion aus >POST (Power on Self Test) – wobei Hardware wie Festplatten, RAM (Random Access Memory), Tastatur usw. gescannt werden. Im Falle eines Fehlers (fehlende/defekte Hardware) wird dieser auf dem Bildschirm angezeigt.

Während des POST sucht das BIOS auch nach dem Startgerät, der Festplatte, von der aus gestartet werden soll (normalerweise die erste Festplatte, wir können sie jedoch auch als DVD oder USB konfigurieren). , Netzwerkkarte usw.).

Dann stellt das System eine Verbindung zur Festplatte her und sucht nach dem Master Boot Record (512 Byte groß), der den Bootloader (446 Byte groß) speichert, und der Rest des Speicherplatzes speichert Informationen über Festplattenpartitionen (maximal vier) und der MBR selbst.

Empfohlene Lektüre: Die 4 besten Linux-Bootloader

Der Bootloader identifiziert und verweist auf den Kernel und die initrd-Datei (Initialisierungs-RAM-Disk – bietet dem Kernel Zugriff auf das gemountete Root-Dateisystem und die Module/Treiber, die in / gespeichert sind). lib-Verzeichnis), die im Allgemeinen im /boot-Verzeichnis des Dateisystems gespeichert sind.

Nachdem der Kernel geladen wurde, führt er init (oder systemd auf neueren Linux-Distributionen) aus, den ersten Prozess mit PID 1, der wiederum alle anderen Prozesse auf dem System startet. Es ist auch der letzte Prozess, der beim Herunterfahren des Systems ausgeführt wird.

So finden Sie Linux-Boot-Probleme oder Fehlermeldungen heraus

Wie bereits erwähnt, laufen die Linux-Startvorgänge so schnell ab, dass wir die meisten an die Konsole gesendeten Ausgaben nicht einmal klar lesen können.

Um also Boot-Probleme/-Fehler zur Kenntnis zu nehmen, muss ein Systemadministrator bestimmte wichtige Dateien in Verbindung mit bestimmten Befehlen untersuchen. Und dazu gehören:

/var/log/boot.log – Protokolliert Systemstartmeldungen

Dies ist wahrscheinlich die erste Datei, die Sie sich ansehen möchten, um alles zu sehen, was sich während des Systemstarts abspielt.

Anstatt uns so sehr darum zu bemühen, die Ausgabe auf dem Bildschirm während des Startvorgangs zu verfolgen, können wir diese Datei nach Abschluss des Startvorgangs anzeigen, um uns bei der Ermittlung und Behebung von Startproblemen/-fehlern zu helfen.

Zu diesem Zweck verwenden wir den Befehl cat wie folgt (unten ist ein Beispiel dieser Datei):

cat /var/log/boot.log
[  OK  ] Started Load/Save RF Kill Switch Status.
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.device.
[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.
[  OK  ] Reached target System Initialization.
[  OK  ] Listening on UUID daemon activation socket.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Listening on CUPS Scheduler.
[  OK  ] Started Daily apt activities.
[  OK  ] Reached target Timers.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Started ACPI Events Check.
[  OK  ] Started Trigger resolvconf update for networkd DNS.
[  OK  ] Started CUPS Scheduler.
[  OK  ] Reached target Paths.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on ACPID Listen Socket.
         Starting Console System Startup Logging...
[  OK  ] Listening on Cockpit Web Service Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting LSB: Set the CPU Frequency Scaling governor to "ondemand"...
[  OK  ] Started ACPI event daemon.
[  OK  ] Started mintsystem.service.
         Starting Detect the available GPUs and deal with any system changes...
         Starting LSB: daemon to balance interrupts for SMP systems...
         Starting Bluetooth service...
[  OK  ] Started ClamAV virus database updater.
         Starting LSB: Starts syslogd...
[  OK  ] Started Regular background program processing daemon.
         Starting Modem Manager...
         Starting Accounts Service...
......

Anhand der obigen Ausgabe können wir erkennen, dass es Bootprobleme gibt, die durch die folgenden Zeilen angezeigt werden.

[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.

Problem: Problem mit der Swap-Partition; Das System konnte die Auslagerungsdatei/das Auslagerungsgerät/die Auslagerungspartition entweder nicht lesen oder sie ist nicht vorhanden.

Lassen Sie uns mit dem Befehl „free“ überprüfen, ob das System Swap Space verwendet.

free

total        used        free      shared  buff/cache   available
Mem:        3742792     2421060      433696      287376      888036      967000
Swap:             0           0           0

Alternativ können wir den swapon-Befehl ausführen, um die Zusammenfassung der System-Swap-Space-Nutzung anzuzeigen (wir erhalten keine Ausgabe).

swapon -s

Wir können dieses Problem lösen, indem wir unter Linux einen Swap-Space erstellen.

Hinweis: Der Inhalt dieser Datei wird beim Herunterfahren des Systems gelöscht: Bei einem neuen Start werden neue Daten darin gespeichert.

/var/log/messages – Allgemeine Systemprotokolle

In dieser Datei werden allgemeine Systemmeldungen gespeichert, einschließlich der Meldungen, die während des Systemstarts protokolliert werden.

Um es anzuzeigen, geben Sie Folgendes ein:

cat /var/log/messages
Jun  4 13:04:44 tecmint syslogd (GNU inetutils 1.9.4): restart
Jun  4 13:19:55 tecmint -- MARK --
Jun  4 13:39:55 tecmint -- MARK --
Jun  4 13:59:55 tecmint -- MARK --
Jun  4 14:19:55 tecmint -- MARK --
Jun  4 14:20:17 tecmint vmunix: [ 4945.388740] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388837] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388903] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388930] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389334] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389402] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0xdfa00000-0xdfbfffff 64bit pref]
.....

Da diese Datei relativ lang sein kann, können wir sie in Seiten anzeigen, indem wir den Befehl more (der sogar einen Prozentsatz anzeigt) wie folgt verwenden.

more /var/log/messages

Der Inhalt von /var/log/messages wird im Gegensatz zur vorherigen Datei beim Herunterfahren nicht gelöscht, da er nicht nur Startmeldungen, sondern auch Meldungen zu anderen Systemaktivitäten enthält. Daher werden ältere Dateien komprimiert und zur späteren Überprüfung auf dem System gespeichert, wie unten gezeigt.

ls -l message*

-rw-r--r-- 1 root root 1206127 Jun 10 14:20 messages
-rw-r--r-- 1 root root 1419494 Jun  4 13:00 messages.1
-rw-r--r-- 1 root root  153011 May 28 09:30 messages.2.gz

dmesg – Zeigt Kernel-Nachrichten an

Der Befehl dmesg kann Vorgänge anzeigen, sobald der Startvorgang abgeschlossen ist, z. B. Befehlszeilenoptionen, die an den Kernel übergeben werden. Erkannte Hardwarekomponenten, Ereignisse beim Hinzufügen eines neuen USB-Geräts oder Fehler wie ein NIC-Fehler (Netzwerkschnittstellenkarte), die Treiber melden keine erkannte Verbindungsaktivität im Netzwerk und vieles mehr.

dmesg
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=57b36d48-1938-43c2-bf85-e97bc9f423ea ro quiet splash
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000008ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000090000-0x00000000000bffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040005000-0x0000000080b2ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000080b30000-0x0000000080d31fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000080d32000-0x00000000ce3eefff] usable
[    0.000000] BIOS-e820: [mem 0x00000000ce3ef000-0x00000000ce5eefff] type 20
[    0.000000] BIOS-e820: [mem 0x00000000ce5ef000-0x00000000daeeefff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000daeef000-0x00000000daf9efff] ACPI NVS
....

journalctl – Inhalte des Systemd-Journals abfragen

Dies ist in den meisten aktuellen Linux-Distributionen nützlich, die systemd verwenden: den neuesten System- und Dienstmanager. Darunter erfolgt die Systemprotokollierung über die Journalkomponente – ein zentraler Ort für alle von verschiedenen Komponenten protokollierten Nachrichten.

Zu diesen Meldungen gehören Kernel- und Boot-Meldungen; Meldungen von Syslog oder verschiedenen Diensten. Wir können damit Boot-Meldungen überprüfen und Boot-Probleme feststellen, indem wir die Ausgabe durchlesen und interessante Zeilen identifizieren (Fehler, die je nach Textfarbeinstellungen des Terminals durch rote Linien hervorgehoben werden).

journalctl
Jun 13 16:35:32 tecmint mtp-probe[963]: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/u
Jun 13 16:35:32 tecmint mtp-probe[963]: bus: 2, device: 5 was not an MTP device
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c2
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for Swap.
Jun 13 16:35:54 tecmint systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Reached target System Initialization.
Jun 13 16:35:54 tecmint systemd[1]: Started ACPI Events Check.
Jun 13 16:35:54 tecmint systemd[1]: Listening on CUPS Scheduler.
Jun 13 16:35:54 tecmint systemd[1]: Starting Console System Startup Logging...
Jun 13 16:35:54 tecmint systemd[1]: Started Daily Cleanup of Temporary Directories.

Das Obige ist ein Beispiel der Befehlsausgabe, die einen Fehler zeigt, den wir bereits beim Anzeigen von /var/log/boot.log identifiziert haben: den Swap-Partitionsfehler. Um weitere Ausgabezeilen anzuzeigen, drücken Sie einfach die [Enter]-Taste.

Schauen Sie sich auch diese nützlichen Leitfäden zum Boot- und Dienstmanagement von Linux-Systemen im Vergleich zu gängigen System- und Dienstmanagern an:

  1. Prozessmanagement in RHEL 7: Booten, Herunterfahren und alles dazwischen
  2. Verwalten des Systemstartprozesses und der Dienste (SysVinit, Systemd und Upstart)
  3. Die Geschichte hinter „init“ und „systemd“: Warum „init“ durch „systemd“ ersetzt werden musste

In diesem Artikel haben wir kurz die verschiedenen Phasen des Linux-Systemstartvorgangs erklärt und erfahren, wie man Startprobleme erkennt und möglicherweise löst. Wenn Sie diesem Leitfaden einen Gedanken hinzufügen möchten, verwenden Sie das Kommentarformular unten.