مجازی سازیمقالات وب

چگونه مشکلات بوت در لینوکس را شناسایی و برطرف کنیم؟

معمولا سیستم به سرعت بوت می شود و همین امر باعث می شود اسکرول کردن و خواندن متنی که به هنگام بوت ظاهر می شود دشوار گردد.  به همین خاطر است که مشاهده و شناسایی مشکلات و های مرتبط با بوت در لینوکس کمی چالش برانگیز است. در این مقاله به طور مختصر مراحل مختلف بوت را در لینوکس توضیح خواهیم داد و سپس نحوه برطرف کردن خطاهای مرتبط با آن را با هم مرور خواهیم کرد. پس همراه وب ایده باشید.

 خلاصه ای از فرایند بوت در لینوکس:

به طور خلاصه زمانی که ما دکمه Power on را فشار می دهیم،   فرایند POST را انجام می دهد که در آن یی همچون دیسک ها، ، کیبورد و سایر موارد اسکن می شود. زمانی که خطایی وجود داشته باشد این خطا بر روی صفحه نمایش گزارش خواهد شد.  در نهایت سیستم به دیسک موردنظر متصل خواهد شد و به دنبال Master Boot Record می گردد و باقی مانده فضا اطلاعاتی را در مورد های دیسک و خود MBR  ذخیره می سازد. بعد از بارگذاری kernel، با PID1 فرایند اولیه اجرا می شود و سپس سایر فرایندها بر روی سیستم آغاز می گردد.

چگونه مشکلات و خطاهای بوت را در لینوکس پیدا کنیم؟

همانطور که قبلا نیز بیان کردیم، فرآیند بوت به سرعت رخ می دهد  و نمی توان به طور واضح تمامی خروجی ها را مطالعه کرد. به همین خاطر مدیران سیستم برای اینکه خطاها و را شناسایی کنند باید فایل های مهم را به همراه دستورهای خاص مورد بررسی قرار دهند. این ها در برگیرنده موارد زیر است:

/var/log/boot.log – Logs System Boot Messages

این گزینه به احتمال زیاد اولین فایلی است که باید به دنبالش باشید تا بتوانید مشکلات موجود در طول بوت سیستم را شناسایی نمایید. به جای اینکه به هنگام بوت سیستم به صفحه نمایش نگاه کنید و به دنبال خروجی آن باشید می توانید بعد از تکمیل فرایند بوت، نگاهی به این فایل بیندازید.ما از دستور  cat برای این منظور استفاده کرده ایم:

# cat /var/log/boot.log

 

به کمک دستور زیر می توانید فایل 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 .

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

در این خروجی می بینید که مشکلی با swap partition وجود دارد. سیستم نتوانسته swap file/device/partition را بخواند یا اصلا این فایل وجود ندارد. اجازه دهید ببینیم سیستم از فضای swap استفاده کرده است؟ برای اینکار از دستور free استفاده می کنیم.

# free

total        used        free      shared  buff/cache   available

Mem:        ۳۷۴۲۷۹۲     ۲۴۲۱۰۶۰      ۴۳۳۶۹۶      ۲۸۷۳۷۶      ۸۸۸۰۳۶      ۹۶۷۰۰۰

Swap:             ۰           ۰           ۰

می توانیم دستور swapon را اجرا کنیم تا  خلاصه مصرف swap space را مشاهده کنیم:

# swapon -s

با ایجاد swap space در لینوکس می توانیم چنین مشکلاتی را حل کنیم. به خاطر داشته باشید که محتوای این فایل  در فرایند shutdown سیستم پاک می شود و داده های جدیدی در آن ذخیره می گردد.

/var/log/messages – General System Logs

این فایل های عمومی سیستم همچون پیام هایی که در طول بوت سیستم ذخیره می شود را در خود نگه می دارد.  برای دیدن آن می توانید دستور زیر را تایپ کنید:

# cat /var/log/messages

پیام سیستم log را مشاهده کنید

Jun  ۴ ۱۳:۰۴:۴۴ tecmint syslogd (GNU inetutils 1.9.4): restart

Jun  ۴ ۱۳:۱۹:۵۵ tecmint — MARK —

Jun  ۴ ۱۳:۳۹:۵۵ tecmint — MARK —

Jun  ۴ ۱۳:۵۹:۵۵ tecmint — MARK —

Jun  ۴ ۱۴:۱۹:۵۵ tecmint — MARK —

Jun  ۴ ۱۴:۲۰:۱۷ tecmint vmunix: [ 4945.388740] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment

Jun  ۴ ۱۴:۲۰:۱۷ tecmint vmunix: [ 4945.388837] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment

Jun  ۴ ۱۴:۲۰:۱۷ tecmint vmunix: [ 4945.388903] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment

Jun  ۴ ۱۴:۲۰:۱۷ tecmint vmunix: [ 4945.388930] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment

Jun  ۴ ۱۴:۲۰:۱۷ tecmint vmunix: [ 4945.389334] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment

Jun  ۴ ۱۴:۲۰:۱۷ tecmint vmunix: [ 4945.389402] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0xdfa00000-0xdfbfffff 64bit pref]

…..

از انجایی که این فایل ممکن است طولانی باشد می توانیم آن را به کمک دستور more در صفحات مختلف ببینیم.

# more /var/log/messages

محتوای /var/log/messages  بر خلاف فایل قبلی با shutdown از بین نمی رود زیرا تنها در برگیرنده پیام های بوت نیست و سایر فعالیت های سیستم را در خود نگه می دارد.  به همین خاطر فایل های قدیمی فشرده شده و برای موارد بعدی ذخیره می شوند:

# ls -l message*

-rw-r–r– 1 root root 1206127 Jun 10 14:20 messages

-rw-r–r– 1 root root 1419494 Jun  ۴ ۱۳:۰۰ messages.1

-rw-r–r– 1 root root  ۱۵۳۰۱۱ May 28 09:30 messages.2.gz

dmesg – Shows Kernel Messages

دستور بالا می تواند عملیات را بعد از تکمیل فرایند بوت نشان دهد.

# dmesg

پیام های kernel را نشان می دهد

[    ۰٫۰۰۰۰۰۰] Initializing cgroup subsys cpuset

[    ۰٫۰۰۰۰۰۰] Initializing cgroup subsys cpu

[    ۰٫۰۰۰۰۰۰] Initializing cgroup subsys cpuacct

[    ۰٫۰۰۰۰۰۰] 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)

[    ۰٫۰۰۰۰۰۰] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=57b36d48-1938-43c2-bf85-e97bc9f423ea ro quiet splash

[    ۰٫۰۰۰۰۰۰] KERNEL supported cpus:

[    ۰٫۰۰۰۰۰۰]   Intel GenuineIntel

[    ۰٫۰۰۰۰۰۰]   AMD AuthenticAMD

[    ۰٫۰۰۰۰۰۰]   Centaur CentaurHauls

[    ۰٫۰۰۰۰۰۰] x86/fpu: xstate_offset[2]:  ۵۷۶, xstate_sizes[2]:  ۲۵۶

[    ۰٫۰۰۰۰۰۰] x86/fpu: Supporting XSAVE feature 0x01: ‘x87 floating point registers'

[    ۰٫۰۰۰۰۰۰] x86/fpu: Supporting XSAVE feature 0x02: ‘SSE registers'

[    ۰٫۰۰۰۰۰۰] x86/fpu: Supporting XSAVE feature 0x04: ‘AVX registers'

[    ۰٫۰۰۰۰۰۰] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using ‘standard' format.

[    ۰٫۰۰۰۰۰۰] x86/fpu: Using ‘eager' FPU context switches.

[    ۰٫۰۰۰۰۰۰] e820: BIOS-provided physical RAM map:

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000000000000-0x000000000008ffff] usable

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000000090000-0x00000000000bffff] reserved

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000040005000-0x0000000080b2ffff] usable

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000080b30000-0x0000000080d31fff] reserved

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x0000000080d32000-0x00000000ce3eefff] usable

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x00000000ce3ef000-0x00000000ce5eefff] type 20

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x00000000ce5ef000-0x00000000daeeefff] reserved

[    ۰٫۰۰۰۰۰۰] BIOS-e820: [mem 0x00000000daeef000-0x00000000daf9efff] ACPI NVS

….

journalctl – Query Contents of Systemd Journal

این یک دستور کاربردی و مفید در لینوکس است. تحت این دستور، لاگ شدن سیستم از طریق کامپوننت journal انجام می شود. این پیام ها در برگیرنده کرنل و پیام های بوت ، پیام از syslog یا سرویس های متعدد است. می توانیم از آن برای مرور و بررسی پیام های بوت و شناسایی مشکلات بوت از طریق خواندن خروجی و تعیین خطوط موردنظر استفاده کنیم.

# journalctl

محتوای SystemD را نشان می دهد

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: the swap partition error به دست اورده ایم. برای دیدن خطوط بیشتر خروجی می توانید دکمه اینتر را بزنید.

Rate this post
برچسب ها

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن