Ускорение загрузки 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)
Загрузка...

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

  1. Gordon Июль 23, 2016 Ответить
    • admin Июль 24, 2016 Ответить
    • 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 Ответить
    • admin Июль 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 Ответить
  35. LosstFan Сентябрь 5, 2017 Ответить
  36. максим Февраль 4, 2018 Ответить
  37. Dmitry Февраль 11, 2018 Ответить
  38. Александр Март 1, 2018 Ответить
  39. DIMIDROLIUM Март 28, 2018 Ответить
  40. kaem Июнь 1, 2018 Ответить
  41. Alik Июнь 23, 2018 Ответить
  42. Иван Июль 29, 2018 Ответить

Ответить

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

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