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:
- Folyamatkezelés az RHEL 7-ben: Boot, Shutdown, and Everything in Between
- Rendszerindítási folyamatok és szolgáltatások kezelése (SysVinit, Systemd és Upstart)
- 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.