Kako utvrditi i riješiti probleme s podizanjem sustava u Linuxu


Linux sustav pokreće se tako brzo da se većina izlaza premotava prebrzo da bi pročitala tekst (koji pokazuje pokrenute usluge) poslan na konzolu. Stoga promatranje problema/pogrešaka pri pokretanju postaje za nas mali izazov.

U ovom ćemo članku ukratko objasniti različite faze procesa pokretanja sustava Linux, a zatim ćemo naučiti kako uspostaviti i doći do dna problema s pokretanjem: u terminima datoteke koje treba pregledati ili naredbe za pregled poruka o pokretanju sustava.

Sažetak procesa pokretanja Linuxa

Ukratko, nakon što pritisnemo tipku za uključivanje, BIOS (Basic Input Output System) program integriran u matičnu ploču izvodi POST (Power on Self Test) - gdje hardver kao što su diskovi, RAM (Random Access Memory), tipkovnica, itd. skeniraju se. U slučaju pogreške (nedostaje/neispravan hardver), ona se izvještava na zaslonu.

Tijekom POST-a BIOS također traži uređaj za pokretanje, disk za popravak (obično prvi tvrdi disk, no umjesto toga možemo ga konfigurirati da bude DVD, USB, mrežna kartica itd.).

Tada će se sustav povezati s diskom i tražiti Master Boot Record (veličine 512 bajta) koji pohranjuje pokretački program (veličine 446 bajta), a ostatak prostora pohranjuje informacije o particijama diska (najviše četiri) i MBR sebe.

Učitavač za pokretanje će identificirati i ukazati na nju, kao i učitati kernel i initrd datoteku (inicijalizacijski ram disk - omogućava jezgri pristup montiranom korijenskom datotečnom sustavu i modulima/pokretačkim programima pohranjenim u/lib direktoriju), koji su obično pohranjeni u/boot direktorij datotečnog sustava.

Nakon učitavanja kernela izvršava init (ili systemd na novijim Linuxovim distribucijama), prvi proces s PID 1, koji zauzvrat pokreće sve ostale procese u sustavu. To je ujedno i posljednji postupak koji se izvršava pri isključivanju sustava.

Kako otkriti probleme s pokretanjem Linuxa ili poruke o pogreškama

Kao što smo već spomenuli, procesi pokretanja Linuxa brzo se događaju da ne možemo ni jasno pročitati većinu izlaza poslanih na konzolu.

Stoga, uzimajući u obzir probleme s pokretanjem/pogreške, sistemski administrator treba pregledati određene važne datoteke zajedno s određenim naredbama. A to uključuje:

Ovo je vjerojatno prva datoteka koju želite pogledati kako biste vidjeli sve što se odvijalo tijekom pokretanja sustava.

Umjesto da se toliko trudimo pratiti izlaz na ekranu tijekom pokretanja, ovu datoteku možemo pregledati nakon završetka postupka pokretanja kako bi nam pomogli u određivanju i rješavanju problema/pogrešaka pri pokretanju.

U tu svrhu koristimo naredbu cat na sljedeći način (dolje je uzorak ove datoteke):

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

Iz gornjeg rezultata možemo vidjeti da postoje poteškoće s pokretanjem koje su označene donjim crtama.

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

Problem: Problem sa swap particijom; sustav ili nije uspio pročitati zamjensku datoteku/uređaj/particiju ili nije prisutan.

Provjerimo koristi li sustav zamjenski prostor s besplatnom naredbom.

# free

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

Alternativno, možemo pokrenuti naredbu swapon za prikaz sažetka upotrebe prostora za zamjenu sustava (nećemo dobiti izlaz).

# swapon -s

Ovaj problem možemo riješiti stvaranjem swap prostora u Linuxu.

Napomena: Sadržaj ove datoteke briše se pri isključivanju sustava: novi podaci pohranjuju se u novom pokretanju.

Ova datoteka pohranjuje općenite sistemske poruke, uključujući poruke koje se bilježe tijekom pokretanja sustava.

Da biste ga pogledali, upišite:

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

Budući da je ova datoteka možda relativno dugačka, možemo je pregledavati na stranicama pomoću naredbe more (koja čak pokazuje i postotak) poput ove.

# more /var/log/messages

Sadržaj/var/log/messages, za razliku od prethodne datoteke, nije uklonjen, jer ne sadrži samo poruke o pokretanju, već i poruke koje se tiču ostalih aktivnosti sustava. Tako se starije datoteke komprimiraju i čuvaju u sustavu radi kasnije provjere, kao što je prikazano u nastavku.

# 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

Naredba dmesg može prikazati operacije nakon što se postupak pokretanja dovrši, kao što su opcije naredbenog retka proslijeđene jezgri; otkrivene hardverske komponente, događaji kada se doda novi USB uređaj ili pogreške poput kvara NIC-a (Network Interface Card) i upravljački programi prijavljuju da nije otkrivena aktivnost veze na mreži i još puno više.

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

Ovo je korisno u većini trenutnih Linux distribucija koje koriste systemd: najnoviji upravitelj sustava i usluga. Pod njim se evidentiranje sustava vrši putem komponente dnevnika - centraliziranog mjesta za sve poruke koje bilježe različite komponente.

Te poruke uključuju kernel i boot poruke; poruke iz syslog-a ili raznih usluga. Možemo ga koristiti za pregled poruka o pokretanju i uspostavljanje problema s pokretanjem čitanjem izlaza i prepoznavanjem linija od interesa (pogreške istaknute crvenim linijama, ovisno o postavkama boje završnog teksta).

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

Iznad je primjer izlaza naredbe koji prikazuje grešku koju smo već identificirali pregledavanjem /var/log/boot.log: greška swap particije. Da biste pogledali više izlaznih linija, jednostavno pritisnite gumb [Enter].

Također pogledajte ove korisne vodiče o pokretanju sustava Linux i upravljanju uslugama u odnosu na uobičajene upravitelje sustava i usluga:

  1. Upravljanje procesima u RHEL 7: Dizanje, isključivanje i sve između
  2. Upravljanje postupkom pokretanja sustava i uslugama (SysVinit, Systemd i Upstart)
  3. Priča iza "init" i "systemd": Zašto je "init" trebalo zamijeniti sa "systemd"

U ovom smo članku ukratko objasnili različite faze procesa pokretanja sustava Linux, kao i naučili kako uspostaviti i eventualno riješiti probleme s pokretanjem. Da biste u ovaj vodič dodali bilo kakvu misao, upotrijebite obrazac za komentar u nastavku.