Búsqueda de sitios web

Cómo determinar y solucionar problemas de arranque en Linux


El sistema Linux arranca tan rápido que la mayoría de los resultados se desplazan demasiado rápido para leer el texto (que muestra los servicios que se inician) enviado a la consola. Por lo tanto, observar problemas/errores de arranque se convierte en un desafío para nosotros.

En este artículo, explicaremos brevemente las diferentes etapas del proceso de inicio de un sistema Linux y luego aprenderemos cómo establecer y llegar al fondo de los problemas de inicio: en términos de archivos para examinar o comandos para ver los mensajes de inicio del sistema.

Resumen del proceso de arranque de Linux

En resumen, una vez pulsamos el botón Power On, la BIOS (Basic Input Output System), un programa integrado en una placa base, realiza una >POST (Autoprueba de encendido): donde se analiza el hardware como discos, RAM (memoria de acceso aleatorio), teclado, etc. En caso de error (hardware faltante o que funciona mal), se informa en la pantalla.

Durante la POST, la BIOS también busca el dispositivo de arranque, el disco desde donde iniciar (normalmente el primer disco duro, sin embargo podemos configurarlo para que sea un DVD, USB , Tarjeta de red, etc.).

Luego, el sistema se conectará al disco y buscará el Registro de arranque maestro (de 512 bytes de tamaño) que almacena el cargador de arranque (de 446 bytes de tamaño) y el resto del espacio almacena información sobre las particiones del disco. (cuatro como máximo) y el propio MBR.

Lectura sugerida: Los 4 mejores cargadores de arranque de Linux

El cargador de arranque identificará y señalará, además de cargar, el Kernel y el archivo initrd (disco ram de inicialización: proporciona acceso al kernel al sistema de archivos raíz montado y a los módulos/controladores almacenados en / lib), que generalmente se almacenan en el directorio /boot del sistema de archivos.

Una vez cargado el kernel, ejecuta init (o systemd en distribuciones de Linux más nuevas), el primer proceso con PID 1, que a su vez inicia todos los demás procesos del sistema. También es el último proceso que se ejecuta al apagar el sistema.

Cómo descubrir problemas de arranque de Linux o mensajes de error

Como mencionamos antes, los procesos de arranque de Linux ocurren rápidamente y ni siquiera podemos leer claramente la mayor parte del resultado enviado a la consola.

Por lo tanto, tomar nota de los problemas/errores de arranque requiere que un administrador del sistema examine ciertos archivos importantes junto con comandos particulares. Y estos incluyen:

/var/log/boot.log: registra los mensajes de inicio del sistema

Este es probablemente el primer archivo que desea examinar para ver todo lo que se desarrolló durante el inicio del sistema.

En lugar de esforzarnos tanto en seguir el resultado en la pantalla durante el inicio, podemos ver este archivo una vez que se haya completado el proceso de inicio para ayudarnos a determinar y resolver problemas/errores de inicio.

Usamos el comando cat para ese propósito de la siguiente manera (a continuación se muestra un ejemplo de este archivo):

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

En el resultado anterior, podemos ver que hay problemas de arranque indicados en las líneas siguientes.

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

Problema: Problema con la partición de intercambio; el sistema no pudo leer el archivo/dispositivo/partición de intercambio o no está presente.

Comprobemos si el sistema está utilizando espacio de intercambio con el comando libre.

free

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

Alternativamente, podemos ejecutar el comando swap para ver el resumen de uso del espacio de intercambio del sistema (no obtendremos ningún resultado).

swapon -s

Podemos resolver este problema creando un espacio de intercambio en Linux.

Nota: El contenido de este archivo se borra al apagar el sistema: los datos nuevos se almacenan en él en un nuevo inicio.

/var/log/messages – Registros generales del sistema

Este archivo almacena mensajes generales del sistema, incluidos los mensajes que se registran durante el inicio del sistema.

Para verlo escriba:

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

Debido a que este archivo puede ser relativamente largo, podemos verlo en páginas usando el comando más (que incluso muestra un porcentaje) como este.

more /var/log/messages

El contenido de /var/log/messages, a diferencia del archivo anterior, no se borra al cerrar porque no solo contiene mensajes de inicio sino también mensajes relacionados con otras actividades del sistema. Por lo tanto, los archivos más antiguos se comprimen y se guardan en el sistema para su posterior inspección, como se muestra a continuación.

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: muestra mensajes del kernel

El comando dmesg puede mostrar operaciones una vez que se ha completado el proceso de arranque, como las opciones de la línea de comando pasadas al kernel; componentes de hardware detectados, eventos cuando se agrega un nuevo dispositivo USB o errores como falla de la NIC (tarjeta de interfaz de red) y los controladores informan que no se detectó actividad de enlace en la red y mucho 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 (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 - Consultar contenido de Systemd Journal

Esto es útil en la mayoría de las distribuciones de Linux actuales que utilizan systemd: el administrador de sistemas y servicios más nuevo. En él, el registro del sistema se realiza a través del componente de diario, una ubicación centralizada para todos los mensajes registrados por los diferentes componentes.

Estos mensajes incluyen mensajes de kernel y de arranque; mensajes de syslog o varios servicios. Podemos usarlo para revisar mensajes de inicio y establecer problemas de inicio leyendo el resultado e identificando líneas de interés (errores señalados por líneas rojas dependiendo de la configuración de color del texto 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.

Lo anterior es un ejemplo del resultado del comando que muestra un error que ya identificamos al ver /var/log/boot.log: el error de partición de intercambio. Para ver más líneas de salida, simplemente presione el botón [Entrar].

Consulte también estas guías útiles sobre el inicio del sistema Linux y la administración de servicios en relación con los administradores de sistemas y servicios comunes:

  1. Gestión de procesos en RHEL 7: arranque, apagado y todo lo demás
  2. Gestión del proceso y servicios de inicio del sistema (SysVinit, Systemd y Upstart)
  3. La historia detrás de 'init' y 'systemd': por qué era necesario reemplazar 'init' por 'systemd'

En este artículo, explicamos brevemente las diferentes etapas del proceso de inicio del sistema Linux y aprendimos cómo establecer y posiblemente resolver problemas de inicio. Para agregar cualquier idea a esta guía, utilice el formulario de comentarios a continuación.