- GRUB2 vă permite să alegeți flexibil ce versiune de kernel să porniți în mod implicit, folosind indicii de meniu sau numele exact al intrării.
- Viața cu ramuri generice Linux, HWE și edge necesită controlul GRUB pentru a evita instabilitățile la instalarea kernelurilor mai noi.
- Editarea fișierului /etc/default/grub și regenerarea configurației cu update-grub reprezintă baza pentru repararea sau restaurarea kernelului implicit.
- Dezinstalarea kernelurilor conflictuale și menținerea a cel puțin unei ramuri stabile asigură faptul că sistemul rămâne bootabil și sigur.

Alegerea versiunii de kernel care pornește implicit în Linux Nu este doar o ciudățenie a administratorilor meticuloși: în multe cazuri, este diferența dintre a avea un sistem stabil și a suferi blocări, incompatibilități cu driverele grafice sau defecțiuni la hardware-ul recent. Acest lucru este valabil mai ales în Ubuntu și alte distribuții bazate pe Debian, unde coexistă ramuri generice, HWE și alte distribuții. versiuni experimentaleControlul GRUB2 este aproape obligatoriu.
Când instalați mai multe nuclee în paralel, GRUB2 încearcă întotdeauna să booteze cel mai modern kernel disponibil.De cele mai multe ori, acest lucru este în regulă, dar dacă ați fost forțat să reveniți la o versiune anterioară din cauza unei erori sau a unui driver defect, va trebui să îi spuneți lui GRUB ce intrare să utilizeze implicit. În acest articol, vom analiza în detaliu și fără a ocoli tufișul cum să faceți acest lucru în siguranță și permanent, ce nuanțe ar trebui să fiți conștienți de noile ramuri HWE și cum să le combinați cu alte trucuri utile legate de GRUB2.
Ce versiuni de kernel sunt suportate de Ubuntu și de ce ești interesat să le schimbi?
Ubuntu menține mai multe linii de kernel în paralelconceput pentru diferite scenarii. Înțelegerea a ceea ce ați instalat este primul pas înainte de a atinge orice în GRUB2, deoarece va determina ce intrări vedeți în meniul de boot și pe care doriți să le utilizați ca valori implicite.
Pe de o parte, există ramura clasică linux-genericAcesta este kernelul care vine de obicei preinstalat pe servere și sisteme unde stabilitatea este primordială. Acestea sunt kerneluri cu durată lungă de viață, testate temeinic, iar în versiunile LTS precum Ubuntu 22.04, acestea corespund de obicei unor serii precum 5.15.x. Filosofia lor este clară: mai puține surprize, mai puține defecțiuni după o actualizare.
Calculatoarele desktop Ubuntu oferă și Nuclee HWE (Hardware Enablement)Aceste ramuri sunt instalate, de exemplu, cu comenzi precum sudo apt instalează linux-generic-hwe-22.04 și vizează versiuni mai noi de kernel, cum ar fi seria 6.5.x în cazul Ubuntu 22.04 LTS, cu scopul de a oferi suport pentru hardware modern care nu exista atunci când a fost lansat LTS-ul original.
Dacă trebuie să mergeți cu un pas mai departe, există și varianta marginea hwe, conceput ca ramură „avangardă” o marginea sângerăriiSe instalează cu comenzi precum sudo apt instalează linux-generic-hwe-22.04-edge Adesea include kerneluri chiar mai noi (de exemplu, 6.7.x în Ubuntu 22.04). Oferă suport pentru hardware foarte recent, dar cu prețul creșterii probabilității de a întâlni erori, instabilități sau comportamente ciudate.
Deși sistemul rulează doar un singur kernel odată.Imagini ale unor nuclee antice sunt păstrate în /boot E ca o poliță de asigurare pe viață. Dacă o actualizare face computerul inutilizabil, posibilitatea de a porni dintr-o versiune mai veche poate salva situația. Problema este că, odată ce instalați un kernel mai nou, Ubuntu va tinde să pornească din acesta de fiecare dată, iar dezinstalarea acestuia fără a putea porni dintr-un alt kernel poate fi o adevărată bătaie de cap.
Selectați temporar un alt kernel din meniul GRUB2
Înainte de a începe editarea fișierelor, merită să ne amintim că GRUB2 vă permite deja să alegeți manual un alt kernel la pornire.Dacă aveți acces fizic la computer și o tastatură conectată, adesea nu aveți nevoie de nimic altceva pentru a încerca o versiune preliminară.
În Ubuntu, la pornirea mașinii, Puteți afișa meniul GRUB2 ținând apăsată tasta Shift. în timpul fazei inițiale de pornire. În sistemele BIOS tradiționale funcționează bine; în UEFI este de obicei suficient ca GRUB să afișeze meniul implicit, dar ideea este aceeași: să vedem lista de sisteme și opțiuni.
În acel meniu veți vedea de obicei o primă intrare de tipul Ubuntu, care este cel care pornește ultimul kernel instalat, urmat de un submeniu numit Opțiuni avansate pentru Ubuntu (Opțiuni avansate). În acest submeniu sunt listate toate versiunile de kernel disponibile, fiecare cu modul normal și modul de recuperare.
Dacă aveți probleme cu cel mai recent kernel, Cel mai obișnuit lucru de făcut este să accesați „Opțiuni avansate pentru Ubuntu”. și alegeți o versiune mai veche (de exemplu, Ubuntu, with Linux 5.15.0-94-generic) în loc de cea mai recentă versiune 6.x. După ce a pornit cu succes cu acea versiune, puteți dezinstala nucleele conflictuale și regenera configurația cu sudo update-grub.
Desigur, această soluție manuală are o problemă: Funcționează doar dacă poți interacționa cu GRUBPe servere fără tastatură, mașini la distanță sau medii în care nu vedeți consola de boot, aveți nevoie de o metodă persistentă care să îi spună lui GRUB ce intrare să utilizeze întotdeauna, fără a vă întreba la fiecare pornire.
Enumerați toate kernelurile pe care GRUB2 le cunoaște
Pentru a seta în mod fiabil un kernel implicit, Mai întâi trebuie să știi ce intrări de meniu are de fapt configurate GRUB2Nu este suficient să te uiți pur și simplu la pachetele instalate, deoarece pozițiile din meniu se pot schimba atunci când se adaugă sau se elimină nuclee.
GRUB2 își generează meniul principal în fișierul /boot/grub/grub.cfgDeși nu este recomandat să îl editați manual (se suprascrie când rulați update-grubDa, îl poți citi pentru a extrage informații. O comandă foarte practică pentru a lista intrările este:
grep -Ei 'submeniu|menuentry ' /boot/grub/grub.cfg | sed -re «s/(.? )'(+)'.*/\1 \2/»
Această comandă Va returna o listă cu toate intrările și submeniurile. care apar la pornire, ceva similar cu:
menuentry Ubuntu
submenu Advanced options for Ubuntu
menuentry Ubuntu, with Linux 6.7.0-15-generic
menuentry Ubuntu, with Linux 6.7.0-15-generic (recovery mode)
menuentry Ubuntu, with Linux 5.15.0-94-generic
menuentry Ubuntu, with Linux 5.15.0-94-generic (recovery mode)
menuentry Ubuntu, with Linux 5.15.0-92-generic
menuentry Ubuntu, with Linux 5.15.0-92-generic (recovery mode)
menuentry Memory test (memtest86+.elf)
menuentry Memory test (memtest86+.bin, serial console)
menuentry MS-DOS 5.x/6.x/Win3.1 (on /dev/sdf1)
Prima intrare este de obicei „Ubuntu” cu cel mai modern kernelȘi în submeniul „Opțiuni avansate”, apar toate versiunile instalate, ordonate de la cea mai nouă la cea mai veche. În exemplul nostru, dacă doriți să porniți întotdeauna cu Ubuntu, with Linux 5.15.0-94-genericAcea intrare ar fi în submeniul avansat, nu în meniul principal.
Setează un kernel specific după poziția din meniu (indexuri GRUB_DEFAULT)
O formă clasică de specifică ce kernel GRUB2 dorește să booteze implicit Implică indicarea indexului (poziției) intrării sau chiar o combinație „submeniu > intrare” atunci când versiunea dorită se află în „Opțiuni avansate pentru Ubuntu”.
Fișierul care controlează acest lucru este / Etc / default / grubÎnainte de a face orice modificare, este recomandat să creați o copie de rezervă rapidă în cazul în care trebuie să reveniți cu ușurință la o stare anterioară. Puteți face acest lucru cu:
sudo cp /etc/default/grub /etc/default/grub.bak
Apoi, editează-l cu editorul tău preferat, de exemplu cu Nano:
sudo nano / etc / implicit / grub
Înăuntru veți vedea o linie ca aceasta GRUB_DEFAULT=0, ceea ce indică faptul că va fi utilizată prima intrare din meniul principal (indexul zero). Dacă kernelul dorit se află în submeniul „Opțiuni avansate”Puteți spune lui GRUB să intre în acel submeniu și să selecteze o poziție specifică folosind notația submenú>entrada.
Urmând exemplul anterior, dacă „Opțiuni avansate pentru Ubuntu” ar fi opțiunea 1 din meniul principal și în acel submeniu „Ubuntu, cu Linux 5.15.0-94-generic” ar fi a treia opțiune (numărând de la zero și omițând modurile de recuperare), ați putea scrie ceva de genul:
GRUB_DEFAULT="1>3"
Logica e simplă, dar trebuie să fii atent la indici.Primul nivel se referă la poziția submeniului în meniul principal, iar al doilea la poziția intrării în cadrul submeniului respectiv. De asemenea, rețineți că intrările din „modul de recuperare” sunt de obicei eșalonate, astfel încât opțiunile normale utilizează numere impare, iar opțiunile de recuperare utilizează numere pare.
Odată ce te-ai schimbat GRUB_DEFAULT, salvați fișierul (în Nano, Ctrl + O și apoi Ctrl + X) și aplică modificările prin regenerarea configurației GRUB cu:
sudo update-grub
În spatele acestui lucru, reporniți sistemul cu sudo reboot și, odată ce pornește, verifică ce kernel a fost încărcat cu:
uname -a
Rezultatul ar trebui să vă arate, de exemplu, Linux ... 5.15.0-94-generic ... indicând faptul că utilizați acum versiunea pe care ați setat-o folosind indexurile din GRUB_DEFAULT.
Folosește numele intrării de meniu în loc de indexuri (modul „salvat”)
Metoda indexare are o problemă majoră: Pozițiile se schimbă atunci când instalați sau dezinstalați kerneluriAsta înseamnă că o actualizare a kernelului poate face ca 1>3 Nu mai viza kernelul corect, exact ceea ce vrei să eviți dacă vrei stabilitate pe termen lung.
GRUB2 oferă o alternativă mult mai robustă: Folosește numele exact al intrării din meniu ca element implicitÎn acest fel, atâta timp cât intrarea respectivă există în grub.cfgVa continua să fie selectat chiar dacă sunt adăugate versiuni noi deasupra sau dedesubtul său în listă.
Ideea generală este următoarea: în primul rând Găsiți numele complet al elementului de meniu dorit, așa cum apare în /boot/grub/grub.cfg (de exemplu Ubuntu, with Linux 6.8.0-60-generic), și apoi configurați GRUB să îl folosească ca intrare_salvată Mod implicit.
Pentru a găsi numele exact, puteți deschide fișierul de configurare cu un editor sau un vizualizator, de exemplu:
sudo nano /boot/grub/grub.cfg
Odată ajuns înăuntru, Folosește Ctrl+W în Nano pentru a căuta șirul corespunzător versiunii kernelului care vă interesează (de exemplu, „6.8.0-60-generic”). În stilul următor menuentry Vei vedea titlul complet, ceva de genul:
menuentry 'Ubuntu, with Linux 6.8.0-60-generic' ...
Acum, în loc să ne jucăm cu indicii, Puteți spune sistemului GRUB să folosească acel nume ca selecție salvată.Procedura tipică implică executarea unor comenzi precum următoarele:
sudo grub-set-default «Ubuntu, cu Linux 6.8.0-60-generic»
Această comandă definește intrarea specificată ca fiind cea considerată „implicită salvată”. Pentru a confirma că a fost aplicată corect, puteți verifica fișierul de mediu GRUB:
sudo grub-editenv listă
Ar trebui să vedeți o linie ca aceasta:
saved_entry=Ubuntu, with Linux 6.8.0-60-generic
De asemenea, este posibil ca, în funcție de configurația anterioară, Opțiunea GRUB_DEFAULT=saved este utilizată en /etc/default/grubcare îi spune lui GRUB să folosească întotdeauna ultima intrare_salvată stabilit. În orice caz, în timp ce saved_entry Dacă se potrivește cu kernelul dorit, veți continua să bootați automat acea versiune.
După aplicarea acestor modificări, regenerați fișierul de configurare cu sudo update-grubReporniți sistemul și confirmați din nou cu uname -a că ați început cu versiunea definită ca implicită.
Schimbarea kernelului în Ubuntu la o versiune specifică (instalare și downgrade)
În multe cazuri nu doriți doar să alegeți un kernel preinstalat, ci treceți de la versiunea curentă la una specificăAcest lucru se datorează fie faptului că aplicația dumneavoastră o necesită, fie faptului că un driver este compatibil doar cu o anumită serie, fie faptului că o actualizare recentă a defectat jumătate din sistem.
Primul pas ar trebui să fie întotdeauna știi ce kernel rulezi în prezentPentru a face acest lucru, puteți utiliza comenzi precum:
uname-r
Ei bine:
uname -a
care va returna ceva de genul:
Linux web 6.8.0-85-generic #85~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux
Odată ce știi unde te afli, următorul pas este vezi ce kerneluri sunt disponibile în repozitoriiÎn mediile Ubuntu/Debian, acest lucru se face de obicei prin interogarea pachetelor linux-image din repozitoriu, filtrând după versiunea care vă interesează. După ce ați localizat versiunea specifică, o puteți instala direct cu apt sau o puteți compila singur (consultați Cum se caută configurații în `make menuconfig`), cum preferați.
De exemplu, dacă vrei să cobori de la 6.8.0-85-generic a 6.8.0-60-genericAi instala pachetul corespunzător cu comanda corespunzătoare, confirmând cu „S” când potrivit Veți fi întrebat dacă doriți să continuați instalarea. După finalizarea procesului, Vei avea apoi versiunea de kernel disponibilă pentru bootareTotuși, GRUB va continua să aleagă cea mai nouă versiune până când modificați setările așa cum este explicat.
După instalarea kernelului dorit, reporniți computerul pentru a-l putea atribui ca implicit folosind una dintre metodele de mai sus (prin index sau prin nume), oricare dintre acestea este mai convenabilă și robustă pentru cazul dumneavoastră.
Setați un anumit kernel din submeniul „Opțiuni avansate” ca implicit
În distribuții precum Ubuntu 22 și 24, când se adaugă o versiune de kernel anterioară celei actuale, Versiunea respectivă nu este setată ca intrare principală.dar este adăugat în submeniu Opțiuni avansate pentru UbuntuPrin urmare, chiar dacă instalați o versiune 6.8.0-60 anterioară unei versiuni 6.8.0-85, la repornire veți porni în continuare cu versiunea 85.
pentru GRUB2 selectează automat versiunea dorită din submeniuTrebuie să știi poziția sa exactă. Din nou, comanda care listează menuentry y submenu Te ajută să vezi structura și ordinea numerică pe care le va folosi GRUB.
Imaginați-vă că după rularea comenzii listing descoperiți că kernelul țintă (de exemplu, „Ubuntu, cu Linux 6.8.0-60-generic”) apare în a patra poziție a submeniului „Opțiuni avansate” și că acest submeniu este primul după intrarea principală. În acest caz, combinația de index, începând de la zero, ar fi 1> 2 (submeniu în poziția 1, intrare în poziția 2 în cadrul submeniului respectiv).
În fișier /etc/default/grubApoi ai schimba linia:
GRUB_DEFAULT=0
prin:
GRUB_DEFAULT="1>2"
După salvarea modificărilor și rularea sudo update-grub, Data viitoare când porniți sistemul, kernelul respectiv va fi selectat automat. în cadrul „Opțiuni avansate”, fără a fi nevoie să accesați manual submeniul de fiecare dată.
După repornire, puteți verifica dacă totul a mers bine cu uname-r o uname -a, verificând dacă versiunea activă a kernelului este cea pe care ați setat-o prin GRUB_DEFAULT.
Dezinstalați kernelurile HWE și edge și reveniți la ramura stabilă
Odată ce ai pornește sistemul cu un kernel stabil din ramura linux-generic (de exemplu, o serie 5.15.x pe Ubuntu 22.04 LTS), următorul pas logic dacă nucleele HWE sau edge v-au dat probleme este curățarea acelor ramuri ale sistemului.
Pentru a dezinstala metapachetele HWE, puteți utiliza epurare apt cu un wildcard care acoperă întreaga ramură, ceva de genul:
sudo apt purge linux-generic-hwe-22.04*
După eliminarea acelor metapachete, probabil veți dori să De asemenea, ștergeți imaginile kernelurilor moderne de care nu mai aveți nevoie.Dacă, de exemplu, doriți să scăpați de toate kernelurile mai mari de 6.x în favoarea seriei 5.x, puteți utiliza o comandă de genul:
sudo apt purge imagine-linux-6*
Acest tip de curățare elimină pachetele de imagini de kernel al căror nume începe cu „linux-image-6”, așa că este recomandabil să verificați cu atenție ce urmează să dezinstalați înainte de a confirma. Nu uitați că Trebuie să mențineți cel puțin o ramură stabilă și funcțională, obișnuit linux-genericdeoarece fără aceasta sistemul ar putea rămâne fără kerneluri bootabile.
După orice curățare a kernelului, este esențial Actualizați configurația GRUB pentru a opri referirea la intrări care nu mai există.Altfel, este posibil să întâlniți opțiuni de meniu care indică nuclee șterse. Pentru a regenera fișierul de configurare, utilizați:
sudo update-grub
Dacă vrei să te asiguri că ramura generică rămâne instalată, poți forța instalarea acesteia cu:
sudo apt install linux-generic
În majoritatea cazurilor, vă va spune că este deja instalat, dar în acest fel verificați dacă metapachetul există și că veți continua să primiți actualizări de securitate și corecții pentru acea serie stabilă.
Ca pas final, dacă te-ai fi schimbat GRUB_DEFAULT către un index sau un nume specific pentru a depăși problemele cu HWE/edge, Îl puteți readuce la valoarea implicită (obișnuit 0) editând din nou /etc/default/grub:
sudo nano / etc / implicit / grub
Și lăsând linia astfel:
GRUB_DEFAULT="0"
Apoi salvați, rulați sudo update-grub și reporniți cu sudo reboot astfel încât sistemul să pornească normal cu cel mai recent kernel din ramură linux-generic pe care l-ați instalat.
În cele din urmă, controlul kernelului care pornește folosind GRUB2 devine un instrument fundamental pentru orice utilizator Ubuntu, Debian sau derivate care nu dorește să fie la mila ultimei actualizări. Prin combinarea instalării unor versiuni specifice, utilizarea „Opțiunilor avansate”, selecția după index sau după numele meniului și curățarea ramurilor problematicePoți adapta nucleul sistemului la nevoile tale reale: stabilitate extrem de solidă pe servere, compatibilitate maximă pe echipamente moderne sau o combinație calculată a ambelor în medii desktop unde nu vrei să riști utilizarea zilnică pe un kernel experimental.
Scriitor pasionat despre lumea octeților și a tehnologiei în general. Îmi place să îmi împărtășesc cunoștințele prin scriere și asta voi face în acest blog, să vă arăt toate cele mai interesante lucruri despre gadgeturi, software, hardware, tendințe tehnologice și multe altele. Scopul meu este să vă ajut să navigați în lumea digitală într-un mod simplu și distractiv.




