Kuinka määrittää ja korjata käynnistysongelmat Linuxissa


Linux-järjestelmä käynnistyy niin nopeasti, että suurin osa lähdöstä vierii liian nopeasti konsoliin lähetetyn tekstin lukemiseksi (näyttää palveluiden käynnistymistä). Siksi käynnistysongelmien/virheiden havaitseminen on meille pieni haaste.

Tässä artikkelissa selitämme lyhyesti Linux-järjestelmän käynnistysprosessin eri vaiheet ja opimme sitten selvittämään käynnistysongelmat ja pääsemään niiden pohjaan: tarkasteltavina tiedostoina tai komentoina, joilla tarkastellaan järjestelmän käynnistysviestejä.

Yhteenveto Linuxin käynnistysprosessista

Yhteenvetona voidaan todeta, että kun painamme Virta päälle -painiketta, emolevyyn integroitu BIOS (Basic Input Output System) suorittaa >POST (Power on Self Test) – jossa laitteistot, kuten levyt, RAM (Random Access Memory), näppäimistö jne. tarkistetaan. Virheen sattuessa (laitteisto puuttuu/vikaa), se ilmoitetaan näytöllä.

POST-testin aikana BIOS etsii myös käynnistyslaitetta, levyä, jolta asetukset luodaan (yleensä ensimmäinen kiintolevy, mutta voimme määrittää sen DVD- tai USB-levyksi , verkkokortti jne).

Sitten järjestelmä muodostaa yhteyden levyyn ja etsii Master Boot Record (koko 512 tavua), joka tallentaa käynnistyslataimen (kooltaan 446 tavua) ja muu tila tallentaa tietoja levyosioista. (enintään neljä) ja itse MBR.

Suositeltu luku: 4 parasta Linuxin käynnistyslatainta

Käynnistyslatain tunnistaa ja osoittaa sekä lataa ytimen ja initrd-tiedoston (alustusmuistilevy – tarjoaa ytimen pääsyn asennettuun juuritiedostojärjestelmään ja moduuliin/ajureihin, jotka on tallennettu hakemistoon / lib-hakemisto), jotka yleensä tallennetaan tiedostojärjestelmän /boot-hakemistoon.

Kun ydin on ladattu, se suorittaa init (tai systemd uudemmissa Linux-distroissa), ensimmäisen prosessin PID 1:llä, joka puolestaan käynnistää kaikki muut prosessit järjestelmässä. Se on myös viimeinen prosessi, joka suoritetaan järjestelmän sammutuksen yhteydessä.

Kuinka selvittää Linuxin käynnistysongelmat tai virheilmoitukset

Kuten aiemmin mainitsimme, Linuxin käynnistysprosessit tapahtuvat nopeasti, ettemme edes pysty lukemaan selkeästi suurinta osaa konsoliin lähetetystä lähdöstä.

Joten käynnistysongelmien/virheiden huomioiminen vaatii järjestelmänvalvojaa tutkimaan tiettyjä tärkeitä tiedostoja tiettyjen komentojen yhteydessä. Ja näihin kuuluvat:

/var/log/boot.log – Kirjaa järjestelmän käynnistysviestit

Tämä on luultavasti ensimmäinen tiedosto, johon haluat tutustua nähdäksesi kaiken, mikä avautui järjestelmän käynnistyksen aikana.

Sen sijaan, että yrittäisimme niin kovasti seurata näyttöä käynnistyksen aikana, voimme tarkastella tätä tiedostoa käynnistysprosessin päätyttyä auttaaksemme meitä määrittämään ja ratkaisemaan käynnistysongelmat/virheet.

Käytämme cat-komentoa tähän tarkoitukseen seuraavasti (alla on esimerkki tästä tiedostosta):

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

Yllä olevasta lähdöstä voimme nähdä, että alla olevilla riveillä on käynnistysongelmia.

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

Ongelma: Ongelma sivutusosion kanssa; järjestelmä joko ei onnistunut lukemaan sivutustiedostoa/laitetta/osiota tai sitä ei ole.

Tarkistetaan, käyttääkö järjestelmä swap-tilaa vapaalla komennolla.

free

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

Vaihtoehtoisesti voimme suorittaa swapon-komennon nähdäksemme yhteenvedon järjestelmän sivutustilan käytöstä (emme saa tulostetta).

swapon -s

Voimme ratkaista tämän ongelman luomalla swap-tilan Linuxissa.

Huomaa: Tämän tiedoston sisältö tyhjennetään, kun järjestelmä sammutetaan: siihen tallennetaan uusia tietoja uudessa käynnistyksessä.

/var/log/messages – Yleiset järjestelmälokit

Tämä tiedosto tallentaa yleiset järjestelmäviestit, mukaan lukien viestit, jotka kirjataan järjestelmän käynnistyksen aikana.

Voit tarkastella sitä kirjoittamalla:

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

Koska tämä tiedosto voi olla suhteellisen pitkä, voimme tarkastella sitä sivuilla käyttämällä more-komentoa (joka näyttää jopa prosenttiosuuden) tällä tavalla.

more /var/log/messages

Tiedoston /var/log/messages sisältöä ei edellisestä tiedostosta poiketen tyhjennetä, koska se ei sisällä vain käynnistysviestejä, vaan myös muita järjestelmän toimintoja koskevia viestejä. Joten vanhemmat tiedostot pakataan ja säilytetään järjestelmässä myöhempää tarkastusta varten alla olevan kuvan mukaisesti.

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 – Näyttää ytimen viestit

dmesg-komento voi näyttää toimintoja, kun käynnistysprosessi on valmis, kuten ytimelle välitetyt komentorivin valinnat; havaittuja laitteistokomponentteja, tapahtumia, kun uusi USB-laite lisätään, tai virheitä, kuten NIC (Network Interface Card) -virhe ja ohjaimet ilmoittavat, että verkossa ei ole havaittu linkin toimintaa ja paljon muuta.

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 – Systemd Journalin kyselyn sisältö

Tämä on hyödyllistä useimmissa nykyisissä Linux-distroissa, joissa käytetään systemd:tä: uusin järjestelmä- ja palveluhallinta. Sen alla järjestelmäloki tapahtuu lokikomponentin kautta – keskitetty sijainti kaikille eri komponenttien kirjaamille viesteille.

Nämä viestit sisältävät ytimen ja käynnistysviestit; viestit syslogista tai erilaisista palveluista. Voimme käyttää sitä tarkastelemaan käynnistysviestejä ja määrittämään käynnistysongelmia lukemalla tulosteet ja tunnistamalla kiinnostuksen kohteet (punaiset viivat osoittavat virheet päätteen tekstin väriasetuksista riippuen).

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.

Yllä oleva esimerkki komennon lähdöstä näyttää virheen, jonka havaitsimme jo katsomalla /var/log/boot.log: vaihto-osion virhe. Jos haluat nähdä lisää lähtörivejä, paina [Enter]-painiketta.

Tutustu myös näihin hyödyllisiin oppaisiin Linux-järjestelmän käynnistyksestä ja palvelunhallinnasta yleisten järjestelmä- ja palvelujohtajien yhteydessä:

  1. Prosessinhallinta RHEL 7:ssä: käynnistys, sammutus ja kaikki siltä väliltä
  2. Järjestelmän käynnistysprosessin ja -palvelujen hallinta (SysVinit, Systemd ja Upstart)
  3. Tarina "init" ja "systemd" takana: Miksi "init" piti korvata sanalla "systemd"

Tässä artikkelissa selitimme lyhyesti Linux-järjestelmän käynnistysprosessin eri vaiheet sekä opimme luomaan ja mahdollisesti ratkaisemaan käynnistysongelmia. Jos haluat lisätä ajatuksia tähän oppaaseen, käytä alla olevaa kommenttilomaketta.