Kaip nustatyti ir išspręsti įkrovos problemas sistemoje „Linux“.


„Linux“ sistema paleidžiama taip greitai, kad dauguma išvesties slenka per greitai, kad būtų galima perskaityti į konsolę išsiųstą tekstą (rodo, kad paslaugos paleidžiamos). Todėl įkrovos problemų/klaidų stebėjimas mums tampa nedideliu iššūkiu.

Šiame straipsnyje trumpai paaiškinsime skirtingus „Linux“ sistemos įkrovos proceso etapus, tada sužinosime, kaip nustatyti ir išsiaiškinti įkrovos problemas: kalbant apie failus, į kuriuos reikia žiūrėti, arba komandomis, skirtomis sistemos įkrovos pranešimams peržiūrėti.

„Linux“ įkrovos proceso santrauka

Apibendrinant galima pasakyti, kad paspaudus mygtuką Įjungimas, pagrindinėje plokštėje integruota programa BIOS (Pagrindinė įvesties išvesties sistema) atlieka >POST (Power on Self Test) – kur nuskaitoma aparatinė įranga, pvz., diskai, RAM (laisvosios prieigos atmintis), klaviatūra ir kt. Atsiradus klaidai (trūksta/neveikianti aparatinė įranga), apie tai pranešama ekrane.

Atliekant POST, BIOS taip pat ieško įkrovos įrenginio, disko, iš kurio reikia atlikti būseną (dažniausiai pirmojo standžiojo disko, tačiau galime sukonfigūruoti jį kaip DVD, USB , tinklo plokštė ir pan.).

Tada sistema prisijungs prie disko ir ieškos Pagrindinio įkrovos įrašo (512 baitų dydžio), kuriame saugoma įkrovos programa (446 baitų dydžio), o likusioje erdvėje saugoma informacija apie disko skaidinius. (daugiausia keturis) ir patį MBR.

Siūlomas skaitymas: 4 geriausi Linux įkrovos įrenginiai

Įkrovos įkroviklis identifikuos ir nukreips į jį, taip pat įkels Brandulį ir pradinį failą (inicializacijos RAM diskas – suteikia branduoliui prieigą prie prijungtos šakninės failų sistemos ir modulių/tvarkyklių, saugomų / lib katalogą), kurie paprastai saugomi failų sistemos kataloge /boot.

Kai branduolys įkeliamas, jis vykdo init (arba systemd naujesniuose Linux platinimuose), pirmąjį procesą su PID 1, kuris savo ruožtu paleidžia visus kitus sistemos procesus. Tai taip pat paskutinis procesas, kuris turi būti vykdomas išjungus sistemą.

Kaip sužinoti „Linux“ įkrovos problemas arba klaidų pranešimus

Kaip minėjome anksčiau, „Linux“ įkrovos procesai vyksta greitai, todėl net negalime aiškiai perskaityti daugumos į konsolę išsiųstų išvesties.

Taigi, atkreipdamas dėmesį į įkrovos problemas/klaidas, sistemos administratorius turi peržiūrėti tam tikrus svarbius failus kartu su tam tikromis komandomis. Ir tai apima:

/var/log/boot.log – registruoja sistemos įkrovos pranešimus

Tai tikriausiai yra pirmasis failas, kurį norite peržiūrėti, kad pamatytumėte viską, kas atsiskleidė paleidžiant sistemą.

Užuot labai stengdamiesi sekti ekrane rodomą išvestį įkrovos metu, galime peržiūrėti šį failą pasibaigus įkrovos procesui, kad padėtų mums nustatyti ir išspręsti įkrovos problemas/klaidas.

Šiuo tikslu naudojame komandą cat (toliau pateikiamas šio failo pavyzdys):

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

Iš aukščiau pateiktos išvesties matome, kad yra įkrovos problemų, nurodytų toliau pateiktose eilutėse.

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

Problema: problema su apsikeitimo skaidiniu; sistemai nepavyko nuskaityti apsikeitimo failo/įrenginio/skaidinio arba jo nėra.

Patikrinkime, ar sistema nenaudoja apsikeitimo vietos su nemokama komanda.

free

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

Arba galime paleisti swapon komandą, kad peržiūrėtume sistemos apsikeitimo vietos naudojimo suvestinę (negausime jokios išvesties).

swapon -s

Šią problemą galime išspręsti sukurdami apsikeitimo vietą „Linux“.

Pastaba: šio failo turinys išvalomas išjungus sistemą: jame išsaugomi nauji duomenys naujai įkrovus.

/var/log/messages – bendrieji sistemos žurnalai

Šiame faile saugomi bendrieji sistemos pranešimai, įskaitant pranešimus, kurie registruojami sistemos įkrovos metu.

Norėdami jį peržiūrėti, įveskite:

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

Kadangi šis failas gali būti gana ilgas, galime jį peržiūrėti puslapiuose naudodami komandą daugiau (kuri net rodo procentą), kaip ši.

more /var/log/messages

/var/log/messages turinys, skirtingai nei ankstesnis failas, nėra išjungtas, nes jame yra ne tik įkrovos pranešimų, bet ir pranešimų apie kitą sistemos veiklą. Taigi senesni failai yra suglaudinami ir saugomi sistemoje, kad būtų galima vėliau patikrinti, kaip parodyta toliau.

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 – rodo branduolio pranešimus

Komanda dmesg gali parodyti operacijas, kai įkrovos procesas baigtas, pvz., komandų eilutės parinktis, perduodamas branduoliui; aptikti aparatūros komponentai, įvykiai, kai pridedamas naujas USB įrenginys, arba tokios klaidos, kaip NIC (tinklo sąsajos kortelės) gedimas ir tvarkyklės praneša, kad tinkle neaptikta susiejimo veikla, ir dar daugiau.

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 Journal“ užklausos turinys

Tai naudinga daugumoje dabartinių „Linux“ paskirstymų, naudojančių systemd: naujausią sistemos ir paslaugų tvarkyklę. Pagal jį sistemos registravimas atliekamas per žurnalo komponentą – centralizuotą visų skirtingų komponentų registruojamų pranešimų vietą.

Šie pranešimai apima branduolio ir įkrovos pranešimus; žinutes iš syslog ar įvairių paslaugų. Galime jį naudoti norėdami peržiūrėti įkrovos pranešimus ir nustatyti įkrovos problemas, skaitydami išvestį ir nustatydami dominančias linijas (klaidos, pažymėtos raudonomis linijomis, atsižvelgiant į terminalo teksto spalvų nustatymus).

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.

Aukščiau pateiktas komandos išvesties pavyzdys, rodantis klaidą, kurią jau nustatėme peržiūrėdami /var/log/boot.log: apsikeitimo skaidinio klaidą. Norėdami peržiūrėti daugiau išvesties eilučių, tiesiog paspauskite mygtuką [Enter].

Taip pat peržiūrėkite šiuos naudingus „Linux“ sistemos įkrovos ir paslaugų valdymo vadovus, susijusius su įprastais sistemos ir paslaugų valdytojais:

  1. Procesų valdymas RHEL 7: paleidimas, išjungimas ir viskas tarp jų
  2. Sistemos paleidimo proceso ir paslaugų valdymas (SysVinit, Systemd ir Upstart)
  3. Istorija už „init“ ir „systemd“: kodėl „init“ reikėjo pakeisti į „systemd“

Šiame straipsnyje trumpai paaiškinome skirtingus Linux sistemos įkrovos proceso etapus, taip pat sužinojome, kaip nustatyti ir galbūt išspręsti įkrovos problemas. Norėdami pridėti bet kokią mintį prie šio vadovo, naudokite toliau pateiktą komentarų formą.