- Как определить и исправить проблемы с загрузкой в Linux
- Краткое изложение процесса загрузки Linux
- Как узнать о проблемах с загрузкой Linux или сообщениях об ошибках
- /var/log/boot.log — регистрирует сообщения о загрузке системы.
- /var/log/messages — общие системные журналы
- dmesg — показывает сообщения ядра
- journalctl — запрос содержимого журнала Systemd
Как определить и исправить проблемы с загрузкой в Linux
Система Linux загружается так быстро, что большая часть вывода прокручивается слишком быстро, чтобы прочитать текст (показывающий запущенные службы), отправленный на консоль. Поэтому наблюдение за проблемами/ошибками загрузки становится для нас небольшой проблемой.
В этой статье мы кратко объясним различные этапы процесса загрузки системы Linux, а затем узнаем, как установить и разобраться в проблемах с загрузкой: с точки зрения файлов для просмотра или команд для просмотра сообщений о загрузке системы.
Краткое изложение процесса загрузки Linux
Таким образом, как только мы нажимаем кнопку Power On, BIOS (Basic Input Output System), программа, встроенная в материнскую плату, выполняет >POST (Самопроверка при включении питания) — когда сканируются такие аппаратные средства, как диски, ОЗУ (оперативное запоминающее устройство), клавиатура и т. д. В случае ошибки (отсутствие/неисправность оборудования) об этом сообщается на экране.
Во время POST BIOS также ищет загрузочное устройство, диск для загрузки (обычно это первый жесткий диск, однако мы можем настроить его как DVD, USB , сетевая карта и т. д.).
Затем система подключится к диску и найдет Главную загрузочную запись (размером 512 байт), в которой хранится загрузчик (размером 446 байт), а остальное пространство хранит информацию о разделах диска. (максимум четыре) и сам MBR.
Загрузчик идентифицирует и укажет, а также загрузит ядро и файл initrd (инициализационный RAM-диск — обеспечивает доступ ядра к смонтированной корневой файловой системе и модулям/драйверам, хранящимся в / lib), которые обычно хранятся в каталоге /boot файловой системы.
После загрузки ядра оно выполняет init (или systemd в более новых дистрибутивах Linux), первый процесс с PID 1, который, в свою очередь, запускает все остальные процессы в системе. Это также последний процесс, который должен выполняться при завершении работы системы.
Как узнать о проблемах с загрузкой Linux или сообщениях об ошибках
Как мы упоминали ранее, процессы загрузки Linux происходят так быстро, что мы даже не можем четко прочитать большую часть вывода, отправляемого на консоль.
Таким образом, принимая во внимание проблемы/ошибки загрузки, системный администратор должен изучить определенные важные файлы в сочетании с определенными командами. К ним относятся:
/var/log/boot.log — регистрирует сообщения о загрузке системы.
Это, наверное, первый файл, в который вы хотите заглянуть, чтобы просмотреть все, что развернулось во время загрузки системы.
Вместо того, чтобы так усердно следить за выводом на экране во время загрузки, мы можем просмотреть этот файл после завершения процесса загрузки, чтобы помочь нам в определении и устранении проблем/ошибок загрузки.
Для этой цели мы используем команду cat следующим образом (ниже приведен пример этого файла):
[ 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, чтобы просмотреть сводку об использовании системного пространства подкачки (мы не получим никаких результатов).
Мы можем решить эту проблему, создав пространство подкачки в Linux.
Примечание: Содержимое этого файла очищается при завершении работы системы: новые данные сохраняются в нем при новой загрузке.
/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] .
Поскольку этот файл может быть относительно длинным, мы можем просмотреть его на страницах, используя команду больше (которая даже показывает процентное соотношение), как здесь.
Содержимое /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-устройства или ошибки, такие как сбой сетевой карты (сетевой интерфейсной карты), драйверы сообщают об отсутствии активности связи в сети и многое другое.
[ 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 () (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: новейший системный и сервисный менеджер. При этом системное ведение журнала выполняется через компонент журнала — централизованное место для всех сообщений, регистрируемых различными компонентами.
Эти сообщения включают сообщения ядра и загрузки; сообщения из системного журнала или различных сервисов. Мы можем использовать его для просмотра загрузочных сообщений и выявления проблем с загрузкой, читая вывод и определяя интересующие строки (ошибки, отмеченные красными линиями, в зависимости от настроек цвета текста терминала).
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 и управлению службами в отношении общих системных и сервисных менеджеров:
- Управление процессами в RHEL 7: загрузка, завершение работы и все, что между ними
- Управление процессом запуска системы и службами (SysVinit, Systemd и Upstart)
- История «init» и «systemd»: почему «init» необходимо заменить на «systemd»
В этой статье мы кратко объяснили различные этапы процесса загрузки системы Linux, а также узнали, как установить и, возможно, решить проблемы с загрузкой. Чтобы добавить какую-либо мысль к этому руководству, используйте форму комментариев ниже.