Vraag Hoe verwijder ik oude kernelversies om het opstartmenu op te ruimen?


Telkens wanneer ik een nieuwe Linux-kernel installeer, wordt deze in de grub_config achtergelaten, waardoor het opstartmenu steeds langer wordt.

Ik weet dat ik handmatig de geïnstalleerde pakketten kan doorzoeken en verwijderen.

Biedt Ubuntu een gemakkelijkere manier om ze op te schonen of te voorkomen dat ze in de opstartlijst worden weergegeven?


658


oorsprong


Verwijder naast de oude kernels deze regel ook /etc/default/grub als je de 'herstel'-items in het menu wilt verwijderen: # GRUB_DISABLE_LINUX_RECOVERY = "true" - poolie
In recente releases verbergt Ubuntu kernels in het submenu van Grub, dus het is niet zo opdringerig. Het is echter een goed idee om extra kernels te verwijderen om ruimte te besparen, vooral als je een aparte kleine / opstartpartitie hebt. - jarno
Er is een ubuntu-commando genaamd purge-old-kernels om het werk te doen. Zie mijn antwoord voor meer informatie. - jarno
sudo apt-get autoremove zou het moeten doen op Ubuntu 14.04+ - hobs
De opeenhoping van oude kernels is een bug, met een lopend probleem: bugs.launchpad.net/bugs/1357093 . Wanneer de fix wordt vrijgegeven, zullen oudere kernels standaard automatisch worden verwijderd. - user535733


antwoorden:


16.04 en nieuwere versies van Ubuntu

sudo apt autoremove

Met deze opdracht worden pakketten verwijderd die automatisch zijn geïnstalleerd om een ​​afhankelijkheid op te lossen, maar waarop nu niet meer wordt vertrouwd. Dit omvat oude versies van linux-headers-* en linux-image-*. (Het is ook slim over dit proces, waarbij één reserve-versie van de kernel overblijft als een terugval!)

11.10 en nieuwere versies van Ubuntu

GRUB2 en het weergeven van alle kernels

De nieuwste versies van grub2 geïnstalleerd in Ubuntu automatisch de nieuwste kernel weergeven en verbergt de oudere kernels die u mogelijk hebt geïnstalleerd.

GNU GRUB

Als u uw niet ziet rooien - Vergeet niet om op te drukken Verschuiving tijdens het booten.

Zoals je ziet, wordt alleen de nieuwste kernel weergegeven.

Als u de getoonde optie selecteert (druk op invoeren) dan worden alle oude kernels zichtbaar en beschikbaar om van te booten.

GNU GRUB Previous versions 

Hoe oudere kernels permanent te verwijderen

Eerste boot met de nieuwste beschikbare kernel.

Er zijn een aantal manieren om oude kernels te verwijderen. Persoonlijk zou ik het niet aanraken Computer Janitor omdat dit wordt erkend om uw computer te breken met zijn suggesties.

synaptische

Een alternatief is Synaptic (sudo apt install synaptic)

zoeken linux-image, klik met de rechtermuisknop op een kernel en kies voor volledige verwijdering en klik ten slotte op Van toepassing zijn om de kernel te verwijderen.

Synaptic Package Manager

Herhaal de zoekopdracht maar deze keer voor linux-header - u kunt de bijbehorende headers verwijderen voor de eerder gekozen kernelafbeelding.

Synaptic maar zal niet proberen te verifiëren wat je probeert te verwijderen ... je zou per ongeluk je nieuwste kernel kunnen verwijderen - of zelfs al je kernels kunnen verwijderen via deze tool, waardoor je een niet-opstartbare hebt Ubuntu!.

Vergeet niet om te controleren welke kernel je gebruikt type:

uname -r

Het resultaat zou vergelijkbaar zijn met:

Terminal <uname -r>

Onthoud het resultaat en het nummer - zorg dat u de bijbehorende afbeelding of koptekst niet verwijdert.

Aanbeveling

Mijn aanbeveling is om ten minste twee of bij voorkeur drie kernels te bewaren, inclusief de nieuwste. De reden voor de aanbeveling is dat je ten minste één / twee andere kernels hebt om mee op te starten, als om wat voor reden dan ook de nieuwste kernel waarmee je niet kunt opstarten of een regressiefunctie zoals gebroken draadloos introduceert.


568



Het verwijderen van oude "linux-image *" -pakketten met behulp van synaptic, werkte ook goed met 10.04. (Ik noem het omdat de titel suggereert dat het misschien alleen voor 11.10 en hoger is) - mivk
de -yschakel aan het einde van de apt-get regel is noodzakelijk, anders vraagt ​​apt-get om bevestiging en aangezien de invoer een pijp is, wordt deze afgebroken. Dus het zou moeten eindigen in: | xargs sudo apt-get purge -y - Josh
Verwijder ongeveer 20 oude versies linux-image en linux-headers bevrijdde 4.5 GB aan ruimte op mijn machine. - Andrew Mao
Deze methode werkt goed, maar deletie van elke kernel regenereert grub.cfg excessief, wat tijd kost. Is er een manier om dit uit te schakelen voor batchverwijdering, en dan een keer te regenereren? - spacediver
Ik heb de vraag van @spacediver onderbroken - dit is een gek-traag proces als je 38 onnodige kernels hebt, omdat als elke de-installatie ongedaan wordt gemaakt, deze door alle resterende kernels gaat terwijl een nieuwe grub.cfg wordt gegenereerd. Dat is wat we een N ^ 2-bewerking noemen - het verwerkt een kernel ongeveer (38 ^ 2/2) = 722 keer en is erg langzaam. Ubuntu kan toch iets beters bedenken .... - nealmcb


Start eerst je systeem opnieuw op om er zeker van te zijn dat het de nieuwste kernel gebruikt. Open dan terminal en controleer je huidige kernel:

uname -r 

VERWIJDER DEZE KERNEL NIET!

Typ vervolgens de onderstaande opdracht om alle geïnstalleerde kernels op uw systeem te bekijken / weergeven.

dpkg --list | grep linux-image 

Vind alle kernels die lager zijn dan je huidige kernel. Wanneer u weet welke kernel u wilt verwijderen, gaat u hieronder verder om de kernel te verwijderen. Voer de onderstaande opdrachten uit om de door u geselecteerde kernel te verwijderen.

sudo apt-get purge linux-image-x.x.x-x-generic 

Voer tot slot de onderstaande opdrachten uit om grub2 bij te werken

sudo update-grub2 

Start je systeem opnieuw op.


365



Toen ik dit in 10.04 en 12.04 deed, merkte ik dat update-grub automatisch werd uitgevoerd tijdens het zuiveringsproces. - aidan
bash steun uitbreiding kan worden gebruikt, b.v. sudo apt-get purge linux-image-3.2.0-3{0..5}-generic (verwijdert 30,31, ..., 35) - ajo
Het is niet nodig om het systeem daarna opnieuw op te starten. In feite zou u het systeem opnieuw moeten opstarten voor het uitvoeren van deze stappen, om ervoor te zorgen dat u de nieuwste kernelversie gebruikt die u waarschijnlijk zojuist hebt gedownload en geïnstalleerd (u hebt eerder een apt-get update && apt-get-upgrade gedaan, toch?) - Ricket
U wilt misschien ook het verwijderen van de linux-signed-image pakketten die kunnen worden geïnstalleerd in UEFI-systemen: sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-generic die 12, 14 en 24 zou verwijderen - devius
@jarno Ik weet niet of ik een ondertekende kernel gebruik of niet, maar uname -r heeft geen signed string op mijn systeem. Het lijkt erop dat er een ondertekend beeld is geïnstalleerd en de uitvoer daarvan ls opdracht is: /boot/vmlinuz-3.19.0-16-generic.efi.signed. - devius


Mijn one-liner om oude kernels te verwijderen (dit maakt ook schijfruimte vrij)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

Uitleg (onthoud, | gebruikt de uitvoer van de vorige opdracht als de invoer voor de volgende)

  • dpkg --list toont alle geïnstalleerde pakketten
  • grep linux-image zoekt naar de geïnstalleerde linux-afbeeldingen
  • awk '{ print $2 }' voert gewoon de tweede kolom uit (wat de pakketnaam is)
  • sort -V zet de items op volgorde van versienummer
  • sed -n '/'`uname -r`'/q;p' print de regels voor de huidige kernel
  • xargs sudo apt-get -y purge zuivert de gevonden kernels

Afwikkelen van de sed aanroeping:

  • -n vertelt sed om stil te zijn
  • `uname -r` geeft de huidige geïnstalleerde kernel-uitgave weer - we nemen deze op in backticks, zodat de uitvoer deel uitmaakt van de opdracht (je zou dit ook kunnen zien als $(uname -r) 
  • /something/q zegt stop wanneer u 'iets' vergelijkt (in dit geval wordt iets uitgevoerd van uname -r) - de / omringen een reguliere expressie
  • p is afdrukken
  • de ; is de opdracht separtor, dus /something/q;p zegt stoppen wanneer je iets vergelijkt, anders afdrukken

allemaal samen, sed -n '/'`uname -r`'/q;p' is de regels afdrukken totdat deze overeenkomt met de huidige kernelnaam.

Als je paranoïde bent (zoals ik), kun je het laatste deel maken xargs echo sudo apt-get -y purge zodat het commando om de oude kernels te wissen wordt afgedrukt, dan kun je controleren of er niets onverwachts in zit voordat je het uitvoert.


Gewijzigde versie om kopteksten te verwijderen:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

Merk op sed aanroeping is gewijzigd. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extraheert alleen de versie (bijvoorbeeld "3.2.0-44"), zonder "generiek" of iets soortgelijks uname -r


All-in-one-versie om afbeeldingen en headers te verwijderen (combineert de twee bovenstaande versies):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

261



Merk op dat het een beetje gevaarlijk is om de huidige kernelversie aan te passen als reguliere expressie als dat: punten komen overeen met elk teken en 3.1.2-23 komt overeen met 3.1.2-2 (of is het andersom). Zie ook mijn antwoord. - jarno
Hier is een getunede alles-in-één-versie: sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done) Zie ook mijn antwoord. - jarno
@jarno dat mij in grote mate heeft geholpen ... Een pluim voor je voering - Clain Dsilva
Vanwege onvervulde afhankelijkheden moest ik dit gebruiken dkpg -Pin plaats daarvan. Hier is de volledige versie: dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo dpkg -P - Sebastian Sastre
NEE DOE DIT NIET! "Die oneliner ziet er een beetje gevaarlijk uit, maar zeker 220 upvoters kunnen niet verkeerd zijn!" Ik dacht bij mezelf en blindelings gekopieerd. Opnieuw opgestart, rechtstreeks naar GRUB. Die opdracht vernietigde al mijn kernels, inclusief degene die ik gebruikte. Misschien draaide ik een realtime kernel, ik kan het me zelfs niet herinneren. Momenteel kijk ik rond in mijn huis naar een USB-stick om Ubuntu Live-CD te installeren op :( - Andreas Jansson


Ubuntu 16.04+:

$ sudo apt autoremove
...
The following packages will be REMOVED:
  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 en lager:

Ik vind dit de gemakkelijkste en snelste manier. Het bevat de nieuwste kernel en nog twee andere:

sudo apt-get install bikeshed
sudo purge-old-kernels

Om het aantal extra kernels dat wordt bewaard te veranderen:

sudo purge-old-kernels --keep 3

55



Dat commando is een shellscript waarvan je de locatie kunt vinden which purge-old-kernels. - jarno
Fijn dat ze dit in 16.04 een stuk eenvoudiger hebben gemaakt! Ik hoop dat dit antwoord steeds hoger komt te liggen ... - Toby J
Op Ubuntu 16.04 die ik heb purge-old-kernels zonder fietstassen (willekeurig bruikbare tools die nog geen permanent thuis hebben) pakket of een bepaald exemplaar. Vermijd het gebruik apt-get -y optie, is als het sluiten van ogen en hopen dat alles goed komt. Ook hier het is hoe autoremove beslist hoeveel oude kernels moeten worden bewaard. - Pablo Bianchi
In 16.04 wordt purge-old-kernels geleverd door het byobu-pakket (hint: apt-file search purge-old-kernels). Overeengekomen apt-get -y, Ik zal het verwijderen. - bmaupin
@Dan omdat ik geen niet-LTS-versies gebruik. Ik wist niet precies wanneer het programma begon. Maar ik kan zeker zeggen dat sudo apt-get autoremove verwijdert geen kernels in 14.04. Voel je vrij om het antwoord met de specifieke versie bij te werken als je weet wat het is! - bmaupin


Gegevens uit GRUB verwijderen 2 Invoer moet worden verwijderd door bestanden in de map /etc/grub.d te bewerken of te verwijderen. Het bestand /boot/grub/grub.cfg is alleen-lezen en hoeft normaliter niet te worden bewerkt.

Te veel kernels? 

  • Als u niet zeker bent van de kernel die u momenteel gebruikt, in een terminaltype uname -r.

  • Kernels verwijderd via APT (Synaptic, "apt-get remove", etc.) zullen grub.cfg automatisch bijwerken en er is geen actie door de gebruiker vereist.

  • Een geweldige tool voor het verwijderen van kernels (en menu-items) is Ubuntu-Tweak, een veilige en gebruiksvriendelijke GUI-app.

  • Installeer ubuntu tweak

  • Ubuntu-Tweak is beschikbaar onder Toepassingen> Systeemwerkset.

Verwijder oudere kernelvermeldingen

  • Selecteer "Package Cleaner" aan de linkerkant en "Clean Kernel" in het rechterpaneel.

  • Druk op de knop "Ontgrendelen" rechtsonder, voer uw wachtwoord in.

  • Selecteer in de weergegeven lijst de kernelafbeeldingen en kopteksten die u wilt verwijderen. De gebruikte kernel staat niet in de lijst.

  • Druk op de knop "Opschonen" rechtsonder om de geselecteerde kernelafbeeldingen en kopteksten te verwijderen.

Verwijder besturingssystemen uit het menu Grub

  • Andere besturingssystemen die van de computer zijn verwijderd, worden ook uit het menu verwijderd zodra "update-grub" als root wordt uitgevoerd.

  • Menu-items worden in scripts in het Grub2-menu geplaatst. Als u niet wilt dat andere besturingssystemen in het menu worden ingevoerd, schakelt u /etc/grub.d/30_osprober uit

  • Voer deze opdracht uit om te voorkomen dat het script wordt uitgevoerd
    sudo chmod -x /etc/grub.d/30_os-prober 

  • DISABLE_30_OS-PROBER = 'waar' in / etc / default / grub

Verwijder Memtest86 + uit het Grub-menu
sudo chmod -x /etc/grub.d/20_memtest86+

  • Voer de opdracht update-grub uit om toe te staan ​​dat de wijzigingen worden opgenomen in grub.cfg

Bron 

Notitie: Na kernel-updates wordt een nieuw item toegevoegd aan het GRUB-menu. Je kunt de oudere verwijderen als je dat wilt. Maar de meeste ervaren gebruikers zullen je adviseren om ten minste één reserve-entry te bewaren voor het geval er iets misgaat met een upgrade en je moet start een oudere kernelversie op voor het oplossen van problemen.

Alternatieve manier om Kernel-items te verwijderen (vóór 10.04) 

voor GRUB niet GRUB2

startupmanager  Install startupmanager

U vindt het onder Systeem >> Beheer >> alt text
alt text
Zie je in de tweede screenshot kun je selecteren hoeveel kernels je wilt laten zien? In het algemeen houd ik het gewoon op 1, maar als ik een kernel-upgrade krijg verander ik het altijd naar 2 voordat ik het herstart, zodat ik de oudere kernel kan selecteren als de nieuwe kernel problemen heeft met mijn hardware. Zodra ik weet dat de nieuwe kernel goed werkt, verander ik hem weer naar 1.


41



Eigenlijk startupmanager geeft mij een venster zoals dit op Ubuntu 10.04, in plaats daarvan gaf het gewoon een venster met twee tabbladen -> Opstartopties en Geavanceerd .. en geavanceerd heeft het de mogelijkheid om het aantal kernels te beperken. Dus update het antwoord voor Ubuntu 10.04. (En dat is waarom ik dit heb gestemd ..) - Sen
enig idee hoe "aantal te behouden kernen" kan worden gedefinieerd op een machine waarop geen GUI is geïnstalleerd (server)? - sylvainulg
startupmanager is verouderd. Zien grup-customizer - muhasturk


Zuiver commandoregel, dit zal alles behalve de huidige en de tweede meest huidige verwijderen (via de "-2" in de kopcommando hieronder):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
    awk '{print "linux-image-" $0 " linux-headers-" $0}' )
if [ -n "$OLD" ]; then
    apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge

38



one-liner from er: dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt-get -y purge - Dmitry Verkhoturov
@DmitryPaskal, je zou dit als een nieuw antwoord moeten toevoegen. - saji89
@DmitryPaskal Plak, zoals altijd, deze niet zonder ze te begrijpen. Op mijn machine komt deze one-liner ook overeen linux-libc-dev:amd64 welke niet mag worden verwijderd. - jamesadney
@Kees Cook, moet het awk-argument niet alleen worden omgeven door enkele aanhalingstekens? Als het de bedoeling is om "linux-image-" op de achtergrond te plaatsen, lijkt dit alleen te werken als je het gebruikt awk '{print "linux-image-" $0}'. - Mark
dit werkt niet voor mij, het bevat mijn aangepaste geïnstalleerde kernel (Ubuntu 14.04 met 3.17) - Alex R


Bijwerken: purge-old-kernels is verouderd vandaag de dag.

Ik heb een script gemaakt om kernels te zuiveren, zelfs in lastige omstandigheden. Het heet linux-purge en je kunt het vinden hier.

Als je gewoon de kernels (en de gerelateerde pakketten) wilt verwijderen die ouder zijn dan de momenteel gebruikte kernel, kun je het systeem gebruiken als het niet kapot is dit script.

Er is ook een Ubuntu-documentatiepagina die ik heb bijgedragen aan het verwijderen van oude kernels hier.


34



Lijkt op purge-old-kernels zit niet in de exacte versie (1.22) van fietsen. Is er een redelijke / veilige manier om een ​​meer recente fietshemd voor nauwkeurig te krijgen? Of zou het eenvoudiger / veiliger zijn om het script te installeren? Ik gebruik liever een repo, ondanks de lange lijst met afhankelijkheden. - drevicko
@drevicko Zie hier. - jarno
Nog een enigszins tangentiële vraag: is er een manier om te bepalen welke commando's beschikbaar komen als je Bikeshed installeert, in plaats van naar de bron te gaan? - drevicko
@drevicko, natuurlijk, dlocate -lsbin bikeshed - jarno
@ drevicko, zie ook een andere vraag - jarno