Puncte:20

De ce actualizarea kernel-ului de astăzi are nevoie de o jumătate de gigabyte de spațiu pe disc?

drapel ru

Am primit o notificare de actualizări la Ubuntu 20.04. Verific întotdeauna lista de actualizări pentru a decide cât de serioasă trebuie să fac o copie de rezervă înainte de actualizare. Actualizarea de astăzi a nucleului (5.13.0.28.31~20.04.15) are nevoie de o jumătate de gigabyte de spațiu suplimentar pe disc:

$ sudo apt upgrade 
...
Următoarele pachete NOI vor fi instalate:
  linux-headers-5.13.0-28-generic linux-hwe-5.13-headers-5.13.0-28
  linux-image-5.13.0-28-generic linux-module-5.13.0-28-generic
  linux-module-extra-5.13.0-28-generic
Următoarele pachete vor fi actualizate:
  linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04
  linux-image-generic-hwe-20.04 linux-libc-dev
4 pentru a face upgrade, 5 pentru a instala nou, 0 pentru a renova și 0 pentru a nu face upgrade
Trebuie să obțineți 95,0 MB de arhive.
Dupa aceasta operatie, Se vor folosi 508 MB de spațiu suplimentar pe disc.

Știu că Ubuntu permite mai multe nuclee să coexiste, așa că acest nucleu trebuie să folosească spațiu proaspăt pe disc, în loc să înlocuiască software-ul existent, dar încă pare mare. Nu am ținut note, dar am crezut că o actualizare a nucleului este de obicei de câteva sute de MB.Nu am observat niciodată dimensiunea nucleelor ​​înainte sau există ceva neobișnuit în actualizarea de astăzi?

Puncte:43
drapel pw
Oli

Aici se întâmplă câteva lucruri diferite, în funcție de curiozitatea ta...

Actualizările kernel-urilor sunt livrate ca pachete autonome, nu simple upgrade

Majoritatea sistemului dumneavoastră este împachetat în așa fel încât atunci când este extrasă o actualizare, aceasta înlocuiește ultima versiune. Kernel-urile sunt ambalate cu versiunea lor în numele pachetului. Acest lucru vă oferă posibilitatea de a reveni la o versiune anterioară dacă ceva nu merge bine.

Nu trebuie să păstrați sâmburii vechi în preajmă. De îndată ce știți că cel nou funcționează, le puteți elimina pe cele vechi. sudo apt autoremove va face acest lucru pentru dvs., dar asigurați-vă că noua versiune funcționează mai întâi.

Sâmburi sunt mare (și devin mai mari)

Deci am stabilit de ce instalarea unui nucleu actualizat ocupă spațiu suplimentar, dar de ce atâta spaţiu?

Ubuntu oferă un nucleu construit pentru o selecție largă de hardware. Canonical vrea să funcționeze doar⢠atunci când conectați lucrurile. Fiecare versiune minoră are mai multe drivere adăugate la ea. Rata șoferilor vechi care sunt eliminate este de obicei mult mai lent.

Deci, în timp, ne așteptăm ca miezul să înflorească în dimensiune. Bionic 4.15.0-101.102 are aproximativ 60% dimensiunea lui Focal HWE 5.13.0. Acest lucru este exprimat în mare parte prin faptul că au mai puține module, în special în module-extra.

eu îmi place să consider asta ca un progres. Spațiul pe disc și lățimea de bandă sunt ieftine pentru majoritatea dintre noi, așa că este logic să acordați prioritate suportului pentru drivere. Nu cred că ceea ce vedem aici este anormal.

Dar de ce sunt pachetele lor atât de mici? Cum o descărcare de 94 MB ocupă 508 MB de spațiu pe disc?

Se comprimă [foarte] bine. Puteți vedea acest lucru descărcând pachetele și folosind puțin scripting pentru a expune dimensiunea lor dezambalată.

  • Obțineți pachetele: apt download linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04 linux-headers-5.13.0-28-generic linux-hwe-5.13-headers-5.13.0- 28 linux-image-5.13.0-28-generic linux-module-5.13.0-28-generic linux-module-extra-5.13.0-28-generic
  • Comparați dimensiunea lor „fizică” cu dimensiunea conținutului lor: pentru f în *.deb; do stat --printf="%5n\t%s\t" "$f"; dpkg -c $f; Terminat

E destul de crud în acel moment. Îl puteți introduce în Calc pentru a afișa totalurile și procentele:

introduceți descrierea imaginii aici

Puțin mai mult de 508 MB de spațiu pe disc combinate (și înainte de DKMS), dar poate că ați avut deja unele dintre pachete descărcate. În orice caz, puteți vedea că unele pachete sunt masiv mai mari.

Vreau sâmburi mai mici!

Și le poți avea. Doar privind în jos modulele-conținutul pachetului suplimentar, pot vedea sute de megaocteți de lucruri de care nu am nevoie. Din păcate, sunt unele de care am nevoie totuși.

Tu poate sa (destul de ușor) construiți-vă propriile Kernel-uri. Există scripturi de compilare (folosesc în prezent linux-tkg). Are 450 MB pe disc în acest moment, dar l-aș putea rula printr-un ajutor ca face localmodconfig pentru a reduce modulele construite doar la lucrurile încărcate în prezent. Acest lucru ar elimina aproximativ 95% din module.

Problema cu această abordare este că necesită timp CPU și timpul meu pentru ao actualiza atunci când există actualizări. Esti pe cont propriu. Majoritatea oamenilor sunt mai bine cu nucleul întreținut.

drapel in
Cealaltă problemă cu abordarea de a construi propriul dvs. este că fie trebuie să activați driverele de care aveți nevoie (de exemplu, îmi construiesc propriile nuclee, dar încă activez majoritatea driverelor hardware USB, pentru că mă pot aștepta în mod rezonabil să am nevoie de oricare dintre ele în scurt timp), sau trebuie să reconstruiți de fiecare dată când ceva despre hardware-ul dvs. se schimbă (și `localmodconfig`, ultima dată pe care am verificat-o, are nevoie de un nucleu complet pentru a funcționa).
drapel pw
Oli
@AustinHemmelgarn Sunt de acord, cu siguranță trebuie să planificați în avans cu `localmodconfig`. Adăugarea lucrurilor înapoi poate fi laborioasă. Rularea unui instrument precum [modprobed-db](https://github.com/graysky2/modprobed-db) în mod regulat înainte de timp poate fi utilă pentru a urmări modulele pe care le utilizați efectiv într-o perioadă de timp. Dar da, chiar și descărcarea adaptoarelor de rețea pe care nu le utilizați se salvează 50 MB. Clătiți și repetați peste controlerele de stocare, adaptoarele grafice și ajungeți foarte repede la 150 MB fără să vă transpirați.
drapel in
@Oli De acord, chiar și doar a scăpa de lucrurile de care știi de care nu ai nevoie poate fi într-adevăr o economie uriașă, asta face parte din motivul pentru care îmi construiesc propriile nuclee (cealaltă parte fiind că vreau anumite lucruri pe care majoritatea distribuțiilor nu le activează implicit).
drapel in
@Oli ar fi bine dacă o distribuție ar include modprobed-db și actualizările kernelului de la sursă, astfel încât modulele inutile să fie aruncate în continuare în culise, fără a fi nevoie de interacțiune manuală a utilizatorului.
drapel et
Puteți construi un fișier `dpkg.cfg.d` cu intrări `path-exclude`/`path-include` pentru a evita extragerea modulelor de care nu aveți nevoie – făcut cu atenție, acest lucru reduce spațiul pe disc necesar pentru modulele nucleului evitând în același timp nevoia de a le construi de la sursă.
Puncte:22
drapel my

De ce actualizarea kernel-ului de astăzi are nevoie de o jumătate de gigabyte de spațiu pe disc?

Nu este exact cum arată.Vă arată că ar fi folosiți 508 MB de disc, dar vă spune că această stocare este permanentă? Ce se întâmplă dacă îți spun că aproape 450MB dintre ei ar fi eliberați după ce rulează o comandă simplă?

În general, atunci când are loc o actualizare majoră, trebuie să fie plasate noi fișiere și directoare. Cu toate acestea, nu le va elimina automat pe cele mai vechi. Rezultă o utilizare extinsă a discului!

După actualizarea nucleului, puteți elimina acele module vechi de kernel neacceptate rulând:

sudo apt autoremove

Acesta va elimina toate nucleele anterioare și modulele acestora, ceea ce va elibera aproape 450 MB de spațiu pe disc.


Întrebări și răspunsuri

De ce actualizarea kernel-ului de astăzi are nevoie de o jumătate de gigabyte de spațiu pe disc?

Se datorează faptului că trebuie să plaseze fișiere noi. Nu va elimina fișierele mai vechi, rezultând o utilizare extinsă a discului.

Nu am ținut notițe, dar am crezut că o actualizare a nucleului este de obicei de câteva sute de MB

Da, sunt, de fapt, acest upgrade este de doar 60-80MB.

este ceva neobișnuit în actualizarea de astăzi?

Da, aceasta este o actualizare majoră a nucleului. S-ar putea să nu știți că Ubuntu 20.04 va fi actualizat în curând la a patra etapă. Deci vei primi multe upgrade-uri ca acesta. Pregătește-te pentru Ubuntu 20.04.04!!


De ce sunt sâmburii atât de mari?

Nucleul Linux gestionează și controlează resursele hardware cum ar fi I/O (rețea, stocare, grafică și diverse dispozitive de interfață cu utilizatorul, etc.), memoria și CPU pentru dispozitivul sau computerul dvs. De fiecare dată când apare o nouă actualizare, obțineți drivere și resurse mai noi pentru resurse hardware mai bune.

Dacă utilizați o placă fără fir cu drivere personalizate, atunci trebuie să recompilați driverele după ce kernel-ul mai nou începe. Totuși, ce rămâne cu celelalte module? Modulele de care nu aveți nevoie sunt încă în sistemul dumneavoastră. De ce au iwlwifi când folosesc rtw99? Nucleul Linux vine cu mii de drivere diferite pentru toate tipurile de dispozitive. În mod implicit, apt le va instala pe TOATE. Acesta este unul dintre motivele principale pentru care ar trebui să compilați singur kernel-ul Linux.Pentru a compila singur nucleul Linux fără lucruri inutile, consultați acest fir, comentariul #2.


Diferența dintre dimensiunea descărcare și dimensiunea instalată.

De ce arată:

Trebuie să obțineți 95,0 MB de arhive.

Chiar dacă se spune „va fi folosit 508 MB de spațiu suplimentar pe disc”?

Este din cauza compresiei.

The .deb cunoscut și sub denumirea de format „arhivă”, folosește algoritmi de compresie fără pierderi pentru a încadra un număr mare de fișiere într-un singur .deb fără a-i mări dimensiunea. Puteți rula următoarea comandă pentru a vedea diferența dintre dimensiunea instalată și dimensiunea de descărcare.

apt show linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04 linux-headers-5.13.0-28-generic linux-hwe-5.13-headers-5.13.0- 28 linux-image-5.13.0-28-generic linux-module-5.13.0-28-generic linux-module-extra-5.13.0-28-generic | egrep „Dimensiune|Pachet” | grep -v APT

Iată un tabel care arată diferența:

Pachet Dimensiune instalată Descărcare-Dimensiune
Pachetul: linux-generic-hwe-20.04 Dimensiune instalată: 19,5 kB Dimensiune descărcare: 1.928 B
Pachetul: linux-headers-generic-hwe-20.04 Dimensiune instalată: 19,5 kB Dimensiune descărcare: 2.516 B
Pachetul: linux-image-generic-hwe-20.04 Dimensiune instalată: 19,5 kB Dimensiune descărcare: 2.628 B
Pachetul: linux-headers-5.13.0-28-generic Dimensiune instalată: 24,5 MB Dimensiune de descărcare: 2.569 kB
Pachetul: linux-hwe-5.13-headers-5.13.0-28 Dimensiune instalată: 75,9 MB Dimensiune de descărcare: 11,8 MB
Pachetul: linux-image-5.13.0-28-generic Dimensiune instalată: 10,2 MB Dimensiune de descărcare: 10.0 MB
Pachet: linux-module-5.13.0-28-generic Dimensiune instalată: 99,3 MB Dimensiune de descărcare: 18,3 MB
Pachet: linux-module-extra-5.13.0-28-generic Dimensiune instalată: 298 MB Dimensiune de descărcare: 51,1 MB
raj avatar
drapel cn
raj
Experiența mea este că actualizatorul de software din Ubuntu solicită, de obicei, să elimine nucleele vechi la scurt timp după ce este instalată o nouă actualizare a nucleului. De obicei, nu trebuie să scot nimic manual.
raj avatar
drapel cn
raj
Este greu să folosești un computer desktop fără GUI (cum ai naviga pe Web?) :) și pentru că actualizatorul de software se ocupă oricum de actualizări, nu văd nimic anormal în faptul că îmi cere atât să instalez actualizări noi cât și pentru a elimina miezurile vechi nefolosite.Nu se întâmplă după „mult timp”, ci de obicei în câteva ore după instalarea unei noi versiuni de kernel, uneori imediat după instalarea noului nucleu. Văd asta ca pe un mod adecvat de operare. BTW. Cu siguranță prefer Synaptic să ruleze `apt` manual :)
Puncte:0
drapel in

Toate cele de mai sus sunt absolut adevărate.

Cu toate acestea, o parte a răspunsului (și de ce funcționează răspunsurile de mai sus), se bazează pe modul în care Linux gestionează un fișier „șters” - nu într-adevăr să fie șters până când se termină tot ce îl folosește.

Exemplu:
Să presupunem că există o aplicație, „Super Duper Text Editor” și, de asemenea, să presupunem că aveți mai multe ferestre deschise cu textul pe care îl editați.

În plus, presupunem că se instalează o actualizare a Super Duper Text Editor. Sesiunile dvs. de editare existente nu sunt blocate imediat, ci dispar după ce le închideți.

Ca aceasta:

  1. Aveți mai multe instanțe ale editorului de text deschise.
  2. Îl actualizezi.
    • Actualizatorul „deconectează” intrarea din director la fișierul vechi (sau o recreează) și adaugă o legătură către noul fișier, cu intrarea inițială a directorului marcată ca „ștersă”
    • Linkurile existente către sesiunile dvs. rămân până când sesiunile existente sunt închise.
  3. Toate fișierele noi sunt adăugate, dar fișierele existente care sunt încă în uz nu sunt distruse deoarece sunt încă în uz.
  4. În cele din urmă, pe măsură ce salvați munca și închideți ferestrele, numărul de link-uri active către fișierele vechi scade la zero. (rețineți că linkul directorului a fost eliminat când pachetul a fost actualizat.)

Când numărul de legături către un fișier scade la zero, se presupune că fișierul este „șters” și că spațiul este recuperat pentru reutilizare de către sistemul de fișiere și marcat ca disponibil în superbloc și/sau bitmap de volum.

În cele din urmă, (sau mai ales după o repornire), toate fișierele vechi au zero link-uri și sunt corect pentru a fi suprascrise.

Sunt sigur că sunt detalii pe care le-am omis, dar acesta este modul general în care funcționează.

drapel pw
Oli
Nu văd cum se leagă asta cu actualizările Kernelului. S-ar putea aplica și altor lucruri, dar Kernel-urile sunt ambalate cu șirul de versiune în numele pachetului; există doar un metapachet care indică o nouă versiune. Când faceți o actualizare a nucleului, nu este vorba doar că este rezident în memorie, este o copie complet nouă a nucleului care este instalată alături de cele vechi.
Jim JR Harris avatar
drapel in
„este o copie complet nouă a nucleului instalată alături de cele vechi” . . . și, ca o consecință a modului în care Linux gestionează ștergerea fișierelor, spațiul pe disc va fi dublat până la următoarea repornire. Cum nu are legatura asta??
muru avatar
drapel us
@JimJRHarris „cantitatea de spațiu pe disc va fi dublată până la următoarea repornire”... totuși, asta nu se aplică modului în care sunt actualizate nucleele, deoarece fiecare imagine a nucleului este un fișier cu un nume diferit. Deci, până când pachetul kernel-ului mai vechi este eliminat, acel fișier va rămâne. Dacă reporniți sau nu, nu are legătură.
Jim JR Harris avatar
drapel in
Buna observatie. Multumesc pentru clarificare.
marcelm avatar
drapel cn
_"ca o consecință a modului în care Linux gestionează ștergerea fișierelor, spațiul pe disc va fi dublat până la următoarea repornire."_ - Nu, spațiul pe disc este eliberat atunci când vechiul nucleu este îndepărtat, nu este necesară repornirea. Nu are nimic de-a face cu semantica de deconectare a Linux, deoarece nici imaginea nucleului care rulează, nici modulele nucleului încărcate nu țin fișierele ocupate așa. Puteți verifica acest lucru pentru dvs. folosind `lsof`, `df` și `rm`; imaginile/modulele kernel șterse eliberează imediat spațiu pe disc. Din păcate, răspunsul tău nu se aplică acestui scenariu.
raj avatar
drapel cn
raj
@marcelm A funcționat întotdeauna pentru mine, astfel încât, la scurt timp după instalarea unei noi actualizări de kernel, actualizatorul de software cere să elimine vechiul nucleu care nu mai este necesar. Așa că aproape niciodată nu trebuie să scot nucleele vechi manual.
marcelm avatar
drapel cn
@raj Nu am susținut niciodată că este necesară eliminarea manuală. Doar subliniam că „fișierele șterse care sunt încă ocupate nu eliberează spațiu pe disc” nu se aplică aici.
Matthew avatar
drapel ru
Vă mulțumesc pentru acest răspuns. Este informativ, dar nu pare să răspundă exact la această întrebare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.