Hvordan finne ut og fikse oppstartsproblemer i Linux


Linux-systemet starter så raskt at det meste av utdataene ruller forbi for raskt til å lese teksten (som viser at tjenester startes) sendt til konsollen. Derfor blir det litt av en utfordring for oss å observere oppstartsproblemer/feil.

I denne artikkelen vil vi kort forklare de forskjellige stadiene i en Linux-systemoppstartsprosess, og deretter lære hvordan du etablerer og kommer til bunns i oppstartsproblemer: i termer av filer å se nærmere på eller kommandoer for å se systemoppstartsmeldinger.

Sammendrag av Linux Boot Process

Oppsummert, når vi trykker på Power On-knappen, utfører BIOS (Basic Input Output System), et program integrert i et hovedkort, en POST (Power on Self Test) – hvor maskinvare som disker, RAM (Random Access Memory), tastatur, etc blir skannet. Ved feil (manglende/defekt maskinvare) rapporteres det på skjermen.

Under POST ser BIOS også etter oppstartsenheten, disken som skal vises fra (vanligvis den første harddisken, men vi kan konfigurere den til å være en DVD, USB, nettverkskort osv. i stedet).

Deretter vil systemet koble seg til disken og søke etter Master Boot Record (512 byte stor) som lagrer oppstartslasteren (446 byte stor) og resten av plassen lagrer informasjon om diskpartisjoner (maks fire) og MBR seg selv.

Oppstartslasteren vil identifisere og peke på, samt laste inn kjernen og initrd-filen (initialiserings-ram-disk – gir kjernetilgang til det monterte rotfilsystemet og moduler/drivere lagret i /lib-katalogen), som vanligvis er lagret i /boot-katalogen til filsystemet.

Etter at kjernen er lastet, kjører den init (eller systemd på nyere Linux distros), den første prosessen med PID 1, som igjen starter alle andre prosesser på systemet. Det er også den siste prosessen som skal utføres ved systemavslutning.

Hvordan finne ut Linux-oppstartsproblemer eller feilmeldinger

Som vi nevnte før, skjer Linux-oppstartsprosessene raskt at vi ikke engang tydelig kan lese mesteparten av utdataene som sendes til konsollen.

Så å legge merke til oppstartsproblemer/-feil krever at en systemadministrator ser på visse viktige filer i forbindelse med bestemte kommandoer. Og disse inkluderer:

Dette er sannsynligvis den første filen du vil se nærmere på, for å se alt som utfoldet seg under systemoppstarten.

I stedet for å prøve så hardt å følge utdataene på skjermen under oppstart, kan vi se denne filen etter at oppstartsprosessen er fullført for å hjelpe oss med å bestemme og løse oppstartsproblemer/-feil.

Vi bruker cat-kommandoen til det formålet som følger (nedenfor er et eksempel på denne filen):

# 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 utdataene ovenfor kan vi se at det er et oppstartsproblem angitt av linjene nedenfor.

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

Problem: Problem med swap-partisjonen; Systemet klarte enten ikke å lese swap-filen/enheten/partisjonen eller den er ikke til stede.

La oss sjekke om systemet bruker bytteplass med ledig kommando.

# free

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

Alternativt kan vi kjøre swapon-kommandoen for å se sammendraget av systembytteplassbruk (vi får ikke noe utdata).

# swapon -s

Vi kan løse dette problemet ved å opprette en bytteplass i Linux.

Merk: Innholdet i denne filen slettes ved systemavslutning: nye data lagres i den ved en ny oppstart.

Denne filen lagrer generelle systemmeldinger, inkludert meldingene som logges under systemoppstart.

For å se den, skriv inn:

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

Fordi denne filen kan være relativt lang, kan vi se den på sider ved å bruke more-kommandoen (som til og med viser en prosentandel) som denne.

# more /var/log/messages

Innholdet i /var/log/messages i motsetning til den forrige filen er ikke ryddet avslutning fordi den ikke bare inneholder oppstartsmeldinger, men også meldinger om andre systemaktiviteter. Så eldre filer komprimeres og holdes på systemet for senere inspeksjon 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

Kommandoen dmesg kan vise operasjoner når oppstartsprosessen er fullført, for eksempel kommandolinjealternativer sendt til kjernen; maskinvarekomponenter oppdaget, hendelser når en ny USB-enhet legges til, eller feil som NIC (Network Interface Card)-feil og driverne rapporterer ingen koblingsaktivitet oppdaget på nettverket og mye mer.

# 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 nyttig i de fleste nåværende Linux-distroer som bruker systemd: den nyeste system- og servicebehandleren. Under den gjøres systemlogging via journalkomponenten – en sentralisert plassering for alle meldinger logget av ulike komponenter.

Disse meldingene inkluderer kjerne- og oppstartsmeldinger; meldinger fra syslog eller ulike tjenester. Vi kan bruke den til å gjennomgå oppstartsmeldinger og etablere oppstartsproblemer ved å lese gjennom utdataene og identifisere interesselinjer (feil påpekt av røde linjer avhengig av fargeinnstillinger for 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.

Ovennevnte er et eksempel på kommandoutgangen som viser en feil vi allerede har identifisert ved å se /var/log/boot.log: swap-partisjonsfeilen. For å se flere utgangslinjer, trykk ganske enkelt på [Enter]-knappen.

Sjekk også ut disse nyttige veiledningene om Linux-systemoppstart og serviceadministrasjon i forhold til vanlige system- og serviceadministratorer:

  1. Prosessadministrasjon i RHEL 7: Oppstart, avslutning og alt i mellom
  2. Administrere systemoppstartsprosesser og -tjenester (SysVinit, Systemd og Upstart)
  3. Historien bak 'init' og 'systemd': Hvorfor 'init' måtte erstattes med 'systemd'

I denne artikkelen forklarte vi kort de forskjellige stadiene i Linux-systemoppstartsprosessen, samt lærte hvordan du etablerer og muligens løser oppstartsproblemer. For å legge til en tanke til denne veiledningen, bruk kommentarskjemaet nedenfor.