Önyükleme menüsünü temizlemek için eski çekirdek sürümlerini nasıl kaldırabilirim?

Ne zaman yeni bir Linux çekirdeği kursam, grub_config içinde kalıyor ve önyükleme menüsünü her seferinde daha uzun yapıyor.

Yüklü paketleri manuel olarak arayabileceğimi ve kaldırabileceğimi biliyorum.

Ubuntu bunları temizlemenin veya önyükleme listesinde gösterilmelerini engellemenin daha kolay bir yolunu sunuyor mu?

Ubuntu'nun 16.04 ve daha yeni sürümleri

sudo apt autoremove

Bu komut, bir bağımlılığı çözmek için otomatik olarak yüklenen ancak artık bağımlı olmayan paketleri kaldırır. Bu, eski sürümleri içerir linux-headers-* ve linux-image-*. (Bu işlem hakkında da akıllıdır, çekirdeğin yedek bir sürümünü bir geri dönüş olarak bırakır!)

11.10 ve Ubuntu'nun daha yeni sürümleri

GRUB2 ve tüm çekirdeklerin görüntülenmesi

En son sürümleri Grub2 yüklü Ubuntu en son çekirdeği otomatik olarak görüntüler ve yüklemiş olabileceğiniz eski çekirdekleri gizler.

GNU GRUB

Eğer görmüyorsanız yemek - o zaman basmayı unutma. Shift önyükleme sırasında.

Gördüğünüz gibi, yalnızca en son çekirdek görüntülenir.

Gösterilen seçeneği belirlerseniz (tuşuna basın Enter) daha sonra tüm eski çekirdekler görünür hale gelir ve önyüklenebilir hale gelir.

GNU GRUB Previous versions

Eski çekirdekler kalıcı olarak nasıl silinir

İlk önce mevcut en yeni çekirdekle önyükleme yapın.

Eski çekirdekleri silmenin birkaç yolu vardır. Şahsen ben dokunmazdım. Bilgisayar Kapıcısı bu, bilgisayarınızı önerileriyle kırdığı kabul edildiğinden.

sinaptik

Bir alternatif Sinaptik (sudo apt install synaptic)

aramak linux-görüntü, bir çekirdeğe sağ tıklayın ve kaldırmayı tamamla'yı seçin ve son olarak Uygulamak çekirdeği silmek için düğmeye basın.

Aramayı tekrarla ama bu sefer linux-başlık - daha önce seçilen çekirdek görüntüsünün ilişkili başlıklarını silebilirsiniz.

Sinaptik yine de, kaldırmaya çalıştığınız şeyi doğrulamaya çalışmaz... en yeni çekirdeğinizi yanlışlıkla silebilir veya hatta tüm çekirdeklerinizi bu araçla silebilir ve sizi önyüklenemez hale getirebilirsiniz Ubuntu!.

Hangi çekirdeği kullandığınızı kontrol etmeyi unutmayın:

uname -r

Sonuç şu şekilde olacaktır::

Terminal <uname -r>

Sonucu ve numarayı hatırlayın - ilgili resmi veya başlığı silmediğinizden emin olun.

Tavsiye

Benim tavsiyem, en sonuncusu da dahil olmak üzere en az iki veya tercihen üç çekirdek tutmaktır. Bu önerinin nedeni, önyükleme yapamayacağınız en son çekirdek veya bozuk kablosuz gibi gerilemiş bir özellik sunuyorsanız, önyükleme yapmak için en az bir / iki çekirdeğe sahip olmanızdır.

İlk olarak, en son çekirdeği kullandığından emin olmak için Sisteminizi yeniden başlatın. Ardından terminali açın ve mevcut çekirdeğinizi kontrol edin:

uname -r 

BU ÇEKİRDEĞİ KALDIRMAYIN!

Ardından, sisteminizde kurulu tüm çekirdekleri görüntülemek / listelemek için aşağıdaki komutu yazın.

dpkg --list 'linux-image-*'

Mevcut çekirdeğinizden daha düşük olan tüm çekirdekleri bulun. Hangi çekirdeğin kaldırılacağını bildiğinizde, kaldırmak için aşağıdan devam edin. Seçtiğiniz çekirdeği kaldırmak için aşağıdaki komutları çalıştırın.

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

Son olarak, grub2'yi güncellemek için aşağıdaki komutları çalıştırın

sudo update-grub2 

Sisteminizi yeniden başlatın.

Eski çekirdekleri çıkarmak için tek astarım (bu aynı zamanda disk alanını boşaltır)

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

Açıklama (hatırla, | önceki komutun çıktısını bir sonrakine girdi olarak kullanır)

  • dpkg --list yüklü tüm paketleri listeler
  • grep linux-image yüklü linux görüntülerini arar
  • awk '{ print $2 }' sadece 2. sütunu (paket adı olan) çıkarır.
  • sort -V öğeleri sürüm numarasına göre sıraya koyar
  • sed -n '/'`uname -r`'/q;p' geçerli çekirdekten önceki satırları yazdırır
  • xargs sudo apt-get -y purge bulunan çekirdekleri temizler

Gevşetme sed dua:

  • -n anlatır sed susmak
  • `uname -r` geçerli yüklü çekirdek sürümünü çıkarır - çıktının komutun bir parçası olarak içermesi için onu backticks'e dahil ederiz (bunu şu şekilde de görebilirsiniz $(uname -r)
  • /something/q 'bir şeyi' eşleştirdiğinizde dur diyor (bu durumda, bir şey çıktı uname -r) - bu / normal ifadeyi çevrele
  • p baskı mı
  • bu ; komut ayırıcı mı, yani /something/q;p bir şeyle eşleştiğinde çık diyor, başka yazdır

tamamen, sed -n '/'`uname -r`'/q;p' geçerli çekirdek adıyla eşleşene kadar satırları yazdırmaktır.

Paranoyaksanız (benim gibi), son kısmı yapabilirsiniz xargs echo sudo apt-get -y purge böylece eski çekirdekleri temizleme komutu yazdırılır, daha sonra çalıştırmadan önce beklenmeyen hiçbir şeyin dahil olmadığını kontrol edebilirsiniz.


Başlıkları kaldırmak için değiştirilmiş sürüm:

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 purgedpkg --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

Not: sed çağırma değiştirildi. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" "-generic" veya benzeri olmadan yalnızca sürümü (örneğin "3.2.0-44") ayıklar. uname -r


Görüntüleri ve üstbilgileri kaldırmak için hepsi bir arada sürüm (yukarıdaki iki sürümü birleştirir):

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

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 ve altı:

Bunu en kolay ve en hızlı yol olarak görüyorum. En son çekirdeğin yanı sıra iki tane daha tutar:

sudo apt-get install bikeshedsudo purge-old-kernels

Tutulan ek çekirdek sayısını değiştirmek için:

sudo purge-old-kernels --keep 3

Grub 2 Girişlerinden Girdilerin Kaldırılması /etc/grub'daki dosyaları düzenleyerek veya kaldırarak kaldırılmalıdır.d klasörü. Önyükleme / grub / grub.cfg dosyası salt okunurdur ve normalde düzenleme gerektirmemelidir.

Çok Fazla Çekirdek Var Mı?

  • Kullanmakta olduğunuz çekirdekten emin değilseniz, bir terminal türünde isimsiz -r.

  • Çekirdekler APT ile kaldırıldı (Sinaptik, "apt-get remove", vb.) grub'u otomatik olarak güncelleyecektir.cfg ve hiçbir kullanıcı işlemi gerekli değildir.

  • Çekirdekleri (ve menü girişlerini) kaldırmak için harika bir araç, güvenli ve kullanımı kolay bir GUI uygulaması olan Ubuntu-Tweak.

  • Ubuntu tweak'i yükle

  • Ubuntu-Tweak Uygulamalar altında satışa sunulacak > Sistem Araçları.

Eski Çekirdek Girdilerini Kaldırma

  • Soldaki "Paket Temizleyici" yi ve sağ panelden "Çekirdeği Temizle" yi seçin.

  • Sağ alttaki "Kilidini Aç" düğmesine basın, şifrenizi girin.

  • Görüntülenen listeden kaldırmak istediğiniz çekirdek görüntülerini ve başlıklarını seçin. Kullanılan çekirdek listelenmiyor.

  • Seçili çekirdek görüntülerini ve üstbilgilerini kaldırmak için sağ alttaki "Temizleme" düğmesine basın.

Grub menüsünden İşletim Sistemlerini Kaldırma

  • Bilgisayardan kaldırılan diğer işletim sistemleri de "update-grub" root olarak çalıştırıldıktan sonra menüden kaldırılacaktır.

  • Menü öğeleri Grub2 menüsüne komut dosyaları tarafından yerleştirilir. Menüye başka işletim Sistemlerinin girilmesini istemiyorsanız /etc/grub'u devre dışı bırakın.d/30_osprober

  • Komut dosyasının çalışmasını durdurmak için bu komutu çalıştırın
    sudo chmod -x /etc/grub.d/30_os-prober

  • DİSABLE_30_OS-PROBER= /etc/default/grub dosyasında 'true'

Grub Menüsünden Memtest86 + kaldırın
sudo chmod -x /etc/grub.d/20_memtest86+

  • Değişikliklerin grub'a eklenmesine izin vermek için update-grub komutunu çalıştırın.cfg

Kaynak

Not:Çekirdek güncelleştirildikten sonra GRUB menüsüne yeni bir girdi eklenir.İsterseniz eskisini kaldırabilirsiniz.Bununla birlikte, çoğu deneyimli kullanıcı, yükseltmede bir sorun olması durumunda en az bir yedek giriş tutmanızı ve sorun giderme amacıyla daha eski bir çekirdek sürümünü önyüklemeniz gerektiğini bildirir.

Çekirdek girdilerini kaldırmanın alternatif yolu (10.04'ten önce)

GRUB için GRUB2 için değil

startupmanager

Sistem>>Yönetim>&gt altında bulabilirsiniz;



İkinci ekran görüntüsünde kaç tane çekirdek gösterileceğini seçebileceğinizi görüyor musunuz? Genellikle sadece 1'de tutarım, ancak bir çekirdek yükseltmesi aldığımda, yeniden başlatmadan önce her zaman 2'ye değiştiririm, böylece yeni çekirdeğin donanımımla ilgili sorunları varsa eski çekirdeği seçebilirim. Yeni çekirdeğin iyi çalıştığını öğrendikten sonra onu 1'e geri değiştiriyorum.

Tamamen komut satırı, bu, mevcut ve ikinci en güncel olanı hariç hepsini kaldıracaktır (aşağıdaki baş komutundaki "-2" ile):

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 $OLDfiapt-get -qy autoremove --purge

Güncelleme: purge-old-kernels oluyor itiraz etmek şu günlerde.

Zor koşullarda bile çekirdekleri temizlemek için bir komut dosyası hazırladım. Buna denir linux-purge ve onu bulabilirsin burada.

Şu anda kullanılan çekirdekten daha eski olan çekirdekleri (ve ilgili paketleri) temizlemek istiyorsanız, sistem bozulmadığında şunları kullanabilirsiniz bu senaryo.

Eski çekirdeklerin kaldırılmasıyla ilgili katkıda bulunduğum bir Ubuntu dokümantasyon sayfası da var burada.

Takip edebilirsiniz "Katılımsız yükseltmeler" paket bölümünü kullanma -den Otomatik Güvenlik Güncellemeleri bunu gerçekleştirmek için Ubuntu Wiki'deki makale.

Aşağıdaki satırı değiştirmeniz gerekir /etc/apt/apt.conf.d/ 50 katılımsız-yükseltmeler dosya;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

ile

Unattended-Upgrade::Remove-Unused-Dependencies "true";

çekirdekler de dahil olmak üzere eski paketleri otomatik olarak kaldırmak için.

Ayrıca satırı kaldırın veya yorum yapın

"^linux-image.*"; 

dosyanın "NeverAutoRemove" bölümünde /etc/apt/apt.conf.d/01otomatik hareket.

Ubuntu ile birlikte gelen mümkün olan en hızlı / en basit yol (en azından 12.04'ten beri geçerlidir) apt-get. Kullanılmayan tüm eski çekirdek sürümlerini kaldırmak istiyorsanız aşağıdakileri yapın (Kullanmadığınız bir önceki sürüm hariç. Bu, geçerli çekirdek sürümü bir şekilde başarısız olursa, önceki bir duruma geri dönmenin bir yolunun olduğundan emin olmak içindir). Aşağıdakileri yapın:

sudo apt-get autoclean

Bu, sahip olabileceğiniz eski dosyaları (çekirdek sürümleri dahil) ortadan kaldıracaktır. Çok sayıda eski sürümünüz varsa, çekirdek sürümünün kaldırılmasının herhangi bir sorun yaşamadığından emin olması gerektiğinden biraz zaman alacağını unutmayın. Benim için son 12 çekirdek sürümünün kaldırılması yaklaşık 2 dakika sürdü. Aşağıdakileri de yapabilirsiniz:

sudo apt-get clean

Bu, apt'nin önbellek klasöründe indirilen ve depolanan her şeyi ortadan kaldıracaktır. Son olarak var:

sudo apt-get autoremove

kullanılmayan paketleri kontrol edecek ve gerekirse kaldıracaktır. Bu, yüklü herhangi bir uygulama tarafından artık ihtiyaç duyulmayan kütüphaneler ve bağımlılık paketleri için mükemmeldir.

Hangi çekirdeklerin ve başlıkların yüklü olduğunu bulmak için kullanın

dpkg -l | grep linux-imagedpkg -l | grep linux-headers

Daha sonra bunları tek tek veya birlikte kaldırabilirsiniz, sadece en son haberleri sakladığınızdan emin olun.

Kaldırmayı otomatikleştirmek için bazı kullanışlı komutlar ve komut dosyaları da vardır.

http://ubuntuforums.org/showthread.php?t=1658648

Kullanılmayan tüm çekirdekleri ve üstbilgileri kaldırmak için aşağıdakiler gereklidir:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge

(kullanma apt-get -y soru sormadan kaldırmak için)

İşte 18.04.1'de çalıştırıldığında ne olur:

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purgeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be REMOVED:  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.After this operation, 671 MB disk space will be freed.(Reading database ... 227403 files and directories currently installed.)Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-image-4.15.0-33-generic (4.15.0-33.36) .../etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericFound linux image: /boot/vmlinuz-4.15.0-34-genericFound initrd image: /boot/initrd.img-4.15.0-34-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-genericI: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic/etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...(Reading database ... 156180 files and directories currently installed.)Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removedPurging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...~$ uname -r4.15.0-36-generic

`sudo apt-get autoremove’ Ubuntu 14.04+ 'da hile yapmalı

İşi yapmak için purge-old-kernels adlı bir ubuntu komutu var. [Cevabıma bakın] (grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu ) daha fazla bilgi için.

Bu sayfaya geri dönmeye devam ediyorum… @hobs tarafından yapılan yorum, yalnızca çekirdekleriniz otomatik olarak kurulmuşsa çalışır - ancak sudo apt-get autoremove --purge ** cevabı ** apt-mark tavsiyesini izleyerek yaparsınız https://help.ubuntu.com/community/RemoveOldKernels

Eski çekirdeklerin birikmesi bir hatadır ve düzeltme devam etmektedir: https://bugs.launchpad.net/bugs/1357093 . Düzeltme yayımlandığında, eski çekirdekler varsayılan olarak otomatik olarak kaldırılır.

@hobs Komut, çekirdekler otomatik olarak yüklenmemişse, ancak Yazılım Güncelleyici tarafından Ubuntu Studio 14.04’te benim için hile yapmaz.

Eski çekirdekleri kaldırmanın yanı sıra, menüdeki ‘kurtarma’ öğelerinden kurtulmak istiyorsanız bu satırı `/etc/default/grub’ içinde açın: #GRUB_DISABLE_LINUX_RECOVERY=“true”

Son sürümlerde Ubuntu, çekirdekleri Grub’un alt menüsünde gizler, bu yüzden o kadar rahatsız edici değildir. Ancak, özellikle ayrı bir küçük / önyükleme bölümünüz varsa, yer kazanmak için fazladan çekirdekleri kaldırmak iyi bir fikir olabilir.

Ubuntu’yu daha yeni bir sürüme yükselttikten sonra çekirdekleri önceki sürümden kaldırmaya yardımcı olacak herhangi bir cevap bulamıyorum, bununla ilgili belirli bir soru bunun bir kopyası olarak işaretlenmiş olsa bile [burada] (grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu Ayrıca bkz. ilgili [hata raporu] (https://bugs.launchpad.net/ubuntu /+ kaynak /bikeshed/+ hata / 1586303)

İşi yapan bir senaryo hazırladım. Ödül hedefime ulaşıldıktan sonra yayınlayacağım: Bountysource