Поиск по сайту:

Как определить и исправить проблемы с загрузкой в Linux


Система Linux загружается так быстро, что большая часть вывода прокручивается слишком быстро, чтобы прочитать текст (показывающий запуск служб), отправленный на консоль. Поэтому наблюдение за проблемами/ошибками загрузки становится для нас некоторой проблемой.

В этой статье мы кратко объясним различные этапы процесса загрузки системы Linux, а затем узнаем, как выявить и разобраться в проблемах с загрузкой: с точки зрения файлов для просмотра или команд для просмотра сообщений о загрузке системы.

Краткое описание процесса загрузки Linux

Таким образом, как только мы нажимаем кнопку Включение, BIOS (Базовая система ввода-вывода), программа, встроенная в материнскую плату, выполняет POST (Самотестирование при включении) – при этом сканируется оборудование, такое как диски, ОЗУ (оперативное запоминающее устройство), клавиатура и т. д. В случае возникновения ошибки (отсутствие/неисправность оборудования) об этом сообщается на экране.

Во время POST BIOS также ищет загрузочное устройство, диск, с которого необходимо выполнить настройку (обычно это первый жесткий диск, однако мы можем настроить его как DVD, USB). , сетевая карта и т. д.).

Затем система подключится к диску и выполнит поиск Основной загрузочной записи (размером 512 байт), в которой хранится загрузчик (размером 446 байт), а в остальном пространстве хранится информация о разделах диска. (четыре максимум) и сам MBR.

Рекомендуется к прочтению: 4 лучших загрузчика Linux

Загрузчик определит и укажет на них, а также загрузит Ядро и файл initrd (электронный диск инициализации – обеспечивает доступ ядра к смонтированной корневой файловой системе и модулям/драйверам, хранящимся в / lib), которые обычно хранятся в каталоге /boot файловой системы.

После загрузки ядра оно выполняет init (или systemd в новых дистрибутивах Linux), первый процесс с PID 1, который, в свою очередь, запускает все остальные процессы в системе. Это также последний процесс, который выполняется при завершении работы системы.

Как обнаружить проблемы с загрузкой Linux или сообщения об ошибках

Как мы упоминали ранее, процессы загрузки Linux происходят быстро, и мы даже не можем четко прочитать большую часть вывода, отправляемого на консоль.

Таким образом, принимая во внимание проблемы/ошибки загрузки, системный администратор должен проверять определенные важные файлы в сочетании с определенными командами. И к ним относятся:

/var/log/boot.log — регистрирует сообщения о загрузке системы.

Вероятно, это первый файл, в который хочется заглянуть, чтобы просмотреть все, что развернулось во время загрузки системы.

Вместо того, чтобы усердно следить за выводом на экране во время загрузки, мы можем просмотреть этот файл после завершения процесса загрузки, чтобы помочь нам определить и устранить проблемы/ошибки при загрузке.

Для этой цели мы используем команду cat следующим образом (ниже приведен образец этого файла):

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

Из приведенного выше вывода мы видим, что существуют проблемы с загрузкой, обозначенные строками ниже.

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

Проблема: проблема с разделом подкачки; системе либо не удалось прочитать файл подкачки/устройство/раздел, либо он отсутствует.

Давайте проверим, использует ли система пространство подкачки с помощью команды free.

free

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

Альтернативно мы можем запустить команду swapon, чтобы просмотреть сводную информацию об использовании пространства подкачки системы (мы не получим никаких результатов).

swapon -s

Мы можем решить эту проблему, создав пространство подкачки в Linux.

Примечание. Содержимое этого файла очищается при завершении работы системы: новые данные сохраняются в нем при новой загрузке.

/var/log/messages – Общие системные журналы

В этом файле хранятся общие системные сообщения, включая сообщения, регистрируемые во время загрузки системы.

Чтобы просмотреть его, введите:

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

Поскольку этот файл может быть относительно длинным, мы можем просмотреть его на страницах с помощью команды more (которая даже показывает процент), вот так.

more /var/log/messages

Содержимое /var/log/messages в отличие от предыдущего файла не очищается при завершении работы, поскольку оно содержит не только загрузочные сообщения, но и сообщения, касающиеся других действий системы. Поэтому старые файлы сжимаются и сохраняются в системе для последующей проверки, как показано ниже.

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 — показывает сообщения ядра

Команда dmesg может отображать операции после завершения процесса загрузки, например параметры командной строки, передаваемые ядру; обнаруженные аппаратные компоненты, события при добавлении нового USB-устройства или ошибки, такие как сбой NIC (сетевой интерфейсной карты), и драйверы сообщают об отсутствии активности соединения в сети и многое другое.

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

Это полезно в большинстве современных дистрибутивов Linux, использующих systemd: новейший менеджер систем и сервисов. В рамках него журналирование системы осуществляется через компонент журнала — централизованное место для всех сообщений, зарегистрированных различными компонентами.

Эти сообщения включают сообщения ядра и загрузки; сообщения из системного журнала или различных служб. Мы можем использовать его для просмотра сообщений о загрузке и выявления проблем с загрузкой, читая выходные данные и выявляя интересующие строки (ошибки, отмеченные красными линиями, в зависимости от настроек цвета текста терминала).

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.

Выше приведен пример вывода команды, показывающий ошибку, которую мы уже обнаружили при просмотре /var/log/boot.log: ошибка раздела подкачки. Чтобы просмотреть больше строк вывода, просто нажмите кнопку [Enter].

Также ознакомьтесь с этими полезными руководствами по загрузке системы Linux и управлению службами применительно к общим менеджерам систем и служб:

  1. Управление процессами в RHEL 7: загрузка, завершение работы и все, что между ними
  2. Управление процессом запуска системы и службами (SysVinit, Systemd и Upstart)
  3. История «init» и «systemd»: почему «init» нужно было заменить на «systemd»

В этой статье мы кратко объяснили различные этапы процесса загрузки системы Linux, а также узнали, как выявить и, возможно, устранить проблемы с загрузкой. Чтобы добавить какие-либо мысли к этому руководству, используйте форму комментариев ниже.