Гид по технологиям

Как измерить и ускорить загрузку Linux

6 min read Linux Обновлено 09 Jan 2026
Измерение и ускорение загрузки Linux
Измерение и ускорение загрузки Linux

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

Вычисление времени загрузки Linux и распределение времени по этапам загрузки

Введение

Загрузка системы — это набор последовательных и параллельных этапов: прошивка (UEFI/BIOS), загрузчик (GRUB или systemd-boot), ядро и initramfs, затем userspace и сервисы. Для большинства современных дистрибутивов самый заметный вклад в общее время дают именно сервисы userspace. В этой статье показано, как получить точные измерения, найти «узкие места» и безопасно оптимизировать загрузку.

Как проверить время загрузки с помощью systemd-analyze

systemd — менеджер служб по умолчанию в большинстве дистрибутивов. Самый быстрый способ получить базовое представление о загрузке — команда:

systemd-analyze

Она выведет общее время загрузки, отдельно — время ядра и userspace. Пример вывода можно увидеть на скриншоте ниже.

Пример вывода systemd-analyze с суммарным временем загрузки, ядра и userspace

Для подробного разбора по службам используйте:

systemd-analyze blame

Эта команда сортирует службы по времени, затраченному на их запуск, — самые «тяжёлые» будут вверху. На скриншоте видно таблицу со списком служб и временем выполнения.

Разбивка служб по времени загрузки, вывод systemd-analyze blame

Ещё одна полезная команда — показать критическую цепочку зависимостей и задержки:

systemd-analyze critical-chain

Для визуального анализа можно экспортировать SVG-график загрузки:

systemd-analyze plot > boot.svg

Откройте boot.svg в браузере, чтобы увидеть временную шкалу и перекрывающиеся этапы.

Что означают ключевые показатели

  • Время прошивки (firmware) — от включения до передачи управления загрузчику. Тут мало что можно сделать, кроме обновления прошивки или смены оборудования.
  • Время загрузчика (loader) — GRUB или systemd-boot; влияет конфигурация меню, таймауты и выбор устройств.
  • Время ядра (kernel) — загрузка ядра и initramfs; возможно уменьшить размер initramfs и убрать ненужные модули.
  • Userspace — инициализация служб systemd; именно здесь чаще всего находятся улучшения.

Короткая модель принятия решений: измерил → проанализировал → отключил/перенастроил/маскировал → проверил → откатил при необходимости.

Быстрые команды для расследования

  • Просмотреть журнал текущей загрузки (жёсткие ошибки/таймауты):
journalctl -b -o short-precise
  • Просмотреть сообщения ядра, связанные с загрузкой драйверов:
dmesg --ctime | less
  • Показать сервисы, которые занимали большую часть времени:
systemd-analyze blame | head -n 30
  • Проверить таймауты устройств в fstab (монтирование сетевых/внешних дисков):
cat /etc/fstab

Обратите внимание на опции вроде noauto, x-systemd.device-timeout= и _netdev для сетевых томов.

Как безопасно отключать и оптимизировать службы

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

  1. Посмотреть, как служба настроена и какие у неё зависимости:
systemctl status имя_сервиса.service
systemctl list-dependencies --reverse имя_сервиса.service
  1. Отключение службы (она не будет запускаться автоматически):
sudo systemctl disable имя_сервиса.service
  1. Заблокировать службу полностью (mask) — безопасно для служб, которые точно не нужны:
sudo systemctl mask имя_сервиса.service
  1. Вернуть обратно:
sudo systemctl enable имя_сервиса.service
sudo systemctl unmask имя_сервиса.service

Пример: на многих настольных системах почтовый демон exim4 не нужен — его можно отключить, как показано в примере выше.

Тонкие настройки systemd для ускорения загрузки

  • Включите параллельный запуск служб (обычно по умолчанию включён в systemd).
  • Используйте socket activation для сервисов, которые могут стартовать «лениво».
  • Сократите таймауты: настройка DefaultTimeoutStartSec и DefaultTimeoutStopSec в /etc/systemd/system.conf может снизить суммарное время ожидания при проблемных юнитах.
  • Применяйте OnDemand-инициализацию: службы, которые должны стартовать по событию, помечайте как socket-activated или path-activated.

Оптимизация initramfs и ядра

  • Удалите ненужные модули из initramfs, чтобы уменьшить его размер: в Debian/Ubuntu — обновите конфигурацию initramfs и вызовите update-initramfs; в Arch — mkinitcpio.
  • Подумайте о минимизации загрузочного набора драйверов: если система не использует определённое оборудование, исключите соответствующие модули.

Оптимизации файловой системы и монтирования

  • Для внешних и сетевых томов используйте опции _netdev и noauto, чтобы они не блокировали загрузку.
  • Добавьте x-systemd.requires= или x-systemd.after= для управления порядком монтирования при необходимости.
  • Для медленных устройств рассмотрите использование systemd.mount с опциями, заданными для отложенного монтирования.

Программные альтернативы и инструменты профилирования

  • bootchart — генерирует графики загрузки для старых систем или систем без systemd.
  • systemd-analyze plot — готовая SVG-визуализация.
  • bootstat, eBPF-утилиты для низкоуровневого профилирования запуска.
  • Для систем без systemd используются инструменты типа rc.d profiler или init.d скрипты и логи /var/log/boot.log.

Примеры и сценарии

  • Если systemd-analyze blame показывает, что exim4 занимает 3 s — отключите/маскируйте эту службу, если она не нужна локально.
  • Если таймауты при монтировании NFS добавляют 20–30 s — используйте _netdev и отложенное монтирование.
  • Если initramfs тянет более 2 s на распаковку — уменьшите его размер, уберите лишние модули.

Когда оптимизация не помогает: контрпримеры

  • Виртуальные машины с медленным виртуальным оборудованием иногда ограничены I/O гипервизора — программные оптимизации мало помогут.
  • Если узким местом является прошивка (BIOS/UEFI), то без обновления прошивки или смены аппаратуры ускорить старт не удастся.
  • Службы с сетевыми зависимостями будут ждать похищенных/недоступных ресурсов — здесь нужен сетевой подход, а не локальная оптимизация.

Риски и меры предосторожности

  • Отключение системных служб может лишить систему важных функций (сетевые службы, логирование, монтирование криптотомов).
  • Маскирование служб нельзя применять слепо на сервере в продакшн-окружении — тестируйте в staging перед изменениями.

Чеклисты по ролям

Администратор сервера:

  • Измерить baseline командой systemd-analyze.
  • Проверить журнал (journalctl -b) на ошибки.
  • Тестировать каждое изменение на staging.
  • Документировать откатные команды.

Пользователь рабочего стола:

  • Отключить ненужные демоны (почтовые агенты, агенты бэкапа).
  • Использовать легковесное окружение рабочего стола.
  • Рассмотреть установку на SSD, если планируется аппаратное улучшение.

DevOps/инженер CI:

  • Интегрировать measurement в CI для образов.
  • Автоматизировать сбор boot.svg и blames после сборки образа.

План отката и работа в случае проблем

  1. Сохраните список изменённых юнитов: sudo systemctl list-unit-files | grep disabled > disabled-before.txt
  2. Если после отключения служб система не загружается, загрузитесь в rescue mode и выполните:
sudo systemctl enable --now имя_критичного_сервиса.service
sudo systemctl unmask имя_критичного_сервиса.service
  1. Восстановите initramfs из резервной копии, если проблема в загрузочном образе.

Критерии приёмки

  • Замер до и после: общее время загрузки уменьшилось на X секунд (целевое значение — субъективно).
  • Все критичные для работы системы сервисы стартуют корректно.
  • Нет новых ошибок в journalctl -b за первые 5 минут после загрузки.

Мини-методология для последовательной оптимизации

  1. Измерить текущее состояние: systemd-analyze, journalctl, dmesg.
  2. Найти крупнейших «потребителей времени»: systemd-analyze blame.
  3. Понять назначение службы и её зависимости.
  4. Отключить/маскировать/перенастроить её.
  5. Пересобрать initramfs при необходимости.
  6. Повторить измерение и документировать изменения.

Небольшая сводка полезных команд

systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
systemd-analyze plot > boot.svg
journalctl -b -o short-precise
dmesg --ctime | less
sudo systemctl disable имя_сервиса.service
sudo systemctl mask имя_сервиса.service
sudo systemctl enable имя_сервиса.service

Краткий глоссарий

  • systemd-analyze — инструмент для измерения и визуализации времени загрузки.
  • initramfs — минимальное пространство пользователя, используемое ядром для монтирования корня.
  • mask — блокировка сервиса, предотвращающая его запуск.
  • noauto/_netdev — опции fstab для отложенного или сетевого монтирования.

Заключение

Оптимизация загрузки Linux часто даёт заметный выигрыш без затрат на новое железо. Начните с замеров systemd-analyze, затем искать «тяжёлые» сервисы и устранять их причину: отключение ненужного, перевод на socket-activation, корректировка таймаутов и оптимизация initramfs. Всегда тестируйте изменения и имейте план отката.

Вам не обязательно менять оборудование: грамотная диагностика и последовательные правки служб могут сделать систему быстрее и отзывчивее.

Краткое резюме:

  • Измерьте baseline командой systemd-analyze.
  • Ищите долгие сервисы через systemd-analyze blame.
  • Отключайте и маскируйте только проверенные ненужные службы.
  • Оптимизируйте initramfs и параметры монтирования для дополнительного ускорения.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Stencil.js — создание веб‑компонентов
Frontend

Stencil.js — создание веб‑компонентов

Анимация входа и выхода в React с Framer Motion
Frontend React

Анимация входа и выхода в React с Framer Motion

SweetAlert в React: кастомные уведомления
Frontend

SweetAlert в React: кастомные уведомления

Сессии в Express на Node.js — руководство
Node.js

Сессии в Express на Node.js — руководство

Как опубликовать пакет на npm
Разработка

Как опубликовать пакет на npm

Создать проект React с TypeScript
Frontend

Создать проект React с TypeScript