Zoeken op website

Hoe u opstartproblemen in Linux kunt vaststellen en oplossen


Het Linux-systeem start zo snel op dat het grootste deel van de uitvoer te snel voorbij scrollt om de tekst (die laat zien dat services worden gestart) te lezen die naar de console wordt verzonden. Daarom wordt het observeren van opstartproblemen/fouten een kleine uitdaging voor ons.

In dit artikel zullen we kort de verschillende stadia van het opstartproces van een Linux-systeem uitleggen, en vervolgens leren hoe we opstartproblemen kunnen vaststellen en tot op de bodem uitzoeken: in termen van bestanden om in te kijken of opdrachten om opstartberichten van het systeem te bekijken.

Samenvatting van het Linux-opstartproces

Samenvattend: zodra we op de Power On-knop drukken, voert het BIOS (Basic Input Output System), een programma dat in een moederbord is geïntegreerd, een >POST (Zelftest bij inschakelen) – waar hardware zoals schijven, RAM (Random Access Memory), toetsenbord, enz. wordt gescand. Bij een fout (ontbrekende/defecte hardware) wordt dit op het scherm gemeld.

Tijdens POST zoekt het BIOS ook naar het opstartapparaat, de schijf waarvan moet worden opgestart (meestal de eerste harde schijf, maar we kunnen deze ook configureren als een dvd, USB , Netwerkkaart enz.).

Vervolgens maakt het systeem verbinding met de schijf en zoekt naar het Master Boot Record (512 bytes groot) waarin de bootloader (446 bytes groot) is opgeslagen en in de rest van de ruimte wordt informatie over schijfpartities opgeslagen. (maximaal vier) en de MBR zelf.

Voorgesteld lezen: 4 beste Linux-bootloaders

De bootloader zal de Kernel en het initrd-bestand identificeren en ernaar verwijzen, en deze ook laden (initialisatie ramschijf – biedt de kernel toegang tot het aangekoppelde rootbestandssysteem en modules/stuurprogramma's opgeslagen in / lib directory), die over het algemeen worden opgeslagen in de /boot directory van het bestandssysteem.

Nadat de kernel is geladen, voert deze init uit (of systemd op nieuwere Linux-distributies), het eerste proces met PID 1, dat op zijn beurt alle andere processen op het systeem start. Het is ook het laatste proces dat wordt uitgevoerd bij het afsluiten van het systeem.

Hoe u Linux-opstartproblemen of foutmeldingen kunt achterhalen

Zoals we eerder vermeldden, verlopen de Linux-opstartprocessen snel, zodat we de meeste uitvoer die naar de console wordt verzonden niet eens duidelijk kunnen lezen.

Dus het noteren van opstartproblemen/fouten vereist dat een systeembeheerder bepaalde belangrijke bestanden bekijkt in combinatie met bepaalde opdrachten. En deze omvatten:

/var/log/boot.log – Registreert systeemopstartberichten

Dit is waarschijnlijk het eerste bestand waar u naar wilt kijken, om alles te bekijken wat zich tijdens het opstarten van het systeem ontvouwde.

In plaats van zo hard te proberen de uitvoer op het scherm te volgen tijdens het opstarten, kunnen we dit bestand bekijken nadat het opstartproces is voltooid om ons te helpen bij het vaststellen en oplossen van opstartproblemen/fouten.

We gebruiken daarvoor het cat-commando als volgt (hieronder vindt u een voorbeeld van dit bestand):

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...
......

Uit de bovenstaande uitvoer kunnen we zien dat er opstartproblemen zijn, aangegeven door de onderstaande regels.

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

Probleem: probleem met de swappartitie; het systeem is er niet in geslaagd het wisselbestand/apparaat/partitie te lezen of het is niet aanwezig.

Laten we controleren of het systeem swapruimte gebruikt met een gratis opdracht.

free

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

Als alternatief kunnen we de opdracht swapon uitvoeren om het overzicht van het gebruik van de systeemwisselruimte te bekijken (we krijgen geen uitvoer).

swapon -s

We kunnen dit probleem oplossen door een swapruimte in Linux te creëren.

Opmerking: De inhoud van dit bestand wordt gewist bij het afsluiten van het systeem: nieuwe gegevens worden erin opgeslagen bij een nieuwe start.

/var/log/messages – Algemene systeemlogboeken

In dit bestand worden algemene systeemberichten opgeslagen, inclusief de berichten die worden geregistreerd tijdens het opstarten van het systeem.

Om het te bekijken, typt u:

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]
.....

Omdat dit bestand relatief lang kan zijn, kunnen we het op pagina's bekijken met behulp van de opdracht more (die zelfs een percentage weergeeft), zoals deze.

more /var/log/messages

De inhoud van /var/log/messages wordt, in tegenstelling tot het vorige bestand, niet gewist bij afsluiten, omdat het niet alleen opstartberichten bevat, maar ook berichten over andere systeemactiviteiten. Oudere bestanden worden dus gecomprimeerd en op het systeem bewaard voor latere inspectie, zoals hieronder weergegeven.

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 – Toont kernelberichten

De opdracht dmesg kan bewerkingen weergeven zodra het opstartproces is voltooid, zoals opdrachtregelopties die aan de kernel worden doorgegeven; gedetecteerde hardwarecomponenten, gebeurtenissen wanneer een nieuw USB-apparaat wordt toegevoegd, of fouten zoals een NIC-fout (Network Interface Card) en de stuurprogramma's melden dat er geen linkactiviteit is gedetecteerd op het netwerk en nog veel meer.

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 – Query-inhoud van Systemd Journal

Dit is handig in de meeste huidige Linux-distributies die systemd gebruiken: de nieuwste systeem- en servicemanager. Daaronder vindt systeemregistratie plaats via de journaalcomponent – een gecentraliseerde locatie voor alle berichten die door verschillende componenten zijn geregistreerd.

Deze berichten omvatten kernel- en opstartberichten; berichten van syslog of verschillende services. We kunnen het gebruiken om opstartberichten te beoordelen en opstartproblemen vast te stellen door de uitvoer te lezen en interessante regels te identificeren (fouten aangegeven door rode lijnen, afhankelijk van de kleurinstellingen van de terminaltekst).

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.

Het bovenstaande is een voorbeeld van de opdrachtuitvoer die een fout laat zien die we al hebben geïdentificeerd door /var/log/boot.log te bekijken: de swappartitiefout. Om meer uitvoerregels te bekijken, drukt u eenvoudigweg op de knop [Enter].

Bekijk ook deze handige handleidingen over het opstarten van Linux-systemen en servicebeheer in relatie tot algemene systeem- en servicemanagers:

  1. Procesbeheer in RHEL 7: opstarten, afsluiten en alles daartussenin
  2. Systeemopstartproces en -services beheren (SysVinit, Systemd en Upstart)
  3. Het verhaal achter ‘init’ en ‘systemd’: waarom ‘init’ vervangen moest worden door ‘systemd’

In dit artikel hebben we in het kort de verschillende fasen van het opstartproces van het Linux-systeem uitgelegd en hebben we geleerd hoe je opstartproblemen kunt vaststellen en mogelijk oplossen. Gebruik het onderstaande opmerkingenformulier om iets aan deze handleiding toe te voegen.