ວິທີການ ກຳ ນົດແລະແກ້ໄຂບັນຫາບູດໃນ Linux


ລະບົບ Linux ມີຄວາມໄວສູງທີ່ຜົນຜະລິດສ່ວນໃຫຍ່ເລື່ອນລົງໂດຍໄວທີ່ຈະອ່ານຂໍ້ຄວາມ (ສະແດງການບໍລິການທີ່ເລີ່ມຕົ້ນ) ຖືກສົ່ງໄປທີ່ console. ດັ່ງນັ້ນການສັງເກດບັນຫາ/ຂໍ້ຜິດພາດຂອງເກີບເລີ່ມຕົ້ນກາຍເປັນສິ່ງທ້າທາຍ ໜ້ອຍ ໜຶ່ງ ສຳ ລັບພວກເຮົາ.

ໃນບົດຂຽນນີ້, ພວກເຮົາຈະອະທິບາຍໂດຍຫຍໍ້ກ່ຽວກັບໄລຍະຕ່າງໆໃນຂັ້ນຕອນການເຮັດວຽກຂອງລະບົບ Linux, ຈາກນັ້ນຮຽນຮູ້ວິທີການຕັ້ງແລະເຂົ້າຫາດ້ານລຸ່ມຂອງບັນຫາ boot: ໃນຂໍ້ ກຳ ນົດເອກະສານເພື່ອເບິ່ງຫລື ຄຳ ສັ່ງເພື່ອເບິ່ງຂໍ້ຄວາມ boot system.

ບົດສະຫຼຸບຂອງ Linux Boot Process

ສະຫລຸບລວມແລ້ວ, ເມື່ອພວກເຮົາກົດປຸ່ມ Power On, BIOS (Basic Input Output System) ໂປແກຼມທີ່ປະສົມປະສານເຂົ້າໃນ motherboard ປະຕິບັດ POST (Power on Self Test) - ບ່ອນທີ່ມີຮາດແວເຊັ່ນ: disk, RAM (Random Access Memory), keyboard, ແລະອື່ນໆແມ່ນຖືກສະແກນ. ໃນກໍລະນີທີ່ມີຂໍ້ຜິດພາດ (ຮາດແວທີ່ຂາດຫາຍໄປ/ຜິດປົກກະຕິ), ມັນຈະຖືກລາຍງານໃນ ໜ້າ ຈໍ.

ໃນລະຫວ່າງ POST, BIOS ຍັງຊອກຫາອຸປະກອນບູດ, ແຜ່ນທີ່ຈະຂື້ນຈາກ (ປົກກະຕິແມ່ນຮາດດິດ ທຳ ອິດ, ເຖິງຢ່າງໃດກໍ່ຕາມພວກເຮົາອາດຈະ ກຳ ນົດມັນໃຫ້ເປັນ DVD, USB, Network Card ແລະອື່ນໆແທນ).

ຫຼັງຈາກນັ້ນລະບົບຈະເຊື່ອມຕໍ່ກັບແຜ່ນດິດແລະຄົ້ນຫາ Master Boot Record (ຂະ ໜາດ 512 ໄບຕ໌) ເຊິ່ງເກັບຮັກສາເຄື່ອງບູດຄອມພິວເຕີ້ (ຂະ ໜາດ 446 ໄບ) ແລະສ່ວນທີ່ເຫຼືອຂອງຂໍ້ມູນພື້ນທີ່ເກັບຂໍ້ມູນກ່ຽວກັບການແບ່ງປັນແຜ່ນ (4 ສູງສຸດ) ແລະ MBR ຕົວຂອງມັນເອງ.

ໂປແກຼມ boot loader ຈະ ກຳ ນົດແລະຊີ້ໄປພ້ອມກັບການໂຫຼດ Kernel ແລະເອກະສານ initrd (disk disk ເລີ່ມຕົ້ນ - ໃຫ້ລະບົບ kernel ເຂົ້າເຖິງລະບົບແຟ້ມຮາກທີ່ຕິດຕັ້ງແລະໂມດູນ/ໄດເວີທີ່ເກັບໄວ້ໃນ/lib directory) ເຊິ່ງໂດຍທົ່ວໄປຈະຖືກເກັບໄວ້ໃນ/boot directory ຂອງລະບົບແຟ້ມ.

ຫຼັງຈາກທີ່ແກ່ນໄດ້ຖືກໂຫລດ, ມັນຈະປະຕິບັດ init (ຫຼື systemd ກ່ຽວກັບ Linux ທີ່ຖືກລົບກວນ ໃໝ່), ແມ່ນຂັ້ນຕອນ ທຳ ອິດກັບ PID 1, ເຊິ່ງມັນຈະເລີ່ມຕົ້ນທຸກໆຂະບວນການອື່ນໆໃນລະບົບ. ມັນກໍ່ແມ່ນຂະບວນການສຸດທ້າຍທີ່ຈະຖືກປະຕິບັດໃນການປິດລະບົບ.

ວິທີການຄົ້ນຫາບັນຫາກ່ຽວກັບ Linux boot ຫຼືຂໍ້ຄວາມຜິດພາດ

ດັ່ງທີ່ພວກເຮົາໄດ້ກ່າວມາກ່ອນ, ຂະບວນການເຮັດວຽກຂອງ Linux ເກີດຂື້ນຢ່າງໄວວາທີ່ພວກເຮົາຍັງບໍ່ສາມາດອ່ານຜົນໄດ້ຮັບສ່ວນໃຫຍ່ຂອງຜົນໄດ້ຮັບທີ່ຖືກສົ່ງໄປທີ່ console.

ສະນັ້ນການຈົດບັນທຶກບັນຫາ/ຂໍ້ຜິດພາດທີ່ຮຽກຮ້ອງໃຫ້ຜູ້ເບິ່ງແຍງລະບົບເບິ່ງເຂົ້າໄປໃນເອກະສານທີ່ ສຳ ຄັນສະເພາະໂດຍສົມທົບກັບ ຄຳ ສັ່ງສະເພາະ. ແລະເຫຼົ່ານີ້ລວມມີ:

ນີ້ແມ່ນເອກະສານ ທຳ ອິດທີ່ທ່ານຕ້ອງການເບິ່ງ, ເພື່ອເບິ່ງທຸກສິ່ງທີ່ເປີດເຜີຍໃນລະຫວ່າງການເລີ່ມຕົ້ນລະບົບ.

ແທນທີ່ຈະພະຍາຍາມຢ່າງ ໜັກ ເພື່ອຕິດຕາມຜົນຜະລິດໃນ ໜ້າ ຈໍໃນລະຫວ່າງການບູດເຄື່ອງ, ພວກເຮົາສາມາດເບິ່ງເອກະສານນີ້ໄດ້ຫຼັງຈາກຂະບວນການບູດໄດ້ ສຳ ເລັດເພື່ອຊ່ວຍພວກເຮົາໃນການ ກຳ ນົດແລະແກ້ໄຂບັນຫາ/ຂໍ້ຜິດພາດຂອງເກີບ.

ພວກເຮົາໃຊ້ ຄຳ ສັ່ງແມວ ສຳ ລັບຈຸດປະສົງດັ່ງຕໍ່ໄປນີ້ (ຂ້າງລຸ່ມນີ້ແມ່ນຕົວຢ່າງຂອງເອກະສານນີ້):

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

ຈາກຜົນໄດ້ຮັບຂ້າງເທິງ, ພວກເຮົາສາມາດເຫັນໄດ້ວ່າມີບັນຫາການໃສ່ເກີບທີ່ບົ່ງໄວ້ໂດຍສາຍຂ້າງລຸ່ມ.

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

ປະເດັນ: ປັນຫາກັບການແບ່ງປັນການແລກປ່ຽນ; ລະບົບບໍ່ໄດ້ອ່ານໄຟລ໌ແລກປ່ຽນ/ອຸປະກອນ/ສ່ວນແບ່ງຫລືມັນບໍ່ມີຢູ່.

ກວດເບິ່ງວ່າລະບົບ ກຳ ລັງໃຊ້ພື້ນທີ່ແລກປ່ຽນປະສົບໂດຍມີ ຄຳ ສັ່ງຟຣີຫລືບໍ່.

# free

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

ອີກທາງເລືອກ ໜຶ່ງ, ພວກເຮົາອາດຈະໃຊ້ ຄຳ ສັ່ງ swapon ເພື່ອເບິ່ງບົດສະຫຼຸບການ ນຳ ໃຊ້ພື້ນທີ່ແລກປ່ຽນລະບົບ (ພວກເຮົາຈະບໍ່ໄດ້ຮັບຜົນຜະລິດໃດໆ).

# swapon -s

ພວກເຮົາສາມາດແກ້ໄຂບັນຫານີ້, ໂດຍການສ້າງພື້ນທີ່ແລກປ່ຽນປະສົບໃນ Linux.

ໝາຍ ເຫດ: ເນື້ອໃນຂອງເອກະສານນີ້ຈະຖືກລຶບລ້າງໃນເວລາປິດລະບົບ: ຂໍ້ມູນ ໃໝ່ ຈະຖືກເກັບໄວ້ໃນມັນໃສ່ເກີບ ໃໝ່.

ແຟ້ມເອກະສານນີ້ເກັບຮັກສາຂໍ້ຄວາມຂອງລະບົບທົ່ວໄປ, ລວມທັງຂໍ້ຄວາມທີ່ຖືກບັນທຶກລົງໃນລະບົບເກີບ.

ເພື່ອເບິ່ງມັນ, ພິມ:

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

ເນື່ອງຈາກວ່າເອກະສານນີ້ອາດຈະຍາວພໍສົມຄວນ, ພວກເຮົາສາມາດເບິ່ງມັນໃນ ໜ້າ ຕ່າງໆໂດຍໃຊ້ ຄຳ ສັ່ງຫຼາຍຂື້ນ (ເຊິ່ງສະແດງເຖິງເປີເຊັນ) ເຊັ່ນນີ້.

# more /var/log/messages

ເນື້ອໃນຂອງ/var/log/ຂໍ້ຄວາມບໍ່ຄືກັບເອກະສານທີ່ຜ່ານມາບໍ່ໄດ້ຖືກລຶບລ້າງການປິດເພາະມັນບໍ່ພຽງແຕ່ມີຂໍ້ຄວາມ boot ແຕ່ຂໍ້ຄວາມທີ່ກ່ຽວຂ້ອງກັບກິດຈະ ກຳ ຂອງລະບົບອື່ນໆເຊັ່ນກັນ. ດັ່ງນັ້ນເອກະສານເກົ່າຈະຖືກບີບອັດແລະເກັບຮັກສາໄວ້ໃນລະບົບເພື່ອກວດກາຕໍ່ມາຕາມຮູບຂ້າງລຸ່ມ.

# 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 ສາມາດສະແດງການ ດຳ ເນີນງານໄດ້ເມື່ອຂະບວນການບູດ ສຳ ເລັດແລ້ວ, ເຊັ່ນວ່າຕົວເລືອກເສັ້ນ ຄຳ ສັ່ງທີ່ຖືກສົ່ງໄປຫາແກ່ນ; ສ່ວນປະກອບຂອງຮາດແວຖືກກວດພົບ, ເຫດການຕ່າງໆເມື່ອມີການເພີ່ມອຸປະກອນ USB ໃໝ່, ຫຼືຂໍ້ຜິດພາດຕ່າງໆເຊັ່ນຄວາມລົ້ມເຫຼວຂອງ NIC (Network Interface Card) ແລະຜູ້ຂັບຂີ່ລາຍງານວ່າບໍ່ມີກິດຈະ ກຳ ເຊື່ອມຕໍ່ທີ່ຖືກກວດພົບໃນເຄືອຂ່າຍແລະອື່ນໆ.

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

ມັນມີປະໂຫຍດໃນການແຈກແຈງ Linux ສ່ວນຫລາຍໂດຍໃຊ້ລະບົບ: ຜູ້ຈັດການລະບົບ ໃໝ່ ແລະບໍລິການ ໃໝ່. ພາຍໃຕ້ມັນ, ການເຂົ້າສູ່ລະບົບແມ່ນເຮັດຜ່ານສ່ວນປະກອບຂອງວາລະສານ - ສະຖານທີ່ທີ່ເປັນຈຸດສູນກາງ ສຳ ລັບທຸກໆຂໍ້ຄວາມທີ່ເຂົ້າໃຊ້ໂດຍສ່ວນປະກອບຕ່າງໆ.

ຂໍ້ຄວາມເຫລົ່ານີ້ປະກອບມີຂໍ້ຄວາມ kernel ແລະ boot; ຂໍ້ຄວາມຈາກ syslog ຫຼືບໍລິການຕ່າງໆ. ພວກເຮົາສາມາດໃຊ້ມັນເພື່ອທົບທວນຂໍ້ຄວາມໃສ່ເກີບແລະສ້າງບັນຫາ boot ໂດຍການອ່ານຜ່ານຜົນຜະລິດແລະການ ກຳ ນົດສາຍທີ່ສົນໃຈ (ຂໍ້ຜິດພາດທີ່ຊີ້ໃຫ້ເຫັນໂດຍສາຍສີແດງຂື້ນຢູ່ກັບການຕັ້ງຄ່າຂໍ້ຄວາມຂອງ terminal).

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

ຂ້າງເທິງນີ້ແມ່ນຕົວຢ່າງຂອງຜົນຜະລິດ ຄຳ ສັ່ງທີ່ສະແດງຂໍ້ຜິດພາດທີ່ພວກເຮົາໄດ້ ກຳ ນົດໂດຍການເບິ່ງ /var/log/boot.log: ຂໍ້ຜິດພາດຂອງການແລກປ່ຽນຂໍ້ມູນ. ເພື່ອເບິ່ງສາຍການຜະລິດຫຼາຍຂື້ນ, ພຽງແຕ່ກົດປຸ່ມ Enter.

ກວດເບິ່ງ ຄຳ ແນະ ນຳ ທີ່ເປັນປະໂຫຍດເຫລົ່ານີ້ກ່ຽວກັບລະບົບບູດລະບົບ Linux ແລະການບໍລິການທີ່ກ່ຽວຂ້ອງກັບຜູ້ຈັດການລະບົບທົ່ວໄປແລະຜູ້ບໍລິການ:

<

  • ການຄຸ້ມຄອງຂະບວນການໃນ RHEL 7: ເກີບ, ການປິດ, ແລະທຸກຢ່າງໃນລະຫວ່າງ
  • ການຄຸ້ມຄອງຂັ້ນຕອນແລະການບໍລິການເລີ່ມຕົ້ນຂອງລະບົບ (SysVinit, Systemd ແລະ Upstart)
  • ເລື່ອງຢູ່ເບື້ອງຫຼັງ ‘init’ ແລະ ‘systemd’: ເປັນຫຍັງ“ init” ຈຳ ເປັນຕ້ອງມີການປ່ຽນແທນດ້ວຍ 'systemd'
  • ໃນບົດຂຽນນີ້, ພວກເຮົາໄດ້ອະທິບາຍໂດຍຫຍໍ້ໃນໄລຍະທີ່ແຕກຕ່າງກັນໃນຂະບວນການບູດລະບົບ Linux ພ້ອມທັງໄດ້ຮຽນຮູ້ວິທີການສ້າງຕັ້ງແລະອາດຈະແກ້ໄຂບັນຫາ boot. ເພື່ອເພີ່ມຄວາມຄິດໃດໆໃນຄູ່ມືນີ້, ໃຫ້ໃຊ້ແບບຟອມ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້.