понедельник, 16 января 2017 г.

Отключение служб в Linux Mint 18 xfce

Описанное ниже было осуществлено после ознакомления с публикацией "Ускоряем Ubuntu, уменьшая количество используемой памяти".

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

С выключением в автозагрузке ненужных приложений вопросов не возникает (Все настройки – Сеансы и запуск):


Выключение ненужных служб потребует от Вас понимания назначения каждой службы.

Далее под терминами служба, сервис, процесс следует понимать применяющееся в терминологии Linux понятие daemon (де́мон) (происходит от греч. δαίμων божество), представляющее из себя компьютерную программу в системах класса Unix, которая запускается самой системой и работает в фоновом режиме без прямого взаимодействия с пользователем. Принято считать, что Linux не является чистой Unix, а является так называемой unix-подобной системой.

Хотелось бы  обратить Ваше внимание , что содержание этой публикации не является каким-либо руководством, а тем более "прописями", которые необходимо повторить. Вы будете вносить изменения в систему, поэтому делаете это на свой страх и риск. Записывайте всё то, что Вы будете делать, чтобы, если что-то пойдёт не так, Вы смогли бы вернуться в состояние системы до своего вмешательства.


 Полезные команды по теме 

Команды взяты со статьи на losst.ru и выполняются в терминале.

Насколько быстро грузится система сейчас:
$ systemd-analyze


Время, затраченное на старт каждого сервиса:
$ systemd-analyze blame


График с указанием времени загрузки сервиса и отображением параллельных загрузок:
$ systemd-analyze plot > graph.svf


Файл svf открывается в браузере (проверено на Firefox, Chrome, Opera, Vivaldi, Midori).


Для перечисления запущенных служб введите в терминале команду
  sudo systemctl list-units --type service 

У меня получился весьма внушительный список. На рисунке ниже отображены первые 23:


Чтобы посмотреть остальные строки используйте кнопку Page Down.

Как же понять, что нужно, а что нет? Разработчики считают, что все запущенные службы или Вам нужны или могут понадобиться. А как на самом деле? Это же как "средняя температура по больнице". Попробуем разобраться.


 Команды выключения и включения службы 

Выключить:  sudo systemctl disable имя_службы

Включить:  sudo systemctl enable имя_службы


accounts-daemon.service – это относится к учётным записям, т.е. нужно.

acpid.service – задачей ACPI является обеспечение взаимодействие между операционной системой, аппаратным обеспечением и BIOS материнской платы., т.е. нужно.

avahi-daemon.service
Avahi представляет из себя процесс, который предназначен для обнаружения служб/компьютеров в домене .local. На практике, если у Вас есть пара компьютеров в локальной сети или Ваш домен не .local, смысла держать Ahavi активным нет и его мoжно отключить:

 sudo systemctl disable avahi-daemon.service 

Synchronizing state of avahi-daemon.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable avahi-daemon
insserv: warning: current start runlevel(s) (empty) of script `avahi-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `avahi-daemon' overrides LSB defaults (0 1 6).
insserv: warning: current start runlevel(s) (empty) of script `avahi-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `avahi-daemon' overrides LSB defaults (0 1 6).
Removed symlink /etc/systemd/system/dbus-org.freedesktop.Avahi.service.
Removed symlink /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.


binfmt-support.service – поддержка ядром других форматов бинарных данных. Как говорится, если не знаешь, то лучше не трогать. Оставляем.

boinc-client.service – это служба, осуществляющая процесс моего участия в проекте распределённых вычислений.

cgmanager.service
CGManager предназначен для управления cgroup, позволяя непривилегированным пользователям получать доступ к cgroup и предотвращая выход из текущего cgroup в родительский не исключая и привилегированные приложения. Служба может пригодиться при создании вложенных контейнеров LXC.

 Сведения.  Контейнеры Linux или LXC представляют из себя технологию виртуализации, которая может использоваться для решения различных задач. Технология встроена в ядро Linux и с помощью неё возможен запуск на одном компьютере нескольких дистрибутивов практически без потерь производительности. LXC можно расценивать как что-то среднее между изолированным окружением chroot и полноценной технологией виртуализации Qemu, Xen, KVM или VirtualBox. Поскольку все программы выполняются на реальном "железе", без использования виртуализации, то производительность, в отличие от случая использования VirtualBox, не теряется. Даже при очень низких аппаратных ресурсах пользователь может параллельно запустить  несколько контейнеров в своей системе, чего нельзя сделать с полноценными технологиями виртуализации (источник: losst.ru). 
Таким образом, контейнер позволяет с меньшими накладными расходами изолировать процессы и ресурсы если они работают под управлением операционной системы одной версии. Linux Containers можно считать развитием других "контейнерных" технологий, таких как OpenVZ или Vserver. В отличие от них не требуется специальная версия ядра, что значительно расширяет возможности применения. 

Если Вы их не используете и не пользуетесь песочницей, в которой всё это может пригодиться для запуска программ, смело отключайте. В этом файле на стр.68 указано, что контрольные группы Linux (cgroups) могут работать и как механизм группировки и отслеживания процессов, и как инструмент управления использованием ресурсов. Для отключения службы используется команда:

 sudo systemctl disable cgmanager.service 

Synchronizing state of cgmanager.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable cgmanager
insserv: warning: current start runlevel(s) (empty) of script `cgmanager' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `cgmanager' overrides LSB defaults (0 1 6).


console-kit-daemon.service
console-kit-log-system-start.service
console-setup.service
cpufrequtils.service
cron.service

Далее идут целых 3 службы, в названии которых присутствует console, а также служба, в названии которых имеется cpu. Следующая за этим служба cron известна и относится к планировщику заданий. Служба с cpu явно относится к ЦПУ, а службы console, как видно из англоязыного описания отвечают, в том числе за раскладку клавиатуры, шрифты и т.п. Предполагаем, что все эти службы нужны.

cups-browsed.service – это служба будет необходима для организации сервера печати на Вашем компьютере. Если к Вашему компьютеру не подключен принтер и Вы не пользуетесь сетевыми принтерами, то можно отключить.

 sudo systemctl disable cups-browsed.service 

Synchronizing state of cups-browsed.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable cups-browsed
insserv: warning: current start runlevel(s) (empty) of script `cups-browsed' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `cups-browsed' overrides LSB defaults (0 1 6).

Если вдруг служба Вам понадобится, то потом её можно будет включить:   sudo systemctl enable cups-browsed.service

dbus.service – это служба системы межпроцессного взаимодействия, которая позволяет приложениям в операционной системе сообщаться друг с другом. Как говорится, не с моим "рылом" лезть в калашный ряд. Служба нужна.

geoclue.service – это служба, относящаяся к геолокации. Как указано в статье "Снова о шпионском ПО в Ubuntu", это средство позволяет разным приложениям "ориентироваться в пространстве", то есть является банальным инструментом геопозиционирования – отслеживания Вашего физического местонахождения и спорадической отправки результатов на сервер geoip.ubuntu.com. Для выключения:

 sudo systemctl disable geoclue.service 

getty@tty1.service – это служба относится к запуску виртуальных консолей, нужна.

grub-common.service – как видно из названия, это служба относится к загрузчику grub и без глубоких знаний по процессу загрузки через grub трогать её как-то боязно. Оставляем как есть.

hddtemp.service
irqbalance.service
keyboard-setup.service

Эти три службы точно нужны, так как hddtemp отвечает за отображение температуры дисков, irqbalace – это что-то из области автоматического прерывания между ядрами процессоров, а keyboard-setup относится к раскладке клавиатуры.

kmod-static-nodes.service
lm-sensors.service
loadcpufreq.service

Внятного описания kmod-static-nodes у меня найти не получилось, lm-sensors относится к инициализации наблюдения за аппаратной частью компьютера, а loadcpufreq к частоте ЦПУ. Оставляем как есть.

vm2-lvmetad.service
lvm2-monitor.service

Службы vm2-lvmetad и lvm2-monitor относятся к службам управления логическими томами (LVM – Logical Volume Management). Если Вы не используете LVM, то можно отключить.

 sudo systemctl disable vm2-lvmetad.service 
 sudo systemctl disable lvm2-monitor.service 

Результаты выполнения:

Failed to execute operation: No such file or directory и
Removed symlink /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service

mdm.service – Mint Display Manager. Служба нужна.

ModemManager.service

ModemManager – это интерфейс, позволяющий реализовать подключение к сети интернет используя мoдемы, каналы связи (2G/3G/4G/CDMA), способы соединения (RS232, USB, Bluetooth) и методoв управления (AT, QCDM, QMI, MBIM). Если у вас кабельный интернет и вы не планируете использовать модем, отключайте:

 sudo systemctl disable ModemManager.service 

Removed symlink /etc/systemd/system/dbus-org.freedesktop.ModemManager1.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/ModemManager.service.


P.S. В сети найдено следующее утверждение: "Кстати, я у себя проверил, некоторые usb-модемы (например Huawai E303), и телефоны на андроиде, если их использовать как 3g модем  (например мой GT-S6102) будут работать если отключить ModemManager.service. Может и ваш модем тоже сможет подключится? ".

Лично у меня в дополнение к сетевой карте имеется USB wi-fi модем китайского образца. После отключения указанной выше службы подключение через этот модем не пропало.

networking.service
NetworkManager-wait-online.service
NetworkManager.service

Эти 3 службы отвечают за управление сетью на Вашем компьютере. Первоначальный ответ "нужно". На некоторых ресурсах Интернет имеются высказывания пользователей о том, что они выключали службу NetworkManager-wait-online.service

ntp.service – служба времени, нужна.

ondemand.service – служба политики управления частотой процессора, нужна.

openvpn.service – служба Ваших подключений по Open VPN. Если Вы не знаете, что такое VPN или никогда не будете подключаться через Open VPN, то эта служба, как говорится, "стопудово" Вам не нужна. Лично у меня все подключения в мир проходят через MikroTik, поэтому и весь VPN будет организован тоже на нём. Учитывая мои реалии, openvpn и сопутствующие ему пакеты удаляю через Synaptic начисто, чтобы не занимал место и не тратил ресурсов.


Хотя очень многие могут мне возразить: "Хай буде".

polkitd.service
Как указано в статье "Создание собственных правил", PolicyKit запускается и работает как служба операционной системы polkitd. Эта служба запускается от имени пользователя polkitd, который является обычным пользователем системы с ограниченными правами. Демон polkitd всегда стартует с правами суперпользователя и сразу после старта понижает права до обычного пользователя.
Каждый раз, когда приложение требует участия PolicyKit, демон polkitd запускается автоматически. Это обеспечивается средствами dbus-daemon или systemd. Поэтому пользователю никогда не приходится запускать polkitd вручную.
При каждом старте демона файлы .rules перечитываются заново. Поэтому изменения, внесенные в правила, начинают работать сразу, без перезапуска демона, сеанса пользователя или всей системы целиком.
Вывод: служба нужна.

rc-local.service
Назначение этой службы становится понятным после даже поверхностного ознакомления с содержанием статьи "Власть на демонами или автозапуск в Linux". Читайте абзац, который начинается со слов "Существуют несколько способов сделать автозапуск программ в Linux".
Вывод: служба нужна.

resolvconf.service – служба, касающаяся процесса преобразования имён узлов в адреса IP. Служба нужна. Кому интересны подробности, обратитесь к статье "Взаимоотношения dhcpclient и resolv.conf'a в Linux" здесь или на ресурс Linux Network Administrators здесь.

rsyslog.service
На одном из форумов имеется такой ответ: Rsyslog – это демон ведения логов. Удалять его, конечно, не следует. Без него некоторые программы не смогут писать свои логи. Следовательно, служба нужна.

rtkit-daemon.service – RealtimeKit Scheduling Policy Service, т.е. что-то типа службы политик планировщика в реальном масштабе времени. Да уж, как сложно-то, похоже, что служба нужна.

setvtrgb.service
Насколько мне удалось понять из содержания данной страницы, setvtrgb имеет отношение к цветовой палитре терминала. Получается, что служба нужна.

speech-dispatcher.service
Speech Dispatcher - это унифицированный API, который имеет предназначение для изменения порядка вызова синтезатора, так же позволяет предотвратить наложения звука при использовании нескольких приложений и воспроизведении в них звука одновременно. Если вы не планируете использовать синтезаторы речи, отключайте:

 sudo systemctl disable speech-dispatcher.service 

speech-dispatcher.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install disable speech-dispatcher
insserv: warning: current start runlevel(s) (empty) of script `speech-dispatcher' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `speech-dispatcher' overrides LSB defaults (0 1 6).


ssh.service
У меня установлен сервер ssh, поэтому наличие данной службы вопросов не вызывает.

sysstat.service – служба мониторинга производительности системы. Подробности читайте здесь. Служба нужна.

systemd-journal-flush.service
systemd-journald.service
systemd-logind.service
systemd-modules-load.service
systemd-random-seed.service
systemd-remount-fs.service
systemd-sysctl.service
systemd-tmpfiles-setup-dev.service
systemd-tmpfiles-setup.service
systemd-udev-trigger.service
systemd-udevd.service
systemd-update-utmp.service
systemd-user-sessions.service

Перечисленное выше относится к systemd – системному менеджеру, демону инициализации других демонов в Linux, который пришёл на замену использовавшегося ранее SysV. Его особенностью является интенсивное распараллеливание запуска служб в процессе загрузки системы, что позволило существенно ускорить запуск операционной системы. Название происходит от принятого в Unix добавления суффикса «d» к демонам.
Systemd оперирует специально оформленными файлами конфигурации – юнитами (unit). Каждый юнит отвечает за отдельно взятую службу, точку монтирования, подключаемое устройство, файл подкачки, виртуальную машину и т.п. Существуют специальные типы юнитов, которые не несут функциональной нагрузки, но позволяют задействовать дополнительные возможности systemd. 
Юнит service отвечает за запуск сервисов (служб), также поддерживает вызов интерпретаторов для исполнения пользовательских скриптов.

Точного описания этих служб не найдено, но предполагаю, что

systemd-journal-flush и systemd-journald – относятся к ведению журналов (прооколов работы) и их очистке;
systemd-logind – касается сеансов работы пользователей;
systemd-modules-load – относится к загрузке модулей; 
systemd-random-seed – информации нет. Из wiki Gentoo стало известно, что эта служба относится к OpenRC сервису urandom. А уже после публикации в этой статье найдено, что "В свободной ОС имеется энтропийный пул, работающий через удобный интерфейс /dev/random. Там накапливаются случайные числа, полученные путем сбора случайных событий (передвижение мыши, интервалы между нажатиями клавиш и т.п.)".
systemd-remount-fs – монтирование файловых систем;
systemd-sysctl – отслеживание и контроль состояния systemd;
systemd-tmpfiles-setup-dev, systemd-tmpfiles-setup, systemd-udev-trigger, systemd-udevd – относятся к временным данным, символьным данным и файлам устройств;
systemd-update-utmp – судя по этому мануалу, служба ведёт аудит и записи обновлений регистрационных имён при старте, изменении уровней запуска и выключении системы;
systemd-user-sessions – служба пользовательских сессий.

teamviewerd.service – служба установленного у меня ПО Teamviewer.

udisks2.service – служба относится к Disk Manager, т.е. диспетчеру носителей. Служба нужна.

ufw.service – служба межсетевого экрана. По причине того, что у меня имеется роутер MikroTik со своим многофункциональным и гибко настраиваемым сетевым экраном, UFW от Linux Mint у меня никогда не был активизирован.


Поэтому на своей системе удаляю его вообще.


Что касается Вашего случая – решать Вам. Например, если Ваш домашний модем работает в режиме роутера, то у него тоже есть межсетевой экран, имеющий 3 режима работы: низкий (Low), средний (Middle), высокий (High), например:


Дополнительные пояснения по указанному примеру прочитать здесь.

Аналогичный этому мой модем работает в режиме Bridge, а поднимает Интернет MikroTik, поэтому вопрос о настройке firewall своего модема Вам придётся изучить самостоятельно.

upower.service – служба управления питанием, нужна.

ureadahead.service – служба используется при загрузке. Подробности читать здесь.

user@1000.service – являюсь пользователем системы с ID=1000, так что это моё. 

vboxautostart-service.service
vboxballoonctrl-service.service
vboxdrv.service
vboxweb-service.service
virtualbox-guest-utils.service

У меня установлено ПО Virtualbox, поэтому, как видно из названий, все перечисленные выше службы относятся к ПО Virtualbox. 

wpa_supplicant.service – служба представляет из себя Wi-Fi Security Service, т.е. имеет отношение к безопасности соединений по WiFi. Пользуюсь шнуром, поэтому

 sudo systemctl disable wpa_supplicant.service 

Далее следует перезагрузка и проверка. Странное дело – несмотря на выключение wpa_supplicant.service эта служба стартовала снова. Итак, результаты:

до вмешательства
Startup finished in 4.543s (kernel) + 31.530s (userspace) = 36.073s

после вмешательства
Startup finished in 4.566s (kernel) + 28.409s (userspace) = 32.976s

после возвращения включения wpa_supplicant.service
Startup finished in 4.536s (kernel) + 28.120s (userspace) = 32.657s

Что ж, вероятно, на этом и следует остановиться. Время старта ядра и userspace чуточку меньше. Выигрыш в целом составил 3,4 секунды.

А Вы полагали, что всё будет загружено за 5 секунд? Не стоит забывать, что моя система "отягощена ношей" teamviewer, virtualbox и ssh-сервера, которые в совокупности увеличивают время загрузки на 10,4 секунды.


Заключительные мысли

Не раз посещало желание бросить и дальше не писать, так как нужные сведения попадались, в основном, разрозненные. Приходилось неоднократно запускать поиск и читать зачастую малоинформативные публикации. Bременами создавалось впечатление, что очень многие просто переписывают друг у друга. Но, как поётся в одной из композиций группы Queen, show must go on.

Поэтому не судите строго, не являюсь разработчиком или программистом Linux, вследствие чего в описании служб могуть быть ошибки. Получилось своего рода подобие шпаргалки для себя. Может быть и ещё кому-нибудь пригодится.


4 комментария:

  1. Спасибо. Тема рамкрыта очень доходчиво.

    ОтветитьУдалить
  2. КАк посмотреть время загрузки типа Startup finished in 4.536s (kernel) + 28.120s (userspace) = 32.657s ??

    ОтветитьУдалить
    Ответы
    1. Из текста статьи:

      ```
      Насколько быстро грузится система сейчас:
      $ systemd-analyze

      Время, затраченное на старт каждого сервиса:
      $ systemd-analyze blame

      График с указанием времени загрузки сервиса и отображением параллельных загрузок:
      $ systemd-analyze plot > graph.svf

      Файл svf открывается в браузере (проверено на Firefox, Chrome, Opera, Vivaldi, Midori).
      ```

      Вам нужна команда "systemd-analyze"

      Удалить
  3. Опечаточка обнаружена однако: В "$ systemd-analyze plot > graph.svf" - расширение файла должно быть [b]svg[/b]!

    ОтветитьУдалить