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
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 ...
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 |
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
Flux de lucru recomandat
Dacă vrei să optimizezi bootul în mod metodic, iată pașii recomandați:
- Rulează
systemd-analyzeși notează timpii totali pe etape - Rulează
systemd-analyze blameși identifică serviciile cu timp mare - Rulează
systemd-analyze critical-chainși identifică ce stă efectiv în calea pornirii - Generează opțional
boot.svgpentru o imagine vizuală completă - Cercetează fiecare serviciu suspect înainte de a-l dezactiva
- Dezactivează pe rând, nu toate deodată, și repornește între modificări ca să poți urmări efectul fiecăreia