Jinsi ya Kuamua na Kurekebisha Maswala ya Boot katika Linux


Mfumo wa Linux huwaka haraka sana hivi kwamba matokeo mengi husonga haraka sana kusoma maandishi (kuonyesha huduma zinazoanzishwa) kutumwa kwa dashibodi. Kwa hivyo kutazama maswala/makosa ya buti inakuwa changamoto kidogo kwetu.

Katika makala hii, tutaelezea kwa ufupi hatua tofauti katika mchakato wa boot ya mfumo wa Linux, kisha ujifunze jinsi ya kuanzisha na kupata chini ya masuala ya boot: kwa maneno faili za kuangalia au amri za kutazama ujumbe wa boot ya mfumo.

Muhtasari wa Mchakato wa Boot ya Linux

Kwa muhtasari, mara tu tunapobonyeza kitufe cha Kuwasha Nguvu, BIOS (Mfumo wa Pato la Msingi) programu iliyojumuishwa kwenye ubao-mama hufanya POST (Nguvu ya Kujijaribu) - ambapo vifaa kama vile diski, RAM (Kumbukumbu ya Ufikiaji wa Random), kibodi, nk huchanganuliwa. Katika kesi ya hitilafu (kifaa kinachokosekana/kutofanya kazi vizuri), inaripotiwa kwenye skrini.

Wakati wa POST, BIOS pia hutafuta kifaa cha boot, diski ya kuweka takwimu kutoka (kawaida diski kuu ya kwanza, hata hivyo tunaweza kuisanidi kuwa DVD, USB, Kadi ya Mtandao nk badala yake).

Kisha mfumo utaunganishwa kwenye diski na utafute Rekodi ya Kianzi kikuu (kwa ukubwa wa baiti 512) ambayo huhifadhi kipakiaji cha buti (baiti 446 kwa saizi) na maelezo mengine ya nafasi kuhusu sehemu za diski (nne ya juu) na MBR. yenyewe.

Kipakiaji cha buti kitatambua na kuelekeza, na pia kupakia Kernel na faili ya initrd (diski ya kondoo ya uanzishaji - hutoa ufikiaji wa kernel kwa mfumo wa faili uliowekwa wa mizizi na moduli/viendeshi vilivyohifadhiwa kwenye saraka ya /lib), ambayo kwa ujumla huhifadhiwa kwenye /boot saraka ya mfumo wa faili.

Baada ya kernel kupakiwa, hutekeleza init (au systemd kwenye Linux distros mpya), mchakato wa kwanza na PID 1, ambayo huanza michakato mingine yote kwenye mfumo. Pia ni mchakato wa mwisho kutekelezwa kwenye kuzima kwa mfumo.

Jinsi ya kujua Masuala ya Boot ya Linux au Ujumbe wa Makosa

Kama tulivyotaja hapo awali, michakato ya uanzishaji wa Linux hufanyika kwa kasi ambayo hatuwezi hata kusoma kwa uwazi matokeo mengi yaliyotumwa kwa koni.

Kwa hivyo kuzingatia maswala/makosa ya buti inahitaji msimamizi wa mfumo kuangalia faili fulani muhimu kwa kushirikiana na amri fulani. Na hizi ni pamoja na:

Labda hii ndiyo faili ya kwanza unayotaka kuangalia, kutazama yote ambayo yalifunuliwa wakati wa kuwasha mfumo.

Badala ya kujaribu kwa bidii kufuata matokeo kwenye skrini wakati wa kuwasha, tunaweza kutazama faili hii baada ya mchakato wa kuwasha kukamilika ili kutusaidia katika kubainisha na kutatua masuala/makosa ya kuwasha.

Tunatumia paka amri kwa kusudi hilo kama ifuatavyo (chini ni sampuli ya faili hii):

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

Kutoka kwa pato hapo juu, tunaweza kuona kwamba kuna masuala ya boot yaliyoonyeshwa na mistari hapa chini.

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

Suala: Tatizo na kizigeu cha kubadilishana; mfumo ama umeshindwa kusoma faili/kifaa/kizigeu cha kubadilishana au haupo.

Wacha tuangalie ikiwa mfumo unatumia nafasi ya kubadilishana na amri ya bure.

# free

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

Vinginevyo, tunaweza kutekeleza amri ya kubadilishana ili kuona muhtasari wa matumizi ya nafasi ya kubadilishana mfumo (hatutapata matokeo yoyote).

# swapon -s

Tunaweza kutatua suala hili, kwa kuunda nafasi ya kubadilishana katika Linux.

Kumbuka: Yaliyomo kwenye faili hii yanafutwa wakati wa kuzima mfumo: data mpya huhifadhiwa ndani yake kwenye buti mpya.

Faili hii huhifadhi ujumbe wa mfumo wa jumla, ikiwa ni pamoja na ujumbe ambao umeingia wakati wa kuwasha mfumo.

Ili kuiona, chapa:

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

Kwa sababu faili hii inaweza kuwa ndefu kiasi, tunaweza kuiona katika kurasa kutumia amri zaidi (ambayo inaonyesha hata asilimia) kama hii.

# more /var/log/messages

Yaliyomo kwenye /var/log/messages tofauti na faili iliyotangulia haijafutwa kuzima kwa sababu haina ujumbe wa boot tu bali pia ujumbe kuhusu shughuli zingine za mfumo. Kwa hivyo faili za zamani hubanwa na kuwekwa kwenye mfumo kwa ukaguzi wa baadaye kama inavyoonyeshwa hapa chini.

# 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

Amri ya dmesg inaweza kuonyesha utendakazi mara tu mchakato wa kuwasha utakapokamilika, kama vile chaguzi za mstari wa amri zinazopitishwa kwenye kernel; vipengele vya maunzi vimetambuliwa, matukio wakati kifaa kipya cha USB kinapoongezwa, au hitilafu kama vile kutofaulu kwa NIC (Network Interface Card) na viendeshi huripoti hakuna shughuli ya kiungo iliyogunduliwa kwenye mtandao na mengine mengi.

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

Hii ni muhimu katika distros nyingi za sasa za Linux kwa kutumia systemd: mfumo mpya zaidi na meneja wa huduma. Chini yake, uwekaji kumbukumbu wa mfumo unafanywa kupitia kipengele cha jarida - eneo la kati kwa ujumbe wote ulioingia na vipengele tofauti.

Ujumbe huu ni pamoja na kernel na ujumbe wa boot; ujumbe kutoka kwa syslog au huduma mbalimbali. Tunaweza kuitumia kukagua ujumbe wa kuwasha na kuanzisha masuala ya kuwasha kifaa kwa kusoma matokeo na kutambua njia zinazovutia (makosa yaliyoonyeshwa na mistari nyekundu kulingana na mipangilio ya rangi ya maandishi ya mwisho).

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

Hapo juu ni sampuli ya pato la amri inayoonyesha kosa ambalo tayari tumetambua kwa kutazama /var/log/boot.log: hitilafu ya kugawanya. Ili kuona laini zaidi za matokeo, bonyeza tu kitufe cha [Enter].

Pia angalia miongozo hii muhimu kuhusu uanzishaji wa mfumo wa Linux na usimamizi wa huduma kuhusiana na wasimamizi wa kawaida wa mfumo na huduma:

  1. Usimamizi wa Mchakato katika RHEL 7: Anzisha, Zima, na Kila Kitu Kati
  2. Kusimamia Mchakato na Huduma za Kuanzisha Mfumo (SysVinit, Systemd na Upstart)
  3. Hadithi ya Nyuma ya ‘init’ na ‘systemd’: Kwa nini ‘init’ Inahitajika Kubadilishwa na ‘systemd’

Katika makala hii, tulielezea kwa ufupi hatua tofauti katika mchakato wa boot ya mfumo wa Linux na pia kujifunza jinsi ya kuanzisha na uwezekano wa kutatua masuala ya boot. Ili kuongeza wazo lolote kwa mwongozo huu, tumia fomu ya maoni hapa chini.