Optimizarea boot-ului și shutdown-ului pe Linux

Optimizarea boot-ului și shutdown-ului pe Linux

Toate distribuțiile majore de Linux folosesc systemd ca sistem de init, ceea ce înseamnă că metodele de optimizare sunt în mare parte aceleași, indiferent de distribuție. Diferă doar serviciile specifice fiecărei distribuții care pot fi dezactivate sau amânate. Acest articol acoperă Debian, Ubuntu/Linux Mint, Arch Linux, Fedora și openSUSE.

Diagnosticarea problemelor

Primul pas este să identifici ce anume încetinește boot-ul. systemd oferă câteva unelte utile în acest sens.

Timpul total de boot:

systemd-analyze

Lista serviciilor sortate după timpul de pornire:

systemd-analyze blame

Lanțul critic - serviciile care blochează efectiv boot-ul:

systemd-analyze critical-chain

Grafic vizual al boot-ului (generat ca fișier SVG):

systemd-analyze plot > boot.svg

Deschide fișierul SVG în browser pentru a vedea o reprezentare vizuală completă a procesului de boot, cu toate serviciile și dependențele dintre ele.

Optimizări comune pentru toate distribuțiile

Acestea se aplică indiferent de distribuție, deoarece sunt configurații ale systemd însuși.

Reducerea timeout-ului la shutdown

Implicit, systemd așteaptă 90 de secunde pentru fiecare serviciu să se oprească înainte de a-l forța. Editează:

sudo nano /etc/systemd/system.conf

Adaugă sau modifică la finalul fișierului:

DefaultTimeoutStopSec=10s
DefaultTimeoutAbortSec=10s
ShutdownWatchdogSec=10s

Aplică modificările:

sudo systemctl daemon-reload
  • DefaultTimeoutStopSec - cât așteaptă systemd după trimiterea SIGTERM înainte de a trimite SIGKILL
  • DefaultTimeoutAbortSec - timeout pentru serviciile care primesc SIGABRT
  • ShutdownWatchdogSec - dacă systemd însuși îngheață în timpul shutdown-ului, hardware watchdog-ul repornește forțat mașina

Dezactivarea NetworkManager-wait-online

Acest serviciu blochează boot-ul până când conexiunea la rețea este complet stabilită. Pe un desktop nu este necesar - aplicațiile se conectează singure când au nevoie.

sudo systemctl disable NetworkManager-wait-online.service
Atenție: Pe servere sau sisteme care rulează servicii ce depind de rețea la pornire (baze de date cu conexiuni remote, NFS, etc.), nu dezactiva acest serviciu.

Dezactivarea systemd-networkd-wait-online

Similar cu cel de mai sus, dar pentru sistemele care folosesc systemd-networkd în loc de NetworkManager:

sudo systemctl disable systemd-networkd-wait-online.service

Optimizări specifice distribuției

Servicii care pot încetini boot-ul

  • apt-daily.service și apt-daily-upgrade.service - verificarea și instalarea actualizărilor la pornire
  • ModemManager.service - necesar doar dacă folosești un modem GSM/4G
  • avahi-daemon.service - descoperire de servicii în rețea locală, necesar doar în unele scenarii

Amânarea verificării pachetelor

sudo systemctl edit apt-daily.timer

Adaugă:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Același lucru pentru upgrade:

sudo systemctl edit apt-daily-upgrade.timer
[Timer]
OnBootSec=20min
OnUnitActiveSec=1d

Dezactivarea serviciilor inutile

Dacă nu folosești un modem:

sudo systemctl disable ModemManager.service

Dacă nu ai nevoie de descoperire automată de servicii în rețea locală:

sudo systemctl disable avahi-daemon.service

Servicii specifice Ubuntu/Mint

  • mintupdate-automation-upgrade.service - (Linux Mint) instalează actualizări la fiecare pornire
  • apt-daily.service - descarcă liste de pachete la boot
  • fwupd-refresh.service - verifică actualizări de firmware
  • ubuntu-system-adjustments.service - ajustări specifice Ubuntu
  • update-notifier-download.service - descarcă actualizări în fundal

Dezactivarea upgrade-ului automat la boot (Linux Mint)

Serviciul nu are secțiune [Install], deci disable nu funcționează complet. Folosește mask:

sudo systemctl mask mintupdate-automation-upgrade.timer
sudo systemctl stop mintupdate-automation-upgrade.timer

Actualizările automate zilnice rămân active prin apt-daily-upgrade.timer, care rulează complet în fundal fără nicio intervenție manuală.

Amânarea verificării pachetelor

sudo systemctl edit apt-daily.timer
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Dezactivarea serviciilor opționale

Actualizări de firmware (dacă nu ai nevoie):

sudo systemctl disable fwupd-refresh.service
sudo systemctl disable fwupd.service

Servicii care pot încetini boot-ul

  • reflector.service sau reflector.timer - actualizează lista de mirror-uri la boot, poate fi lent
  • man-db.service - reindexează paginile de manual, rulează uneori la boot
  • updatedb.service - actualizează baza de date pentru locate

Dezactivarea sau amânarea Reflector

sudo systemctl disable reflector.service

Poți lăsa reflector.timer activ dacă vrei actualizare periodică, sau îl poți rula manual când ai nevoie:

sudo reflector --latest 10 --sort rate --save /etc/pacman.d/mirrorlist

Activarea systemd-resolved

Pe Arch, systemd-resolved nu este activat implicit. Activarea lui poate îmbunătăți viteza de rezolvare DNS:

sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Compresia initramfs

Arch folosește implicit compresia zstd pentru initramfs, care e rapidă. Dacă din diverse motive folosești gzip sau bzip2, schimbarea la zstd în /etc/mkinitcpio.conf reduce timpul de decompresie la boot:

COMPRESSION="zstd"

Regenerează initramfs:

sudo mkinitcpio -P

Servicii care pot încetini boot-ul

  • dnf-makecache.service / dnf-makecache.timer - actualizează cache-ul DNF la boot
  • ModemManager.service - necesar doar cu modem GSM/4G
  • sssd.service - autentificare centralizată, necesar doar în medii enterprise
  • abrt*.service - raportare automată de bug-uri

Amânarea actualizării cache-ului DNF

sudo systemctl edit dnf-makecache.timer
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Dezactivarea serviciilor inutile pe desktop

Raportare automată de bug-uri:

sudo systemctl disable abrtd.service
sudo systemctl disable abrt-ccpp.service
sudo systemctl disable abrt-oops.service

SSSD (doar dacă nu ești în rețea enterprise cu LDAP/AD):

sudo systemctl disable sssd.service

ModemManager (dacă nu ai modem):

sudo systemctl disable ModemManager.service

SELinux și boot-ul

Pe Fedora, SELinux poate adăuga timp la primul boot după o actualizare majoră, deoarece reindexează toate fișierele. Aceasta este normală și nu se repetă la fiecare boot. Nu dezactiva SELinux pentru a câștiga timp de boot - compromisul de securitate nu merită.

Servicii care pot încetini boot-ul

  • Servicii legate de actualizări automate Zypper
  • wicked.service - alternativa openSUSE la NetworkManager, poate fi lentă la inițializare

NetworkManager vs Wicked

openSUSE folosește implicit wicked pentru gestionarea rețelei. Dacă ai instalat NetworkManager și rulezi ambele, poți dezactiva wicked:

sudo systemctl disable wicked.service
sudo systemctl enable NetworkManager.service

Dezactivarea verificărilor automate de actualizări la boot

sudo systemctl disable zypper-refresh-patches.timer

Sau verifică ce timere sunt active pe sistemul tău:

systemctl list-timers

AppArmor

Similar cu SELinux pe Fedora, AppArmor pe openSUSE poate adăuga câteva secunde la boot. Nu dezactiva AppArmor pentru a câștiga timp - este un strat important de securitate.

Rezumat

Distribuție Serviciu problematic Acțiune recomandată
Debian apt-daily.timer Amână la 15min după boot
Ubuntu/Mint mintupdate-automation-upgrade.timer Mask complet
Ubuntu/Mint apt-daily.timer Amână la 15min după boot
Arch reflector.service Dezactivează, rulează manual
Fedora dnf-makecache.timer Amână la 15min după boot
Fedora abrtd.service Dezactivează pe desktop
openSUSE wicked.service Înlocuiește cu NetworkManager
Toate NetworkManager-wait-online Dezactivează pe desktop
Toate DefaultTimeoutStopSec Setează la 10s în system.conf