Weboldal keresés

A rendszerindítási problémák meghatározása és kijavítása Linuxban


A Linux rendszer olyan gyorsan indul el, hogy a kimenetek nagy része túl gyorsan elgördül ahhoz, hogy elolvassa a konzolra küldött szöveget (amely a szolgáltatások elindítását mutatja). Ezért a rendszerindítási problémák/hibák megfigyelése egy kis kihívást jelent számunkra.

Ebben a cikkben röviden elmagyarázzuk a Linux rendszerindítási folyamatának különböző szakaszait, majd megtanuljuk, hogyan állapíthatók meg és hogyan juthatnak el a rendszerindítási problémák mélyére: a megvizsgálandó fájlok vagy a rendszerindítási üzenetek megtekintésére szolgáló parancsok tekintetében.

A Linux rendszerindítási folyamatának összefoglalása

Összefoglalva, ha megnyomjuk a Bekapcsolás gombot, a BIOS (Basic Input Output System) egy alaplapba integrált program végrehajt egy >POST (Bekapcsolási önteszt) – ahol a hardver, például a lemezek, a RAM (Random Access Memory), a billentyűzet stb. Hiba esetén (hiányzó/hibás hardver) megjelenik a képernyőn.

A POST során a BIOS a rendszerindító eszközt is keresi, a lemezt, ahonnan fel kell állítani a státuszt (általában az első merevlemezt, de beállíthatjuk DVD-ként vagy USB-ként is helyett hálózati kártya stb.).

Ezután a rendszer csatlakozik a lemezhez, és megkeresi a Master Boot Record-ot (512 bájt méretű), amely tárolja a rendszertöltőt (446 bájt méretű), a többi terület pedig információkat tárol a lemezpartíciókról. (legfeljebb négy) és magát az MBR-t.

Javasolt olvasmány: 4 legjobb Linux rendszertöltő

A rendszertöltő azonosítja és rámutat, valamint betölti a Kernel-et és az initrd fájlt (inicializáló ram-lemez – hozzáférést biztosít a kernel számára a csatolt gyökérfájlrendszerhez és a /-ben tárolt modulokhoz/illesztőprogramokhoz lib könyvtár), amelyek általában a fájlrendszer /boot könyvtárában vannak tárolva.

A kernel betöltése után végrehajtja az init-et (vagy az újabb Linux disztribúciók esetén systemd-et), az első folyamatot PID 1-vel, amely viszont elindítja a rendszer összes többi folyamatát. Ez egyben az utolsó folyamat, amelyet a rendszer leállításakor végre kell hajtani.

Hogyan lehet megtudni a Linux rendszerindítási problémáit vagy hibaüzeneteit

Ahogy korábban említettük, a Linux rendszerindítási folyamatai olyan gyorsan zajlanak, hogy még a konzolra küldött kimenetek nagy részét sem tudjuk tisztán kiolvasni.

Tehát a rendszerindítási problémák/hibák tudomásul vétele arra kéri a rendszergazdát, hogy bizonyos parancsokkal együtt megvizsgáljon bizonyos fontos fájlokat. És ezek közé tartozik:

/var/log/boot.log – A rendszerindítási üzenetek naplózása

Valószínűleg ez az első fájl, amelybe bele szeretne nézni, hogy megtekinthesse mindazt, ami a rendszerindítás során kibontakozott.

Ahelyett, hogy ennyire igyekeznénk követni a képernyőn megjelenő kimenetet a rendszerindítás során, megtekinthetjük ezt a fájlt a rendszerindítási folyamat befejezése után, hogy segítsen nekünk a rendszerindítási problémák/hibák meghatározásában és megoldásában.

Erre a célra a cat parancsot az alábbiak szerint használjuk (alább látható egy példa ebből a fájlból):

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

A fenti kimenetből láthatjuk, hogy rendszerindítási problémák vannak, amelyeket az alábbi sorok jeleznek.

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

Probléma: Probléma a swap partícióval; a rendszer vagy nem tudta beolvasni a swap fájlt/eszközt/partíciót, vagy nincs jelen.

Ellenőrizzük, hogy a rendszer használ-e csereterületet szabad paranccsal.

free

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

Alternatív megoldásként futtathatjuk a swapon parancsot a rendszer csereterület-használati összefoglalójának megtekintéséhez (nem kapunk kimenetet).

swapon -s

Ezt a problémát úgy oldhatjuk meg, hogy Linuxban swap területet hozunk létre.

Megjegyzés: Ennek a fájlnak a tartalma a rendszer leállításakor törlődik: új adatok kerülnek tárolásra új rendszerindításkor.

/var/log/messages – Általános rendszernaplók

Ez a fájl általános rendszerüzeneteket tárol, beleértve a rendszerindítás során naplózott üzeneteket is.

A megtekintéséhez írja be:

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

Mivel ez a fájl viszonylag hosszú lehet, oldalakon tekinthetjük meg a több paranccsal (amely még százalékot is mutat).

more /var/log/messages

A /var/log/messages tartalma az előző fájltól eltérően nem törli a leállítást, mert nem csak rendszerindítási üzeneteket tartalmaz, hanem más rendszertevékenységekre vonatkozó üzeneteket is. Így a régebbi fájlokat a rendszer tömöríti, és a rendszeren tárolja későbbi ellenőrzés céljából, az alábbiak szerint.

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 – Megjeleníti a kernel üzeneteit

A dmesg parancs a rendszerindítási folyamat befejeztével megjelenítheti a műveleteket, például a kernelnek átadott parancssori opciókat; hardverösszetevők észlelése, események új USB-eszköz hozzáadásakor, vagy olyan hibák, mint a NIC (hálózati interfészkártya) meghibásodása, és az illesztőprogramok nem észleltek kapcsolati tevékenységet a hálózaton, és még sok más.

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 – A Systemd Journal tartalmának lekérdezése

Ez hasznos a legtöbb jelenlegi Linux disztribúcióban, amely a systemd-t használja: a legújabb rendszer- és szolgáltatáskezelőt. Ez alatt a rendszernaplózás a naplókomponensen keresztül történik – ez egy központi hely a különböző összetevők által naplózott összes üzenet számára.

Ezek az üzenetek magukban foglalják a kernel és a rendszerindító üzeneteket; üzeneteket a rendszernaplóból vagy különböző szolgáltatásokból. Használhatjuk a rendszerindítási üzenetek áttekintésére és a rendszerindítási problémák megállapítására a kimenet átolvasásával és az érdekes vonalak azonosításával (a hibákat piros vonal jelzi a terminál szövegének színbeállításaitól függően).

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.

A fenti egy példa a parancs kimenetére, amely egy olyan hibát mutat, amelyet a /var/log/boot.log megtekintésével már azonosítottunk: ez a cserepartíció hiba. További kimeneti sorok megtekintéséhez egyszerűen nyomja meg az [Enter] gombot.

Tekintse meg ezeket a hasznos útmutatókat is a Linux rendszerindításról és a szolgáltatáskezelésről az általános rendszer- és szolgáltatáskezelőkkel kapcsolatban:

  1. Folyamatkezelés az RHEL 7-ben: Boot, Shutdown, and Everything in Between
  2. Rendszerindítási folyamatok és szolgáltatások kezelése (SysVinit, Systemd és Upstart)
  3. Az „init” és a „systemd” mögötti történet: Miért kellett az „init” kifejezést „systemd”-re cserélni

Ebben a cikkben röviden elmagyaráztuk a Linux rendszerindítási folyamatának különböző szakaszait, valamint megtanultuk, hogyan lehet létrehozni és esetleg megoldani a rendszerindítási problémákat. Ha bármilyen gondolatot szeretne hozzáadni ehhez az útmutatóhoz, használja az alábbi megjegyzés űrlapot.