Optimizarea timpului de pornire

Optimizarea timpului de pornire

Dacă ai un calculator cu Linux și observi că durează mai mult decât te-ai aștepta până ajungi la desktop, nu e neapărat vina hardware-ului. De cele mai multe ori, problema vine din interior: câteva servicii pornesc la boot fără să fie necesare, sau unele stau în calea altora care ar trebui să fie gata mai repede. Vestea bună este că Linux nu ascunde nimic - toate informațiile sunt disponibile, trebuie doar să știi unde să le cauți.

Această pagină explică cum să analizezi procesul de pornire, cum să identifici serviciile problematice și cum să le dezactivezi în siguranță, cu sau fără terminal.

Instrumentul principal: systemd-analyze

Pe orice distribuție modernă care folosește systemd, există un instrument inclus numit systemd-analyze. Nu necesită nicio instalare suplimentară și îți oferă o imagine completă a procesului de boot, împărțit pe etape.

Timpul total de pornire

Cea mai simplă comandă, rulată fără argumente, îți arată cât a durat ultima pornire:

systemd-analyze

Rezultatul arată cam așa:

Startup finished in 4.2s (firmware) + 1.1s (loader) + 2.3s (kernel) + 8.7s (userspace) = 16.3s

Cele patru etape sunt:

  • firmware - timpul petrecut în BIOS/UEFI, înainte ca sistemul de operare să preia controlul
  • loader - timpul petrecut în bootloader (GRUB, systemd-boot etc.)
  • kernel - inițializarea kernel-ului Linux și a hardware-ului de bază
  • userspace - lansarea tuturor serviciilor sistemului; aici se pierde, de obicei, cel mai mult timp
Dacă folosești UEFI și un bootloader compatibil (systemd-boot sau GRUB modern), vei vedea și etapele de firmware și loader în rezultat. Pe sisteme mai vechi cu BIOS, acestea pot lipsi din raport.

Lista serviciilor, sortată după timp

Comanda blame îți arată toate serviciile care au pornit la ultimul boot, ordonate de la cel mai lent la cel mai rapid:

systemd-analyze blame

Rezultatul arată ceva de genul:

  8.430s NetworkManager-wait-online.service
  3.210s plymouth-quit-wait.service
  2.180s dev-sda1.device
  1.450s udisks2.service
   980ms ModemManager.service
   640ms avahi-daemon.service
   ...
Un serviciu cu un timp mare în această listă nu înseamnă automat că el este cel care îți ține sistemul pe loc. Multe servicii rulează în paralel cu altele și nu blochează nimic. blame îți dă o imagine de ansamblu, dar nu te lasă să tragi concluzii definitive despre ce anume încetinește bootul.

Lanțul critic de dependențe

Aceasta este comanda cea mai utilă pentru diagnosticare. critical-chain îți arată exact care servicii se blochează unele pe altele, adică lanțul de dependențe care determină când sistemul devine cu adevărat utilizabil:

systemd-analyze critical-chain

Exemplu de rezultat:

graphical.target @9.5s
└─multi-user.target @9.5s
  └─NetworkManager-wait-online.service @1.2s +8.3s
    └─NetworkManager.service @1.1s +98ms
      └─network-pre.target @1.1s
        └─firewalld.service @0.9s +180ms

Simbolul @ arată la câte secunde după start a început serviciul, iar + arată cât a durat să pornească. Serviciile care apar aici cu un timp mare sunt candidații reali pentru optimizare - spre deosebire de cele din blame, acestea chiar stau în calea pornirii sistemului.

Probleme frecvente care apar în lanțul critic:

  • NetworkManager-wait-online.service - serviciu care așteaptă o conexiune la rețea înainte să continue
  • Servicii pentru containere (Docker, Podman etc.)
  • Drivere lente sau probleme de detectare a hardware-ului

Diagrama vizuală a procesului de boot

Dacă preferi o imagine de ansamblu grafică, poți genera o diagramă în format SVG:

systemd-analyze plot > boot.svg

Fișierul rezultat se poate deschide în orice browser web sau în Inkscape și arată toate serviciile pe o axă temporală, inclusiv cât durează fiecare și care se suprapun. Este util mai ales când vrei să înțelegi mai bine cum funcționează lucrurile sau când investigezi un caz complex.

Cum dezactivezi serviciile inutile

Odată ce ai identificat serviciile care consumă timp fără niciun folos, ai la dispoziție două metode: dezactivarea normală sau mascarea.

Dezactivarea unui serviciu

Dezactivarea oprește serviciul să mai pornească automat la boot, dar îl lasă disponibil pentru a fi pornit manual oricând:

sudo systemctl disable numele-serviciului

Pentru a-l reactiva:

sudo systemctl enable numele-serviciului

Mascarea unui serviciu

Mascarea este mai radicală: împiedică serviciul să fie pornit chiar și de alte procese sau dependențe, nu doar la boot:

sudo systemctl mask numele-serviciului

Pentru a-l demasca:

sudo systemctl unmask numele-serviciului

Servicii frecvent dezactivate fără probleme

Acestea sunt servicii pe care mulți utilizatori le au activate implicit, deși nu le folosesc:

Serviciu Ce face Când poți dezactiva
bluetooth.service Manager Bluetooth Dacă nu folosești niciun dispozitiv Bluetooth
cups.service Daemon pentru imprimantă Dacă nu ai imprimantă conectată
avahi-daemon.service Descoperire automată de servicii în rețea Pe sisteme simple, fără nevoie de mDNS
ModemManager.service Manager pentru modemuri mobile Dacă nu folosești un modem USB sau SIM
NetworkManager-wait-online.service Așteaptă conexiunea la rețea Pe sisteme desktop unde rețeaua nu e critică la boot
Înainte de a dezactiva orice serviciu, verifică ce dependențe are cu systemctl cat numele-serviciului și systemd-analyze critical-chain numele-serviciului. Dezactivarea unui serviciu de care depinde altceva important poate face sistemul să nu mai pornească corect.

Aplicații grafice pentru gestionarea serviciilor

Dacă terminalul nu este mediul tău preferat, există câteva aplicații grafice care îți permit să faci cam același lucru prin interfețe vizuale.

SysD Manager

Cea mai îngrijită opțiune disponibilă în prezent, distribuită prin Flathub și instalabilă pe orice distribuție care are Flatpak:

flatpak install flathub io.github.plrigaux.sysd-manager

Oferă o interfață completă pentru gestionarea unităților systemd: vizualizarea și editarea fișierelor unit, pornirea și oprirea serviciilor, activarea și dezactivarea la boot. Este aplicația recomandată pentru utilizatorii care preferă o interfață grafică.

systemd-manager

Scrisă în Rust și construită cu GTK3, include pe lângă gestionarea serviciilor și o secțiune dedicată pentru systemd-analyze, unde poți vedea timpii de boot direct în interfață. Este disponibilă în AUR pentru Arch și distribuțiile derivate, și ca pachet snap pentru Ubuntu:

# Pe Arch Linux (AUR)
yay -S systemd-manager-git
 
# Pe Ubuntu (snap)
sudo snap install systemd-manager

O notă despre aplicațiile grafice

Și cu o interfață grafică, riscul rămâne același ca la terminal: dacă dezactivezi un serviciu de care depinde altceva important, sistemul poate ajunge să nu mai pornească deloc sau să se comporte ciudat. Interfața grafică nu te ferește de greșeli - ba chiar te poate face să apeși prea ușor pe butoane fără să înțelegi pe deplin ce faci. Comenzile din terminal, tocmai pentru că necesită să le scrii conștient, te obligă într-un fel să fii mai atent.

Flux de lucru recomandat

Dacă vrei să optimizezi bootul în mod metodic, iată pașii recomandați:

  1. Rulează systemd-analyze și notează timpii totali pe etape
  2. Rulează systemd-analyze blame și identifică serviciile cu timp mare
  3. Rulează systemd-analyze critical-chain și identifică ce stă efectiv în calea pornirii
  4. Generează opțional boot.svg pentru o imagine vizuală completă
  5. Cercetează fiecare serviciu suspect înainte de a-l dezactiva
  6. Dezactivează pe rând, nu toate deodată, și repornește între modificări ca să poți urmări efectul fiecăreia

Referințe