Linux'ta Önyükleme Sorunları Nasıl Belirlenir ve Düzeltilir


Linux sistemi o kadar hızlı açılıyor ki çıktıların çoğu, konsola gönderilen metni (başlatılan hizmetleri gösteren) okuyamayacak kadar hızlı kayıyor. Bu nedenle önyükleme sorunlarını/hatalarını gözlemlemek bizim için biraz zorlayıcı oluyor.

Bu makalede, bir Linux sistem önyükleme sürecindeki farklı aşamaları kısaca açıklayacağız, ardından önyükleme sorunlarının nasıl kurulacağını ve temeline inileceğini öğreneceğiz: incelenecek dosyalar veya sistem önyükleme mesajlarını görüntülemek için komutlar açısından.

Linux Önyükleme Sürecinin Özeti

Özetle, Güç Açma düğmesine bastığımızda, anakarta entegre bir program olan BIOS (Temel Giriş Çıkış Sistemi) bir işlem gerçekleştirir. >POST (Kendi Kendini Test Etme) – diskler, RAM (Rastgele Erişim Belleği), klavye vb. gibi donanımların tarandığı yer. Hata durumunda (eksik/arızalı donanım) ekranda raporlanır.

POST sırasında, BIOS aynı zamanda önyükleme aygıtını ve istatistik işleminin yapılacağı diski de arar (genellikle ilk sabit disktir, ancak bunu bir DVD, USB olarak yapılandırabiliriz). , Ağ Kartı vb.).

Daha sonra sistem diske bağlanacak ve önyükleme yükleyicisini (446 bayt boyutunda) saklayan Ana Önyükleme Kaydı'nı (512 bayt boyutunda) arayacak ve alanın geri kalanı disk bölümleriyle ilgili bilgileri depolayacaktır. (maksimum dört) ve MBR'nin kendisi.

Önerilen Okumalar: En İyi 4 Linux Önyükleme Yükleyicisi

Önyükleme yükleyicisi, Çekirdek'i ve initrd dosyasını (başlatma ram diski) tanımlayacak ve işaret edecek, ayrıca yükleyecektir - çekirdeğin / konumunda depolanan kök dosya sistemine ve modüllere/sürücülere erişimini sağlar lib dizini), genellikle dosya sisteminin /boot dizininde saklanır.

Çekirdek yüklendikten sonra, PID 1 ile ilk işlem olan init'i (veya daha yeni Linux dağıtımlarında systemd) çalıştırır ve bu da sistemdeki diğer tüm işlemleri başlatır. Aynı zamanda sistem kapatıldığında yürütülecek son işlemdir.

Linux Önyükleme Sorunları veya Hata Mesajları Nasıl Bulunur?

Daha önce de belirttiğimiz gibi Linux açılış işlemleri çok hızlı gerçekleşiyor ve konsola gönderilen çıktıların çoğunu net olarak okuyamıyoruz bile.

Bu nedenle, önyükleme sorunlarını/hatalarını not etmek, sistem yöneticisinin belirli komutlarla birlikte belirli önemli dosyalara bakmasını gerektirir. Bunlar şunları içerir:

/var/log/boot.log – Sistem Önyükleme Mesajlarını Günlüğe Kaydeder

Bu muhtemelen sistem önyüklemesi sırasında ortaya çıkan her şeyi görüntülemek için incelemek isteyeceğiniz ilk dosyadır.

Önyükleme sırasında ekrandaki çıktıyı takip etmek için çok çabalamak yerine, önyükleme sorunlarının/hatalarının belirlenmesinde ve çözülmesinde bize yardımcı olması için bu dosyayı önyükleme işlemi tamamlandıktan sonra görüntüleyebiliriz.

Bu amaçla cat komutunu şu şekilde kullanıyoruz (aşağıda bu dosyanın bir örneği bulunmaktadır):

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

Yukarıdaki çıktıdan aşağıdaki satırlarla belirtilen bir önyükleme sorunu olduğunu görebiliriz.

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

Sorun: Takas bölümüyle ilgili sorun; sistem ya takas dosyasını/aygıtını/bölümünü okuyamadı ya da mevcut değil.

Serbest komut ile sistemin takas alanını kullanıp kullanmadığını kontrol edelim.

free

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

Alternatif olarak, sistem takas alanı kullanım özetini görüntülemek için swapon komutunu çalıştırabiliriz (herhangi bir çıktı alamayacağız).

swapon -s

Linux'ta bir takas alanı oluşturarak bu sorunu çözebiliriz.

Not: Bu dosyanın içeriği sistem kapatıldığında temizlenir: yeni veriler yeni önyüklemede bu dosyada saklanır.

/var/log/messages – Genel Sistem Günlükleri

Bu dosya, sistem önyüklemesi sırasında günlüğe kaydedilen mesajlar da dahil olmak üzere genel sistem mesajlarını saklar.

Görüntülemek için şunu yazın:

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

Bu dosya nispeten uzun olabileceğinden, bunun gibi more komutunu (hatta yüzdeyi de gösterir) kullanan sayfalarda görüntüleyebiliriz.

more /var/log/messages

/var/log/messages içeriği önceki dosyadan farklı olarak kapatılma işlemiyle temizlenmez çünkü bu dosya yalnızca önyükleme mesajlarını değil aynı zamanda diğer sistem etkinlikleriyle ilgili mesajları da içerir. Böylece eski dosyalar sıkıştırılır ve aşağıda gösterildiği gibi daha sonra incelenmek üzere sistemde tutulur.

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 – Çekirdek Mesajlarını Gösterir

dmesg komutu, çekirdeğe iletilen komut satırı seçenekleri gibi, önyükleme işlemi tamamlandıktan sonra yapılan işlemleri gösterebilir; algılanan donanım bileşenleri, yeni bir USB aygıtı eklendiğinde yaşanan olaylar veya NIC (Ağ Arayüz Kartı) arızası gibi hatalar ve sürücülerin ağda hiçbir bağlantı etkinliği algılanmadığını bildirmesi ve çok daha fazlası.

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 – Systemd Journal'ın Sorgu İçeriği

Bu, systemd'yi kullanan mevcut Linux dağıtımlarının çoğunda kullanışlıdır: en yeni sistem ve hizmet yöneticisi. Bunun altında, sistem günlüğü, farklı bileşenler tarafından günlüğe kaydedilen tüm mesajlar için merkezi bir konum olan günlük bileşeni aracılığıyla yapılır.

Bu mesajlar çekirdek ve önyükleme mesajlarını içerir; Sistem günlüğünden veya çeşitli hizmetlerden gelen mesajlar. Bunu, önyükleme mesajlarını gözden geçirmek ve çıktıyı okuyarak ve ilgilenilen satırları belirleyerek (terminal metni renk ayarlarına bağlı olarak kırmızı çizgilerle gösterilen hatalar) önyükleme sorunlarını belirlemek için kullanabiliriz.

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.

Yukarıdaki, zaten /var/log/boot.log'u görüntüleyerek belirlediğimiz bir hatayı gösteren komut çıktısının bir örneğidir: takas bölümü hatası. Daha fazla çıktı satırı görüntülemek için [Enter] düğmesine basmanız yeterlidir.

Ayrıca, ortak sistem ve hizmet yöneticileriyle ilişkili olarak Linux sistem önyüklemesi ve hizmet yönetimine ilişkin şu yararlı kılavuzlara da göz atın:

  1. RHEL 7'de Süreç Yönetimi: Önyükleme, Kapatma ve Aradaki Her Şey
  2. Sistem Başlatma Sürecini ve Hizmetlerini Yönetme (SysVinit, Systemd ve Upstart)
  3. 'init' ve 'systemd'nin Arkasındaki Hikaye: Neden 'init'in 'systemd' ile Değiştirilmesi Gerekti?

Bu makalede, Linux sistem önyükleme sürecindeki farklı aşamaları kısaca açıkladık ve ayrıca önyükleme sorunlarının nasıl kurulacağını ve muhtemelen çözüleceğini öğrendik. Bu kılavuza herhangi bir düşünce eklemek için aşağıdaki yorum formunu kullanın.