Ускорение загрузки 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 (21 оценок, среднее: 4,86 из 5)
Загрузка...

94 комментария

  1. Аватар Gordon 23 июля, 2016 Ответить
    • Аватар admin 24 июля, 2016 Ответить
      • Аватар Sergsh 25 января, 2019 Ответить
        • Аватар дауж 7 апреля, 2020 Ответить
    • Аватар 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 Ответить
      • Аватар Lynx 26 июня, 2020 Ответить
    • Аватар 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 Ответить
  48. Аватар Орхан 23 августа, 2020 Ответить
  49. Аватар Rocky 23 сентября, 2020 Ответить
  50. Аватар FsKir 26 сентября, 2020 Ответить

Ответить

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

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