Wyszukiwanie w witrynie

Jak określić i naprawić problemy z uruchamianiem w systemie Linux


System Linux uruchamia się tak szybko, że większość danych wyjściowych przewija się zbyt szybko, aby odczytać tekst (pokazujący uruchamianie usług) wysłany do konsoli. Dlatego obserwowanie problemów/błędów podczas uruchamiania staje się dla nas pewnym wyzwaniem.

W tym artykule pokrótce wyjaśnimy różne etapy procesu uruchamiania systemu Linux, a następnie dowiemy się, jak ustalić i dotrzeć do sedna problemów z uruchamianiem: w zakresie plików, które należy sprawdzić, lub poleceń umożliwiających przeglądanie komunikatów rozruchowych systemu.

Podsumowanie procesu uruchamiania systemu Linux

Podsumowując, po naciśnięciu przycisku Włącz, BIOS (Basic Input Output System), program zintegrowany z płytą główną, wykonuje >POST (Autotest po włączeniu) – podczas którego skanowany jest sprzęt, taki jak dyski, pamięć RAM (pamięć o dostępie swobodnym), klawiatura itp. W przypadku wystąpienia błędu (brak/nieprawidłowe działanie sprzętu) jest on sygnalizowany na ekranie.

Podczas POST, BIOS szuka również urządzenia startowego, dysku, z którego chcesz wykonać statystyki (zwykle jest to pierwszy dysk twardy, chociaż możemy go skonfigurować jako DVD, USB , karta sieciowa itp.).

Następnie system połączy się z dyskiem i wyszuka główny rekord rozruchowy (o rozmiarze 512 bajtów), w którym przechowywany jest moduł ładujący (o rozmiarze 446 bajtów), a reszta miejsca przechowuje informacje o partycjach dysku (maksymalnie cztery) i sam MBR.

Sugerowana lektura: 4 najlepsze programy ładujące Linuksa

Program ładujący zidentyfikuje i wskaże, a także załaduje jądro i plik initrd (dysk inicjujący RAM – zapewnia jądru dostęp do zamontowanego głównego systemu plików i modułów/sterowników przechowywanych w / lib), które są zazwyczaj przechowywane w katalogu /boot systemu plików.

Po załadowaniu jądra wykonuje init (lub systemd w nowszych dystrybucjach Linuksa), pierwszy proces z PID 1, który z kolei uruchamia wszystkie inne procesy w systemie. Jest to również ostatni proces wykonywany po zamknięciu systemu.

Jak znaleźć problemy z uruchamianiem systemu Linux lub komunikaty o błędach

Jak wspomnieliśmy wcześniej, procesy rozruchu Linuksa zachodzą tak szybko, że nie jesteśmy w stanie nawet wyraźnie odczytać większości danych wyjściowych wysyłanych do konsoli.

Dlatego zwracanie uwagi na problemy/błędy związane z uruchamianiem wymaga od administratora systemu sprawdzenia pewnych ważnych plików w połączeniu z określonymi poleceniami. Należą do nich:

/var/log/boot.log – rejestruje komunikaty dotyczące uruchamiania systemu

Jest to prawdopodobnie pierwszy plik, któremu chcesz się przyjrzeć, aby zobaczyć wszystko, co wydarzyło się podczas uruchamiania systemu.

Zamiast starać się śledzić dane wyświetlane na ekranie podczas uruchamiania, możemy wyświetlić ten plik po zakończeniu procesu uruchamiania, aby pomóc nam w określeniu i rozwiązaniu problemów/błędów podczas uruchamiania.

Używamy w tym celu polecenia cat w następujący sposób (poniżej znajduje się przykład tego pliku):

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

Z powyższych danych wynika, że wystąpiły problemy z uruchamianiem, na co wskazują poniższe linie.

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

Problem: Problem z partycją wymiany; system albo nie odczytał pliku/urządzenia/partycji wymiany, albo go nie ma.

Sprawdźmy, czy system korzysta z przestrzeni wymiany za pomocą bezpłatnego polecenia.

free

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

Alternatywnie możemy uruchomić polecenie swap, aby wyświetlić podsumowanie wykorzystania przestrzeni wymiany systemu (nie otrzymamy żadnych wyników).

swapon -s

Możemy rozwiązać ten problem, tworząc przestrzeń wymiany w systemie Linux.

Uwaga: zawartość tego pliku jest usuwana przy zamykaniu systemu: nowe dane są w nim zapisywane przy nowym uruchomieniu.

/var/log/messages – Ogólne dzienniki systemowe

W tym pliku przechowywane są ogólne komunikaty systemowe, w tym komunikaty rejestrowane podczas uruchamiania systemu.

Aby go wyświetlić, wpisz:

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

Ponieważ plik ten może być stosunkowo długi, możemy go wyświetlić na stronach za pomocą polecenie więcej (które pokazuje nawet wartość procentową) w ten sposób.

more /var/log/messages

Zawartość /var/log/messages w przeciwieństwie do poprzedniego pliku nie jest czyszczona podczas zamykania systemu, ponieważ zawiera nie tylko komunikaty startowe, ale także komunikaty dotyczące innych działań systemowych. Dlatego starsze pliki są kompresowane i przechowywane w systemie do późniejszej kontroli, jak pokazano poniżej.

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 – pokazuje komunikaty jądra

Polecenie dmesg może wyświetlić operacje po zakończeniu procesu rozruchu, takie jak opcje wiersza poleceń przekazane do jądra; wykryte komponenty sprzętowe, zdarzenia po dodaniu nowego urządzenia USB lub błędy, takie jak awaria karty sieciowej (NIC (Network Interface Card), sterowniki zgłaszają brak wykrycia aktywności łącza w sieci i wiele więcej.

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 – Zapytanie o zawartość dziennika Systemd

Jest to przydatne w większości aktualnych dystrybucji Linuksa korzystających z systemd: najnowszego menedżera systemów i usług. W jego ramach rejestrowanie systemu odbywa się za pośrednictwem komponentu dziennika – scentralizowanej lokalizacji dla wszystkich wiadomości rejestrowanych przez różne komponenty.

Komunikaty te obejmują komunikaty jądra i komunikaty rozruchowe; wiadomości z sysloga lub różnych usług. Możemy go używać do przeglądania komunikatów rozruchowych i ustalania problemów z rozruchem, czytając dane wyjściowe i identyfikując interesujące linie (błędy oznaczone czerwonymi liniami w zależności od ustawień koloru tekstu terminala).

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.

Powyżej znajduje się przykładowy wynik polecenia pokazujący błąd, który już zidentyfikowaliśmy, przeglądając /var/log/boot.log: błąd partycji wymiany. Aby wyświetlić więcej linii wyjściowych, po prostu naciśnij przycisk [Enter].

Sprawdź także te przydatne przewodniki na temat uruchamiania systemu Linux i zarządzania usługami w odniesieniu do popularnych menedżerów systemów i usług:

  1. Zarządzanie procesami w RHEL 7: rozruch, zamykanie i wszystko pomiędzy
  2. Zarządzanie procesem i usługami uruchamiania systemu (SysVinit, Systemd i Upstart)
  3. Historia „init” i „systemd”: dlaczego „init” należało zastąpić „systemd”

W tym artykule wyjaśniliśmy pokrótce różne etapy procesu uruchamiania systemu Linux, a także dowiedzieliśmy się, jak ustalić i ewentualnie rozwiązać problemy z uruchamianiem. Aby dodać jakąś myśl do tego przewodnika, skorzystaj z poniższego formularza komentarza.