Все больше и больше операционных систем перегружены множеством служб, работающих в фоновом режиме. Хотя они могут не использовать много процессорного времени, они увеличивают время загрузки и использование оперативной памяти.
Некоторые дистрибутивы Linux включают «все, кроме кухонной раковины», чтобы облегчить жизнь пользователям. Благодаря этому такие функции, как обмен файлами или печать, работают «из коробки». К сожалению, единственный способ сделать это — включить сотни утилит, чтобы каждый нашел то, что ему нужно.
К счастью, операционные системы с открытым исходным кодом дают вам возможность и свободу делать все, что вы считаете нужным. Это означает, что вы можете отключить или удалить все, что вам не нужно. Здесь будет рассмотрен первый вариант, как отключить службы. Когда вы отключаете, а не удаляете компоненты, риск безвозвратной поломки снижается. И вы можете вернуться к тому, как было раньше, просто повторно включив службу, если заметите, что что-то полезное перестало работать.
Анализируйте время, необходимое для загрузки каждой службы
Большинство операционных систем на базе Linux перешли на Системад . Среди набора утилит есть программа, позволяющая анализировать скорость загрузки вашей системы. В частности, он показывает общее время, необходимое для загрузки, и время, необходимое для загрузки каждой службы. Обратите внимание, что некоторые службы загружаются параллельно. Таким образом, если для загрузки одного требуется две секунды, а другого — три, это не обязательно означает, что всего требуется пять секунд. Это может быть гораздо меньше.
Откройте эмулятор терминала и введите следующую команду:
systemd-analyze
Contents
Анализируйте время, необходимое для загрузки каждой службы
e.png" alt="systemd-analyze-время запуска">Это показывает, сколько времени требуется для загрузки ядра Linux и базовых системных служб, что означает, что оно не учитывает время, необходимое для загрузки вашего графического интерфейса. Другими словами, это показывает, сколько времени требуется с момента загрузки ядра до момента перехода в консоль Linux, которая выглядит так, как показано ниже.
Если у вас не установлен графический интерфейс, это то, что вас встретит на экране.
Однако вы также можете увидеть время, необходимое графическому интерфейсу для инициализации с помощью этой команды:
systemd-analyze critical-chain graphical.target
Это показывает, что графический интерфейс пользователя загружается за 2,126 секунды. При этом не учитывается время, необходимое для загрузки настольных утилит. Чтобы включить/отключить их, запустите менеджер запуска среды рабочего стола.
Наконец, вероятно, самая полезная команда для целей этого руководства:
systemd-analyze blame
Вы можете перемещаться по списку с помощью клавиш со стрелками или PAGE UPи PAGE DOWN. Нажмите q, чтобы выйти.
Используйте systemctl для отключения ненужных служб
Как видно на предыдущем рисунке, загрузка службы Snapd занимает 1,295 секунды. На SSD это незначительно. Но на жестком диске такое время будет порядка нескольких секунд, и в конечном итоге оно составит очень много. Кроме того, на SSD многие вещи загружаются параллельно с невероятной эффективностью. На жестком диске службам очень сложно загружаться параллельно. Считывающим головкам, плавающим на пластинах диска, приходится перемещаться от сектора к сектору, поэтому параллельное чтение данных практически невозможно.
Для упрощения представьте себе следующее: если на SSD вы увидите пять сервисов, загрузка которых требует одну секунду, вполне вероятно, что общее время, необходимое для загрузки всех них, может составлять менее 1,2 секунды. Если на жестком диске вы видите, что одни и те же пять служб инициализируются за одну секунду, вполне вероятно, что общее время загрузки намного превышает пять секунд.
Предположим, вам не нужен сервис snapd, который обеспечивает доступ к снимки контейнеризованных приложений . Вы можете отключить его с помощью этой команды:
sudo systemctl disable snapd.service
Но если вы перезагрузитесь, вы заметите, что демон Snap все еще работает. Это потому, что другие зависимости могут запустить его, даже если он отключен. Попробуйте посмотреть, что это могут быть:
systemd-analyze blame | grep snap
Виноваты здесь
snapd.seeded.service
и snapd.socket
. Дочерняя служба может запросить запуск родительской службы. Когда вы отключаете его, вы просто указываете ему, чтобы он не запускался автоматически при загрузке сам по себе. Но есть метод грубой силы, позволяющий обойти эту проблему.
Использование systemctl для маскировки службы
sudo systemctl mask snapd.service
По сути, это приводит к тому, что файл службы становится нулевым, и приложения не имеют возможности запустить службу.
В большинстве случа
Используйте systemctl для отключения ненужных служб
ан, чтобы показать вам, как действовать в более сложных сценариях. В этом случаеsnapd.seeded.service
и snapd.socket
также следует отключить или замаскировать.
Ниже показано улучшенное время загрузки.
Заключение
По сравнению с версией 4.078 время загрузки было уменьшено до 3,452 секунды, что составляет снижение примерно на 15 %. Не так уж и плохо, учитывая, что была отключена всего одна служба, и это на SSD. На жестком диске гораздо проще получить гораздо более значимые результаты.
В этом конкретном примере можно было отключить больше служб с помощью команды типа: sudo systemctl mask avahi-daemon.service ModemManager.service thermald.service pppd-dns.service
.
Если вы предпочитаете графическое приложение для управления вашими службами, вы можете взглянуть на проект Systemd Manager. Однако вы будете ограничены в том, что можете с ним делать, поскольку командная строка обеспечивает гораздо большую гибкость.