Ускорение загрузки Linux

Скорость загрузки вашей операционной системы - это очень важный момент в работе компьютера. Никому не хочется смотреть на заставку загрузки по несколько минут. Чем быстрее загрузится система и будет готова к работе, тем лучше.

Но порой система инициализации выполняет много лишних задач во время загрузки, иногда некоторые сервисы ожидают загрузки других и завершаются только по таймауту через некоторое время. В таких случаях система может загружаться до нескольких минут. В этой статье мы рассмотрим как ускорить загрузку Linux, что нужно для этого настроить, что удалить. А также немного поговорим о процессе загрузки. Мы сосредоточимся на системе инициализации systemd.

Как проходит загрузка Linux

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

На то как BIOS тестирует устройства и запускает загрузчик мы повлиять не можем. Работу загрузчика тоже ускорить не получится, можно только убрать ожидание выбора пункта меню.

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

После того как ядро передало управление системе инициализации, начинается монтирование дисков. Это тоже отнимает время, лучше не использовать виртуальные разделы дисков, например, raid или lvm, да и вообще, чем меньше разделов - тем лучше. Идеальный вариант - только корневой раздел, тогда скорость загрузки linux будет максимальной. Но это очень невыгодный в плане удобства вариант, поэтому найдите золотую серединку. Перед тем как примонтировать каждый диск, система инициализации пытается проверить файловую систему на ошибки, это тоже замедляет загрузку.

Загрузка сервисов отнимает больше всего времени и больше всего работы придется проделать здесь, определить какие сервисы не нужны и отключить их также скрыть те сервисы, которые отключить нельзя. Чтобы понять что именно отключать нам нужно знать сколько времени занимает загрузка каждого сервиса. Давайте рассмотрим анализ скорости загрузки systemd.

Анализ загрузки Systemd

Анализ скорости загрузки системы важен не только в самом процессе оптимизации, но и для того, чтобы оценить насколько эта оптимизация удалась. Перед и после оптимизации нужно замерять время загрузки, чтобы понять чего мы смогли добиться.

Давайте посмотрим насколько быстро грузится наша система сейчас:

systemd-analyze

systemd

Да, здесь 17 секунд, не так уж плохо, но будет еще лучше после завершения ускорения загрузки. На загрузку ядра уходит 5.405, а на все остальные сервисы 11.611. Чтобы понять какие именно сервисы замедляют систему нам нужна более подробная информация, мы можем ее получить с помощью параметра blame:

systemd-analyze blame

systemd1

У нас есть список сервисов, которые загружаются дольше всего, но этот список ни о чем нам не говорит, потому что в Systemd параллельная загрузка сервисов. Если бы во время загрузки была какая-нибудь проблема, мы бы ее увидели, но проблем здесь нет. Нам нужен более детализованный график с указанием не только времени загрузки сервиса, но и с отображением параллельных загрузок и мы можем его получить командой:

systemd-analyze plot > graph.svf

Утилита сгенерирует svf файл с графиком, откройте его в браузере:

systemd2

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

Ускорение загрузки Linux

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

Настраивать Grub будем правильно. Параметры загрузки ядра находятся в файле /etc/default/grub, а именно в строчке GRUB_CMDLINE_LINUX_DEFAULT. Откройте этот файл:

vi /etc/default/grub

Теперь приводим интересующую нас строчку к такому состоянию:

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootfstype=ext4  libahci.ignore_sss=1 raid=noautodetect selinux=0 plymouth.enable=0 lpj=12053560"

Разберем подробнее за что отвечает каждый параметр:

  • quiet - вывод, это долго, поэтому говорим ядру что на экран нужно выводить минимум информации
  • rootfstype=ext4 - указываем в какую файловую систему отформатирован корень. У меня ext4.
  • libahci.ignore_sss=1 - Ignore staggered spinup flag, ускоряет загрузку жестких дисков
  • raid=noautodetect - raid я не использую, думаю вы тоже поэтому отключаем.
  • selinux=0 - система полномочий selinux на домашней машине тоже ни к чему, без нее будет быстрее.
  • plymouth.enable=0 - заставка plymouth тоже занимает много времени, поэтому убираем заставку
  • lpj=12053560 - позволяет задать константу loops_per_jiffy, что позволит ядру не вычислять ее каждый раз и сэкономит до 250 миллисекунд. Это значение индивидуально для каждого компьютера.

Чтобы узнать значение последнего параметра выполните:

dmesg | grep 'lpj='

systemd3

Нас будет интересовать значение lpj=, укажите его в своем конфигурационном файле.

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

GRUB_DISABLE_LINUX_UUID=true

Сохраните файл и обновим конфигурацию grub:

sudo update-grub

Проверяем, действительно ли установлены нужные опции:

vi /boot/grub/grub.cfg

systemd5

Да, все правильно, перезагружаем компьютер, и смотрим что вышло:

systemd-analyze

systemd4

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

Настройка системы

Во-первых SELinux отключен не полностью. Для полного отключения добавляем строку в файл /etc/selinux/config:

sudo vi /etc/selinux/config

SELINUX=disabled

Во-вторых, проверка файловых систем тоже может занять некоторое время. Оставляем проверку на ошибки только для корня. Для этого откройте файл /etc/fstab и приведите строчку для корня к такому виду:

vi /etc/fstab

/dev/sda3 / ext4 defaults 1 1

Последний параметр отвечает за проверку, 1 - проверять, 0 - не проверять. Установите для всех других разделов 0. К тому же boot раздел лучше монтировать по требованию. Для этого изменяем его запись:

/dev/sda1 /boot ext4 noauto,comment=systemd.automount 1 0

Затем давайте перенесем папку /tmp в оперативную память, чтобы уменьшить количество операций на жестком диске:

tmpfs /tmp tmpfs defaults 0 0

Ускорение загрузки Linux отключением сервисов

Вот мы и добрались к сервисам. Оптимизация сервисов заключается в том, чтобы отключить лишнее, а также использовать только возможности, встроенные в systemd, так будет быстрее. Сначала перенесем всю функциональность на systemd.

Первым отключим rsyslog. В systemd используется свой механизм записи логов journald, поэтому вести еще один не нужно. Для отключения выполните:

sudo systemctl disable rsyslog
$ sudo systemctl mask rsyslog

Опция mask позволяет спрятать юнит, система будет думать что его не существует и не сможет загрузить. Восстановить такой юнит можно командой systemctl unmask.

В systemd реализована своя служба настройки сети - networkd, поэтому необязательно использовать NetworkManager. Работа со встроенной службой будет намного быстрее. Здесь нужно заметить, что если вы используете wifi и не хотите настраивать его вручную, через консоль, то отключать NetworkManager не стоит.

Отключаем NetworkManager и включаем networkd:

sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd

Службу networking тоже можно отключить, если не используете:

sudo systemctl disable networking

Включаем resolved, который отвечает за настройку DNS серверов:

sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved

Даем символическую ссылку на файл /etc/resolv.conf

sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Осталось настроить динамическое получение ip адреса при загрузке:

sudo vi /etc/systemd/network/20-dhcp.network

[Match]
Name=enp*

[Network]
DHCP=yes

enp0* значит, что сеть нужно подымать только для устройств, имена которых начинаются на enp0. Готово, сеть настроена.

В systemd есть свое решение для выполнения задач по расписанию, поэтому cron можно не использовать:

sudo systemctl disable cron

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

sudo systemctl disable ufw
$ sudo systemctl mask ufw

Отключаем apport (служба отчетов об ошибках):

 

 sudo systemctl disable apport

 

Я не использую ppp и мобильные соединения, поэтому и эти сервисы можно отключить.

sudo systemctl disable pppd-dns
$ sudo systemctl mask pppd-dns

sudo systemctl disable ModemManager
$ sudo systemctl mask ModemManager

 

Если вы не используете Avahi, его тоже можно отключить:

sudo systemctl disable avahi-daemon

Систему AppArmor тоже можно отключить:

sudo systemctl disable apparmor

Также если у вас загружаются такие программы, как postfix (почтовый сервер), apache (веб-сервер), mysql (сервер баз данных) лучше их тоже убрать из автозагрузки и запускать потом вручную.

Перезагружаемся и проверяем скорость загрузки:

systemd7

У меня скорость загрузки linux выросла на пять секунд. Но это нормально, учитывая, что используется VirtualBox, на реальной машине можно получить и больше. А самая лучшая оптимизация - купить SSD, там можно достичь даже скорости загрузки до двух-трех секунд.

Выводы

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

Оцените статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (19 оценок, среднее: 4,84 из 5)
Загрузка...

89 комментариев

  1. Gordon 23 июля, 2016 Ответить
    • admin 24 июля, 2016 Ответить
      • Sergsh 25 января, 2019 Ответить
    • jzyken 25 июля, 2016 Ответить
      • admin 25 июля, 2016 Ответить
  2. jzyken 23 июля, 2016 Ответить
  3. User 24 июля, 2016 Ответить
  4. admin 24 июля, 2016 Ответить
  5. Konstantin 24 июля, 2016 Ответить
  6. Александр 24 июля, 2016 Ответить
    • admin 24 июля, 2016 Ответить
  7. Александр 24 июля, 2016 Ответить
  8. Konstantin 24 июля, 2016 Ответить
    • admin 24 июля, 2016 Ответить
  9. Silent Hill 24 июля, 2016 Ответить
    • admin 24 июля, 2016 Ответить
  10. darkxakep 24 июля, 2016 Ответить
  11. Ilya 24 июля, 2016 Ответить
    • admin 24 июля, 2016 Ответить
    • jzyken 24 июля, 2016 Ответить
    • jzyken 24 июля, 2016 Ответить
      • admin 25 июля, 2016 Ответить
  12. Алекс 24 июля, 2016 Ответить
  13. SpacePony 24 июля, 2016 Ответить
  14. SpacePony 24 июля, 2016 Ответить
  15. jzyken 24 июля, 2016 Ответить
    • jzyken 24 июля, 2016 Ответить
    • admin 25 июля, 2016 Ответить
  16. darkxakep 26 июля, 2016 Ответить
  17. Nachbar 26 июля, 2016 Ответить
    • admin 27 июля, 2016 Ответить
      • atc4ex 29 июля, 2016 Ответить
      • Nachbar 29 июля, 2016 Ответить
  18. teemee 27 июля, 2016 Ответить
  19. Егор 29 июля, 2016 Ответить
    • jzyken 29 июля, 2016 Ответить
      • Егор 29 июля, 2016 Ответить
        • Егор 29 июля, 2016 Ответить
    • admin 29 июля, 2016 Ответить
  20. Денис 30 июля, 2016 Ответить
  21. Михаил 30 июля, 2016 Ответить
  22. jzyken 2 августа, 2016 Ответить
  23. Vital 3 августа, 2016 Ответить
  24. Борис 6 августа, 2016 Ответить
    • admin 6 августа, 2016 Ответить
  25. Борис 6 августа, 2016 Ответить
  26. Anton 23 августа, 2016 Ответить
    • admin 23 августа, 2016 Ответить
  27. user 28 августа, 2016 Ответить
  28. Alex 7 октября, 2016 Ответить
    • admin 7 октября, 2016 Ответить
      • Alex 8 октября, 2016 Ответить
        • Ulin 11 февраля, 2017 Ответить
  29. Aleksey 25 февраля, 2017 Ответить
  30. Maks 27 февраля, 2017 Ответить
  31. Николай 15 марта, 2017 Ответить
  32. Александр 20 марта, 2017 Ответить
    • akulishov 23 марта, 2017 Ответить
  33. akulishov 23 марта, 2017 Ответить
  34. Andrey1386 22 апреля, 2017 Ответить
    • Dannil 4 мая, 2018 Ответить
    • Max 4 октября, 2017 Ответить
      • Max 4 октября, 2017 Ответить
      • Серёга 30 ноября, 2018 Ответить
    • sergsh 25 января, 2019 Ответить
  35. LosstFan 5 сентября, 2017 Ответить
  36. максим 4 февраля, 2018 Ответить
  37. Dmitry 11 февраля, 2018 Ответить
  38. Александр 1 марта, 2018 Ответить
  39. DIMIDROLIUM 28 марта, 2018 Ответить
    • Серёга 30 ноября, 2018 Ответить
  40. kaem 1 июня, 2018 Ответить
  41. Alik 23 июня, 2018 Ответить
    • Серёга 30 ноября, 2018 Ответить
  42. Иван 29 июля, 2018 Ответить
    • Серёга 30 ноября, 2018 Ответить
  43. Серёга 30 ноября, 2018 Ответить
  44. Sergsh 25 января, 2019 Ответить
  45. Acer 19 февраля, 2019 Ответить
  46. Олег 2 апреля, 2019 Ответить
  47. иванов 6 сентября, 2019 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: