Com determinar i solucionar problemes d'arrencada a Linux


El sistema Linux arrenca tan ràpid que la majoria de la sortida es desplaça massa ràpidament per llegir el text (que mostra els serveis que s'inicien) enviat a la consola. Per tant, observar els problemes/errors d'arrencada es converteix en un petit repte per a nosaltres.

En aquest article, explicarem breument les diferents etapes d'un procés d'arrencada del sistema Linux i, a continuació, aprendrem a establir i arribar al fons dels problemes d'arrencada: en termes de fitxers per consultar o ordres per veure missatges d'arrencada del sistema.

Resum del procés d'arrencada de Linux

En resum, un cop premem el botó d'encesa, la BIOS (Basic Input Output System) un programa integrat en una placa base realitza un POST (Power on Self Test) –on el maquinari com ara discs, RAM (Random Access Memory), teclat, etc. etc s'escanegen. En cas d'error (maquinari que falta/funciona malament), s'informa a la pantalla.

Durant la POST, la BIOS també cerca el dispositiu d'arrencada, el disc des del qual s'estableix l'estat (normalment el primer disc dur, però podem configurar-lo perquè sigui un DVD, USB, targeta de xarxa, etc.).

Aleshores, el sistema es connectarà al disc i buscarà el registre d'arrencada mestre (512 bytes de mida) que emmagatzema el carregador d'arrencada (446 bytes de mida) i la resta de l'espai emmagatzema informació sobre les particions del disc (quatre com a màxim) i el MBR. mateix.

El carregador d'arrencada identificarà i apuntarà, així com carregarà el nucli i el fitxer initrd (disc ram d'inicialització: proporciona accés al nucli al sistema de fitxers arrel muntat i als mòduls/controladors emmagatzemats al directori /lib), que generalment s'emmagatzemen al/directori d'arrencada del sistema de fitxers.

Després de carregar el nucli, executa init (o systemd a les distribucions de Linux més noves), el primer procés amb PID 1, que al seu torn inicia tots els altres processos del sistema. També és l'últim procés que s'executa en tancar el sistema.

Com esbrinar problemes d'arrencada de Linux o missatges d'error

Com hem esmentat abans, els processos d'arrencada de Linux es produeixen ràpidament i ni tan sols podem llegir clarament la major part de la sortida enviada a la consola.

Per tant, prendre nota dels problemes/errors d'arrencada requereix que un administrador del sistema examini determinats fitxers importants juntament amb ordres particulars. I aquests inclouen:

Aquest és probablement el primer fitxer que voleu mirar per veure tot el que es va desplegar durant l'arrencada del sistema.

En lloc d'esforçar-nos tant per seguir la sortida a la pantalla durant l'arrencada, podem veure aquest fitxer un cop s'hagi completat el procés d'arrencada per ajudar-nos a determinar i resoldre problemes/errors d'arrencada.

Utilitzem l'ordre cat per a aquest propòsit de la següent manera (a continuació es mostra una mostra d'aquest fitxer):

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

A la sortida anterior, podem veure que hi ha problemes d'arrencada indicats per les línies següents.

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

Problema: problema amb la partició d'intercanvi; el sistema no ha pogut llegir el fitxer/dispositiu/partició d'intercanvi o no està present.

Comprovem si el sistema utilitza espai d'intercanvi amb comandament lliure.

# free

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

Alternativament, podem executar l'ordre swapon per veure el resum de l'ús de l'espai d'intercanvi del sistema (no obtindrem cap sortida).

# swapon -s

Podem resoldre aquest problema creant un espai d'intercanvi a Linux.

Nota: El contingut d'aquest fitxer s'esborra quan s'apaga el sistema: s'emmagatzemen dades noves en un nou arrencada.

Aquest fitxer emmagatzema missatges generals del sistema, inclosos els missatges que es registren durant l'arrencada del sistema.

Per veure'l, escriviu:

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

Com que aquest fitxer pot ser relativament llarg, podem veure'l en pàgines utilitzant l'ordre more (que fins i tot mostra un percentatge) com aquesta.

# more /var/log/messages

El contingut de /var/log/messages, a diferència del fitxer anterior, no s'esborra perquè no només conté missatges d'arrencada sinó també missatges relacionats amb altres activitats del sistema. Així, els fitxers més antics es comprimeixen i es mantenen al sistema per a una inspecció posterior, tal com es mostra a continuació.

# 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

L'ordre dmesg pot mostrar les operacions un cop finalitzat el procés d'arrencada, com ara les opcions de la línia d'ordres passades al nucli; Components de maquinari detectats, esdeveniments quan s'afegeix un nou dispositiu USB o errors com la fallada de la NIC (targeta d'interfície de xarxa) i els controladors informen que no s'ha detectat cap activitat d'enllaç a la xarxa i molt més.

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

Això és útil a la majoria de distribucions de Linux actuals utilitzant systemd: el gestor de sistemes i serveis més recent. A sota, el registre del sistema es fa mitjançant el component diari, una ubicació centralitzada per a tots els missatges registrats per diferents components.

Aquests missatges inclouen missatges del nucli i d'arrencada; missatges de Syslog o diversos serveis. El podem utilitzar per revisar missatges d'arrencada i establir problemes d'arrencada llegint la sortida i identificant línies d'interès (errors assenyalats per línies vermelles en funció de la configuració del color del text del 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.

L'anterior és una mostra de la sortida de l'ordre que mostra un error que ja vam identificar en visualitzar /var/log/boot.log: l'error de la partició d'intercanvi. Per veure més línies de sortida, simplement premeu el botó [Enter].

Consulteu també aquestes guies útils sobre l'arrencada del sistema Linux i la gestió del servei en relació amb els gestors de serveis i sistemes comuns:

  1. Gestió de processos a RHEL 7: arrencada, tancament i tot el que hi ha entremig
  2. Gestionar el procés d'inici del sistema i els serveis (SysVinit, Systemd i Upstart)
  3. La història darrere d'init i systemd: per què s'ha de substituir init per systemd

En aquest article, vam explicar breument les diferents etapes del procés d'arrencada del sistema Linux i vam aprendre a establir i possiblement resoldre problemes d'arrencada. Per afegir qualsevol reflexió a aquesta guia, utilitzeu el formulari de comentaris a continuació.