neděle 24. května 2015

Trable s odstaňováním starých kernelů z Ubuntu

Problém, který se řeší stále dokola - aktualizace přinášejí další a další verze kernelu a ty se v systému hromadí a zabírají nemálo místa na disku, což je o to větší problém, pokud máte separátní malý oddíl na adresář /boot. Automatického odstraňování se vývojáři stále trochu bojí, protože si nikdy nemohou být stoprocentně jisti, které kernely uživatel opravdu nevyužívá. Výjimka potvrzuje plavidlo. V Ubuntu již chvíli máme alespoň možnost zbavovat se zmíněného nadbytku pomocí klasického apt-get autoremove, ta je ale značně sabotována grafickou nadstavbou. Tak se podíváme o čem to je.

Kernel je nejdůležitější částí systému a je třeba mít vždy nějaký stoprocentně funkční. Proto se jeho aktualizace nedělají přepisem starší verze novou, ale nainstaluje se další vedle, takže máte v případě potíží možnost vrátit se k předchozímu funkčnímu, který najdete v bootovací nabídce Grubu (případně jiného zavaděče). Jenže kernely se hromadí, každé cca tři týdny je nová verze, a to může znamenat dohromady gigabajty na systémovém disku.

V Ubuntu je prozatím problém řešen tak, že postinstalační skript každé nové verze kernelu spustí skript
/etc/kernel/postinst.d/apt-auto-removal
ten si zjistí, který kernel vyvolal jeho spuštění, který aktuálně běží, nejnovější a předchozí verzi a podle toho vybere nejméně dva kernely, které zapíše do seznamu nedotknutelných v
/etc/apt/apt.conf.d/01autoremove-kernels

Typicky jsou v seznamu poslední dvě verze. Příkaz apt-get autoremove pak při hledání balíků, které byly instalovány automaticky jako závislost balíku jiného a současně je již v závislostech žádný instalovaný balík nemá, tento seznam použije a zmíněné verze k odstranění nenabídne, i kdyby vyhovovaly.

Tohle je všechno pěkné, má to ovšem jednu zásadní vadu na kráse. Když děláte aktualizace přes Software Updater, tedy klikacího správce aktualizací, který je v Ubuntu, instalované balíky s kernelem jsou chybně označeny jako manuálně instalované a apt je proto k automatické odinstalaci nenabídne. Nastavením na manuální instalaci pomocí příkazu apt-mark, si naopak můžete konkrétní kernel pojistit proti odstranění.

Tak jako tak, správce aktualizací stále nenabízí klikátko, které by umožnilo čistku provést i běžnému uživateli, který se bojí terminálu, teprve se diskutuje o tom, zda a jak. Tomu pak stejně nezbývá, než nainstalovat nějaký z alternativních čističů, jako je Ubuntu Tweak, které na nějaké flagy balíků nehledí.

Pokud tedy máte nějaké ty staré špatně značené kernely a autoremove je nechce odinstalovat, můžete to napravit následovně:

apt-mark showmanual | egrep '^linux-(image|headers)' | xargs sudo apt-mark auto
sudo apt-get autoremove

Sice v drtivé většině případů dělám aktualizaci systému přes terminál, ale co kdyby.. Nabízí se udělat si na to nějaký alias, který nejprve prožene přes balíky kernelů apt-mark a pak teprve spustí autoremove. Myslím, že ar ještě mezi aliasy nemám:

alias ar="apt-mark showmanual | egrep '^linux-(image|headers)' | xargs sudo apt-mark auto ;  sudo apt-get autoremove"

3 komentáře:

  1. Já na odtraňování starších kernelů používám Ubuntu Tweak a zatím s tím nebyl žádný problém :-)

    OdpovědětVymazat
  2. Já se s tím vždycky jednou za 3-6 měsíců na**ru a pustím synaptic, vyhledám nainstalované kernely dle verzí + kouknu na místní balíky a udělám pořádek. S tím jak občas zruší nějaké PPA je třeba jednou za čas. Zmání mají vyexportované moje zdroje, takže udělám pořádek u sebe, hodím si případné úpravy místních balíků do scriptu a pak jim smažu a naixportuju zase moje balíky. Zatím mi to funguje u všech asi 10 PC, který takhle u známých mám a je s tím minimální práce.

    OdpovědětVymazat
    Odpovědi
    1. No taky jsem to dělal ručně, než mě někdo na fóru postrčil k tomu, abych se na tu problematiku podíval podrobněji. Autoremove je rozhodně nejjednodušší možnost, ale nakonec jsem stejně zjistil, že ten seznam kernelů, které se mají podržet v systému, je mnohdy nerespektován a autoremove smaže všechny, krom posledního. Na jednom systému seznam funguje, na druhém ne a jediný rozdíl je v architektuře 64bit/32bit, což nedává smysl. Osobně mi to je fuk, stejně vždy používám poslední verzi kernelu a kdybych zjistil problém, tak si prostě tu funkční podržím přepisem flagu na manual. Ale zajímalo by mě, v čem je problém, jen se mi tím nechce ztrácet čas :)

      Vymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.