Kuidas Linuxis käivitamisprobleeme kindlaks teha ja lahendada


Linuxi süsteem käivitub nii kiiresti, et enamik väljundist kerib konsoolile saadetud teksti (mis näitab teenuste käivitamist) lugemiseks liiga kiiresti. Seetõttu muutub alglaadimisprobleemide/vigade jälgimine meile väikeseks väljakutseks.

Selles artiklis selgitame lühidalt Linuxi süsteemi käivitamisprotsessi erinevaid etappe, seejärel õpime, kuidas käivitamisprobleeme luua ja nende lõpuni jõuda: terminites failid, mida uurida, või käsklused süsteemi käivitussõnumite vaatamiseks.

Linuxi alglaadimisprotsessi kokkuvõte

Kokkuvõtlikult võib öelda, et kui vajutame nuppu Toide sisse, siis emaplaati integreeritud programm BIOS (Basic Input Output System) viib läbi POST (Power on Self Test) - kus riistvara nagu kettad, RAM (muutmälu), klaviatuur, skaneeritakse. Vea korral (riistvara puudumine/talitlushäire) teatatakse sellest ekraanile.

POST-i ajal otsib BIOS ka alglaadimisseadet, ketast, kust üles ehitada (tavaliselt esimene kõvaketas, kuid võime selle seadistada ka DVD-ks, USB-ks, võrgukaardiks jne).

Seejärel ühendub süsteem kettaga ja otsib alglaadimise kirjet (suurusega 512 baiti), mis salvestab alglaaduri (suurusega 446 baiti) ja ülejäänud ruum salvestab teavet ketasektsioonide (maksimaalselt neli) ja MBR-i kohta ise.

Buutlaadur tuvastab tuuma ja initrd-faili ning osutab sellele, samuti laadib need sisse (initsialiseerimisketta - annab kernelile juurdepääsu juurfailisüsteemile ja/lib kataloogi salvestatud moodulitele/draiveritele), mis on tavaliselt salvestatud/boot failisüsteemi kataloog.

Pärast tuuma laadimist käivitab see init (või systemd uuematel Linuxi distrodel), esimese protsessi PID 1-ga, mis omakorda käivitab kõik muud süsteemi protsessid. See on ka viimane protsess, mis käivitatakse süsteemi väljalülitamisel.

Kuidas teada saada Linuxi käivitamise probleeme või veateateid

Nagu me varem mainisime, toimuvad Linuxi alglaadimisprotsessid kiiresti, nii et me ei suuda isegi enamikku konsoolile saadetud väljunditest selgelt lugeda.

Nii et käivitamisprobleemide/vigade teadmiseks võtmine nõuab süsteemiadministraatorilt teatud oluliste failide uurimist koos konkreetsete käskudega. Ja nende hulka kuuluvad:

See on ilmselt esimene fail, mida soovite uurida, et vaadata kõike, mis süsteemi käivitamisel lahti oli.

Selle asemel, et proovida nii kõvasti ekraani väljundit alglaadimise ajal jälgida, saame seda faili vaadata pärast alglaadimisprotsessi lõppu, et aidata meil alglaadimisprobleeme/vigu lahendada.

Kasutame selleks kassi käsku järgmiselt (allpool on selle faili näidis):

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

Ülaltoodud väljundist näeme, et allpool olevatel ridadel on näidatud alglaadimisprobleeme.

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

Probleem: probleem vahetuspartitsiooniga; süsteem ei suutnud vahetusfaili/seadet/sektsiooni lugeda või seda pole olemas.

Kontrollime, kas süsteem kasutab vaba käsuga ruumi vahetamist.

# free

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

Teise võimalusena võime käitada swapon-käsu, et vaadata süsteemi vahetamise ruumi kasutamise kokkuvõtet (me ei saa väljundit).

# swapon -s

Selle probleemi saame lahendada Linuxi vahetusruumi loomisega.

Märkus. Selle faili sisu kustutatakse süsteemi väljalülitamisel: uued andmed salvestatakse sinna uude alglaadimisse.

See fail salvestab üldised süsteemiteated, sealhulgas süsteemi käivitamisel logitud sõnumid.

Selle vaatamiseks tippige:

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

Kuna see fail võib olla suhteliselt pikk, võime seda vaadata lehtedel, kasutades sellist käsku rohkem (mis näitab isegi protsenti).

# more /var/log/messages

Erinevalt eelmisest failist/var/log/messages sisu ei kustutata, kuna see ei sisalda ainult alglaadimisteateid, vaid ka muid süsteemi toiminguid puudutavaid teateid. Nii tihendatakse vanemad failid ja hoitakse süsteemis hilisemaks kontrollimiseks, nagu allpool näidatud.

# 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-käsk võib näidata toiminguid, kui alglaadimisprotsess on lõpule jõudnud, nagu näiteks tuumale edastatud käsureavalikud; tuvastatud riistvarakomponendid, sündmused uue USB-seadme lisamisel või sellised vead nagu NIC (Network Interface Card) tõrge ja draiverid ei esita võrgus tuvastatud linkide aktiivsust ja palju muud.

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

See on kasulik enamikus praegustes Linuxi distros, mis kasutavad systemd: uusimat süsteemi- ja teenushaldurit. Selle all toimub süsteemi logimine ajakirja komponendi kaudu - kõigi eri komponentide poolt logitud sõnumite tsentraliseeritud asukoht.

Need sõnumid hõlmavad kerneli ja alglaadimise teateid; sõnumeid syslogist või erinevatest teenustest. Saame seda kasutada alglaadimissõnumite ülevaatamiseks ja käivitamisprobleemide tuvastamiseks, lugedes väljundi läbi ja tuvastades huvitavad read (vead, millele punased jooned osutavad, sõltuvalt terminali teksti värvi sätetest).

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

Ülaltoodud on käsu väljundi näidis, mis näitab viga, mille oleme juba tuvastanud /var/log/boot.log vaatamisel: vahetuspartitsiooni tõrge. Rohkemate väljundjoonte vaatamiseks vajutage lihtsalt nuppu [Enter].

Vaadake ka neid kasulikke juhiseid Linuxi süsteemi käivitamise ja teenuse haldamise kohta seoses tavaliste süsteemi- ja teenushalduritega:

  1. Protsessijuhtimine RHEL 7-s: alglaadimine, seiskamine ja kõik muu vahel
  2. Süsteemi käivitamise protsessi ja teenuste haldamine (SysVinit, Systemd ja Upstart)
  3. Lugu 'init' ja 'systemd' taga: miks 'init' tuli asendada sõnadega 'systemd'

Selles artiklis selgitasime lühidalt Linuxi süsteemi käivitamisprotsessi erinevaid etappe ning õppisime, kuidas käivitamisprobleeme luua ja võimalik, et neid lahendada. Mõtete lisamiseks sellele juhendile kasutage allolevat kommentaarivormi.