Sådan bestemmes og løses opstartsproblemer i Linux


Linux-systemet starter så hurtigt, at det meste af output ruller for hurtigt for at læse teksten (der vises tjenester startet) sendt til konsollen. Derfor bliver det lidt af en udfordring for os at observere opstartsproblemer/-fejl.

I denne artikel vil vi kort forklare de forskellige faser i en Linux-systemstartproces og derefter lære at etablere og komme til bunden af opstartsproblemer: i form af filer at se på eller kommandoer til at se systemstartmeddelelser.

Resumé af Linux Boot Process

Sammenfattende, når vi først har trykket på tænd/sluk-knappen, udfører BIOS (Basic Input Output System) et program integreret i et bundkort en POST (Power on Self Test) - hvor hardware såsom diske, RAM (Random Access Memory), tastatur, osv. scannes. I tilfælde af en fejl (manglende/defekt hardware) rapporteres den på skærmen.

Under POST ser BIOS også efter boot-enheden, disken til stat op fra (normalt den første harddisk, men vi kan konfigurere den til at være en DVD, USB, netværkskort osv. I stedet).

Derefter opretter systemet forbindelse til disken og søger efter Master Boot Record (512 bytes i størrelse), der gemmer bootloaderen (446 bytes i størrelse), og resten af rummet gemmer information om diskpartitioner (maksimalt fire) og MBR sig selv.

Boot loader identificerer og peger på samt indlæser kernen og initrd-filen (initialiserings-ramdisk - giver kernen adgang til det monterede rodfilsystem og moduler/drivere, der er gemt i/lib-biblioteket), som generelt er gemt i/boot-katalog for filsystemet.

Efter at kernen er indlæst, udfører den init (eller systemd på nyere Linux-distroer), den første proces med PID 1, som igen starter alle andre processer på systemet. Det er også den sidste proces, der udføres ved lukning af systemet.

Sådan finder du ud af Linux-opstartsproblemer eller fejlmeddelelser

Som vi nævnte før, sker Linux opstartsprocesser hurtigt, at vi ikke engang klart kan læse det meste af det output, der sendes til konsollen.

Så at tage opstartsproblemer/fejl til efterretning kræver en systemadministrator at undersøge bestemte vigtige filer i forbindelse med bestemte kommandoer. Og disse inkluderer:

Dette er sandsynligvis den første fil, du vil se på, for at se alt det, der blev udfoldet under systemstart.

I stedet for at prøve så hårdt på at følge output på skærmen under opstart, kan vi se denne fil, når opstartsprocessen er afsluttet for at hjælpe os med at bestemme og løse opstartsproblemer/fejl.

Vi bruger cat-kommandoen til dette formål som følger (nedenfor er et eksempel på denne fil):

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

Fra ovenstående output kan vi se, at der er opstartsproblemer angivet med nedenstående linjer.

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

Problem: Problem med swap-partitionen; systemet kunne enten ikke læse swap-filen/enheden/partitionen, ellers er den ikke til stede.

Lad os kontrollere, om systemet bruger swap-plads med fri kommando.

# free

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

Alternativt kan vi køre swapon-kommandoen for at se oversigten over systemudvekslingspladsbrug (vi får ikke noget output).

# swapon -s

Vi kan løse dette problem ved at oprette et swap-rum i Linux.

Bemærk: Indholdet af denne fil ryddes ved systemlukning: nye data gemmes i den på en ny boot.

Denne fil gemmer generelle systemmeddelelser, herunder de meddelelser, der er logget under systemstart.

For at se det skal du skrive:

# 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 denne fil muligvis er relativt lang, kan vi se den på sider ved hjælp af kommandoen mere (som endda viser en procentdel) som denne.

# more /var/log/messages

Indholdet af/var/log/meddelelser i modsætning til den foregående fil ryddes ikke nedlukning, fordi det ikke kun indeholder opstartsmeddelelser, men også meddelelser om andre systemaktiviteter. Så ældre filer komprimeres og opbevares på systemet til senere inspektion som vist nedenfor.

# 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-kommandoen kan vise operationer, når opstartsprocessen er afsluttet, såsom kommandolinjemuligheder, der sendes til kernen; opdaget hardwarekomponenter, hændelser, når der tilføjes en ny USB-enhed, eller fejl som NIC (Network Interface Card) -fejl, og driverne rapporterer, at der ikke er registreret nogen linkaktivitet på netværket og så meget mere.

# 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 ([email ) (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
....

Dette er nyttigt i de fleste aktuelle Linux-distroer ved hjælp af systemd: den nyeste system- og servicemanager. Under det udføres systemlogning via journalkomponenten - en central placering for alle meddelelser, der er logget af forskellige komponenter.

Disse meddelelser inkluderer kerne- og opstartsmeddelelser; beskeder fra syslog eller forskellige tjenester. Vi kan bruge den til at gennemgå opstartsmeddelelser og etablere opstartsproblemer ved at læse gennem output og identificere interesselinjer (fejl påpeget af røde linjer afhængigt af terminaltekstfarveindstillinger).

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

Ovenstående er et eksempel på kommandooutputtet, der viser en fejl, vi allerede har identificeret ved at se /var/log/boot.log: swap-partitionsfejlen. For at se flere outputlinjer skal du blot trykke på [Enter] -knappen.

Tjek også disse nyttige vejledninger om Linux-systemstart og servicestyring i forhold til almindelige system- og servicechefer:

  1. Processtyring i RHEL 7: Boot, nedlukning og alt imellem
  2. Håndtering af systemstartprocesser og -tjenester (SysVinit, Systemd og Upstart)
  3. Historien bag 'init' og 'systemd': Hvorfor 'init' skal erstattes med 'systemd'

I denne artikel forklarede vi kort de forskellige faser i Linux-systemstartprocessen samt lærte, hvordan man etablerede og muligvis løste opstartsproblemer. For at tilføje enhver tanke til denne vejledning skal du bruge kommentarformularen nedenfor.