Vyhledávání na webu

Jak zjistit a opravit problémy se spouštěním v Linuxu


Systém Linux se spouští tak rychle, že většina výstupu roluje příliš rychle na to, aby přečetla text (zobrazující spouštěné služby) odeslaný do konzole. Proto se pro nás stává sledování problémů/chyb při bootování trochu výzvou.

V tomto článku stručně vysvětlíme různé fáze procesu spouštění systému Linux a poté se naučíme, jak zjistit problémy se zaváděním a dostat se k nim: pokud jde o soubory, které je třeba hledat, nebo příkazy pro zobrazení zpráv spouštění systému.

Shrnutí procesu spouštění Linuxu

Stručně řečeno, jakmile stiskneme tlačítko Power On, BIOS (Basic Input Output System), program integrovaný v základní desce, provede POST (Power on Self Test) – kde se kontroluje hardware, jako jsou disky, RAM (paměť s náhodným přístupem), klávesnice atd. V případě chyby (chybějící/nefunkční hardware) je hlášena na obrazovce.

Během POST BIOS také hledá spouštěcí zařízení, disk, ze kterého se má nastavit (obvykle první pevný disk, ale můžeme jej nakonfigurovat jako DVD, USB , síťová karta atd.).

Poté se systém připojí k disku a vyhledá Hlavní spouštěcí záznam (velikost 512 bajtů), ve kterém je uložen zavaděč (velikost 446 bajtů) a ve zbytku místa jsou uloženy informace o diskových oddílech. (maximálně čtyři) a samotný MBR.

Doporučená četba: 4 nejlepší zavaděče Linuxu

Zavaděč identifikuje a ukáže na Jádro a soubor initrd (inicializační ram disk – poskytuje jádru přístup k připojenému kořenovému souborovému systému a modulům/ovladačům uloženým v / lib), které jsou obecně uloženy v adresáři /boot souborového systému.

Po načtení jádra se spustí init (nebo systemd v novějších distribucích Linuxu), první proces s PID 1, který zase spustí všechny ostatní procesy v systému. Je to také poslední proces, který se má provést při vypnutí systému.

Jak zjistit problémy se spouštěním Linuxu nebo chybové zprávy

Jak jsme již zmínili, spouštěcí procesy Linuxu probíhají rychle, takže nemůžeme ani jasně přečíst většinu výstupu odeslaného do konzole.

Zaznamenání problémů/chyb při zavádění vyžaduje, aby správce systému prohlédl určité důležité soubory ve spojení s konkrétními příkazy. A mezi ně patří:

/var/log/boot.log – Zaznamenává zprávy o spouštění systému

Toto je pravděpodobně první soubor, do kterého se chcete podívat, abyste viděli vše, co se rozvinulo během spouštění systému.

Namísto toho, abychom se tak usilovně snažili sledovat výstup na obrazovce během spouštění, můžeme tento soubor zobrazit po dokončení procesu spouštění, aby nám pomohl určit a vyřešit problémy/chyby spouštění.

K tomuto účelu používáme příkaz cat následovně (níže je ukázka tohoto souboru):

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

Z výše uvedeného výstupu můžeme vidět, že došlo k problémům se zaváděním, které jsou indikovány řádky níže.

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

Problém: Problém s odkládacím oddílem; systému se buď nepodařilo přečíst odkládací soubor/zařízení/oddíl, nebo není přítomen.

Zkontrolujeme, zda systém používá odkládací prostor pomocí příkazu free.

free

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

Případně můžeme spustit příkaz swapon a zobrazit souhrn využití odkládacího prostoru systému (nezískáme žádný výstup).

swapon -s

Tento problém můžeme vyřešit vytvořením odkládacího prostoru v Linuxu.

Poznámka: Obsah tohoto souboru se vymaže při vypnutí systému: při novém spuštění jsou v něm uložena nová data.

/var/log/messages – Obecné systémové protokoly

Tento soubor ukládá obecné systémové zprávy, včetně zpráv, které jsou protokolovány během spouštění systému.

Chcete-li jej zobrazit, zadejte:

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

Protože tento soubor může být poměrně dlouhý, můžeme jej zobrazit na stránkách pomocí příkazu more (který zobrazuje i procenta) takto.

more /var/log/messages

Obsah /var/log/messages na rozdíl od předchozího souboru není vymazán, protože neobsahuje pouze zaváděcí zprávy, ale také zprávy týkající se dalších systémových aktivit. Takže starší soubory jsou komprimovány a uchovávány v systému pro pozdější kontrolu, jak je uvedeno níže.

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 – Zobrazuje zprávy jádra

Příkaz dmesg může po dokončení zaváděcího procesu zobrazit operace, jako jsou volby příkazového řádku předané jádru; detekované hardwarové komponenty, události při přidání nového USB zařízení nebo chyby jako selhání NIC (Network Interface Card) a ovladače nehlásí žádnou aktivitu spojení v síti a mnoho dalšího.

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 – Dotaz na obsah Systemd Journal

To je užitečné ve většině současných linuxových distribucí používajících systemd: nejnovější správce systému a služeb. V rámci něj se protokolování systému provádí prostřednictvím komponenty žurnálu – centralizovaného umístění pro všechny zprávy zaznamenávané různými komponentami.

Tyto zprávy zahrnují zprávy jádra a zavádění; zprávy ze syslogu nebo různých služeb. Můžeme jej použít ke kontrole zaváděcích zpráv a zjištění problémů se zaváděním čtením výstupu a identifikací řádků zájmu (chyby označené červenými čarami v závislosti na nastavení barvy textu terminálu).

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.

Výše uvedené je příkladem výstupu příkazu, který ukazuje chybu, kterou jsme již identifikovali při prohlížení /var/log/boot.log: chyba odkládacího oddílu. Chcete-li zobrazit více výstupních řádků, jednoduše stiskněte tlačítko [Enter].

Podívejte se také na tyto užitečné příručky o spouštění systému Linux a správě služeb ve vztahu k běžným správcům systému a služeb:

  1. Process Management v RHEL 7: Boot, Shutdown a vše mezi tím
  2. Správa procesu spouštění systému a služeb (SysVinit, Systemd a Upstart)
  3. Příběh za „init“ a „systemd“: Proč je třeba „init“ nahradit „systemd“

V tomto článku jsme stručně vysvětlili různé fáze procesu spouštění systému Linux a také jsme se naučili, jak vytvořit a případně vyřešit problémy se zaváděním. Chcete-li do této příručky přidat jakoukoli myšlenku, použijte níže uvedený formulář pro komentáře.