Bagaimana cara menghapus versi kernel lama untuk membersihkan menu boot?

Setiap kali saya menginstal kernel Linux baru, itu akan tertinggal di grub_config, membuat menu boot lebih lama setiap kali.

Saya tahu saya dapat mencari secara manual melalui paket yang diinstal dan menghapusnya.

Apakah Ubuntu menyediakan cara yang lebih mudah untuk membersihkannya atau mencegahnya muncul di daftar boot?

16.04 dan versi Ubuntu yang lebih baru

sudo apt autoremove

Perintah ini menghapus paket yang secara otomatis diinstal untuk menyelesaikan ketergantungan, tetapi sekarang tidak lagi bergantung pada. Ini termasuk versi lama linux-headers-* dan linux-image-*. (Ini juga pintar tentang proses ini, meninggalkan satu versi cadangan kernel sebagai fallback!)

11.10 dan versi Ubuntu yang lebih baru

GRUB2 dan tampilan semua kernel

Versi terbaru dari Grub2 dipasang di Ubuntu secara otomatis menampilkan kernel terbaru dan menyembunyikan kernel lama yang mungkin telah Anda instal.

GNU GRUB

Jika Anda tidak melihat Anda grub - kemudian ingat untuk menekan Shift sementara booting.

Seperti yang Anda lihat, hanya kernel terbaru yang ditampilkan.

Jika Anda memilih opsi yang ditampilkan (tekan Enter) kemudian semua kernel lama menjadi terlihat dan tersedia untuk boot.

GNU GRUB Previous versions

Cara menghapus kernel lama secara permanen

Boot pertama dengan kernel terbaru yang tersedia.

Ada sejumlah cara untuk menghapus kernel lama. Secara pribadi, saya tidak akan menyentuh Petugas Kebersihan Komputer karena ini diakui untuk merusak komputer Anda dengan sarannya.

synaptic

Alternatifnya adalah Synaptic (sudo apt install synaptic)

cari linux-image, klik kanan kernel dan pilih penghapusan lengkap dan terakhir klik Menerapkan tombol untuk menghapus kernel.

Ulangi pencarian tapi kali ini untuk linux-header - Anda dapat menghapus header terkait untuk gambar kernel yang dipilih sebelumnya.

Synaptic meskipun tidak akan mencoba untuk memverifikasi apa yang Anda mencoba untuk menghapus... Anda dapat secara tidak sengaja menghapus kernel terbaru Anda-atau bahkan menghapus semua kernel Anda melalui alat ini sehingga Anda tidak dapat di-boot Ubuntu!.

Ingatlah untuk memeriksa jenis kernel yang Anda gunakan:

uname -r

Hasilnya akan mirip dengan:

Terminal <uname -r>

Ingat hasil dan nomornya - pastikan Anda tidak menghapus gambar atau header yang sesuai.

Rekomendasi

Rekomendasi saya adalah menyimpan setidaknya dua atau lebih tiga kernel termasuk yang terbaru. Alasan untuk rekomendasi adalah bahwa anda akan memiliki setidaknya satu/dua kernel lain untuk boot dengan, jika untuk apa-pernah alasan kernel terbaru Anda tidak dapat boot dengan atau memperkenalkan kemampuan kemunduran seperti rusak nirkabel.

Pertama, reboot sistem Anda untuk memastikannya menggunakan kernel terbaru. Kemudian buka terminal dan periksa kernel Anda saat ini:

uname -r 

JANGAN HAPUS KERNEL INI!

Selanjutnya, ketik perintah di bawah ini untuk melihat/daftar semua kernel yang diinstal pada sistem Anda.

dpkg --list 'linux-image-*'

Temukan semua kernel yang lebih rendah dari kernel Anda saat ini. Ketika Anda tahu kernel mana yang harus dihapus, Lanjutkan di bawah ini untuk menghapusnya. Jalankan perintah di bawah ini untuk menghapus kernel yang Anda pilih.

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

Terakhir, jalankan perintah di bawah ini untuk memperbarui grub2

sudo update-grub2 

Reboot sistem Anda.

Satu-liner saya untuk menghapus kernel lama (ini juga membebaskan ruang disk)

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

Penjelasan (ingat, | menggunakan output dari perintah sebelumnya sebagai input ke yang berikutnya)

  • dpkg --list daftar semua paket yang diinstal
  • grep linux-image mencari gambar linux yang diinstal
  • awk '{ print $2 }' hanya output Kolom 2 (yang merupakan Nama paket)
  • sort -V menempatkan item dalam urutan dengan nomor versi
  • sed -n '/'`uname -r`'/q;p' mencetak baris sebelum kernel saat ini
  • xargs sudo apt-get -y purge membersihkan kernel yang ditemukan

Unwinding yang sed Doa:

  • -n memberitahu sed untuk diam
  • `uname -r` output rilis kernel yang diinstal saat ini - kami memasukkannya ke dalam backticks sehingga output disertakan sebagai bagian dari perintah (Anda mungkin juga melihat ini sebagai $(uname -r)
  • /something/q mengatakan berhenti ketika Anda mencocokkan 'sesuatu' (dalam hal ini, sesuatu adalah output dari uname -r)- itu / mengelilingi ekspresi reguler
  • p adalah cetak
  • the ; adalah perintah separtor, jadi /something/q;p mengatakan berhenti ketika Anda cocok sesuatu, cetak lain

sama sekali, sed -n '/'`uname -r`'/q;p' adalah mencetak garis sampai cocok dengan nama kernel saat ini.

Jika Anda paranoid (seperti saya), Anda dapat membuat bagian terakhir xargs echo sudo apt-get -y purge agar perintah untuk membersihkan kernel lama dicetak, maka anda dapat memeriksa bahwa tidak ada yang tidak terduga yang disertakan sebelum Anda menjalankannya.


Versi modifikasi untuk menghapus header:

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

Catatan: sed Doa dimodifikasi. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" ekstrak hanya versi (misalnya "3.2.0-44"), tanpa "- generic " atau serupa dari uname -r


Versi All-In-one untuk menghapus gambar dan header (menggabungkan dua versi di atas):

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 dan yang lebih baru:

Saya menemukan ini menjadi cara termudah dan tercepat. Itu membuat kernel terbaru serta dua lagi:

sudo apt-get install bikeshedsudo purge-old-kernels

Untuk mengubah jumlah kernel tambahan yang disimpan:

sudo purge-old-kernels --keep 3

Menghapus entri dari Grub 2entries harus dihapus dengan mengedit atau menghapus file di /etc/grub.d folder. Itu / boot / grub / grub.file cfg hanya-baca dan biasanya tidak memerlukan pengeditan.

Terlalu Banyak Kernel?

  • Jika Anda tidak yakin dengan kernel yang sedang Anda gunakan, dalam tipe terminal uname-r.

  • Kernel dihapus melalui APT (Synaptic, "apt-get remove", dll.) akan secara otomatis memperbarui grub.cfg dan tidak ada tindakan pengguna diperlukan.

  • Alat yang hebat untuk menghapus kernel (dan Entri menu) adalah Ubuntu-Tweak, aplikasi GUI yang aman dan mudah digunakan.

  • Instal Ubuntu tweak

  • Ubuntu-Tweak akan tersedia di bawah Aplikasi & gt; Alat Sistem.

Hapus Entri Kernel Yang Lebih Lama

  • Pilih"paket Cleaner " di sebelah kiri dan"Kernel bersih & quot; dari panel kanan.

  • Tekan tombol"Buka Kunci & quot; di kanan bawah, Masukkan kata sandi Anda.

  • Pilih dari daftar yang ditampilkan gambar kernel dan header yang ingin Anda hapus. Kernel yang digunakan tidak terdaftar.

  • Tekan tombol"Cleanup & quot; di kanan bawah untuk menghapus gambar dan header kernel yang dipilih.

Hapus sistem operasi dari menu Grub

  • Sistem Operasi lain yang telah dihapus dari komputer juga akan dihapus dari menu sekali"update-grub & quot; dijalankan sebagai root.

  • Item Menu ditempatkan pada menu Grub2 oleh skrip. Jika Anda tidak ingin sistem operasi lain dimasukkan ke dalam menu, Nonaktifkan / etc / grub.d / 30_osprober

  • Jalankan perintah ini untuk menghentikan script dari berjalan
    sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-PROBER = 'benar' di / etc / default / grub

Hapus Memtest86 + dari menu Grub
sudo chmod -x /etc/grub.d/20_memtest86+

  • Jalankan perintah update-grub untuk memungkinkan perubahan yang akan dimasukkan dalam grub.cfg

Sumber

Catatan:Setelah pembaruan kernel, entri baru ditambahkan ke menu GRUB.Anda dapat menghapus yang lebih tua jika Anda mau.Namun, sebagian besar pengguna berpengalaman akan menyarankan Anda untuk menyimpan setidaknya satu entri cadangan jika terjadi kesalahan dengan peningkatan dan Anda perlu mem-boot versi kernel yang lebih lama untuk tujuan pemecahan masalah.

Cara alternatif untuk menghapus entri Kernel (sebelum 10.04)

untuk GRUB tidak GRUB2

startupmanager

Anda dapat menemukannya di bawah Sistem> & gt;Administrasi & gt; & gt;



Anda lihat di screenshot kedua Anda dapat memilih berapa banyak kernel untuk menunjukkan? Saya biasanya hanya menyimpannya di 1, tetapi ketika saya mendapatkan upgrade kernel saya selalu mengubahnya ke 2 sebelum memulai ulang sehingga saya dapat memilih kernel yang lebih lama jika kernel baru memiliki masalah dengan perangkat keras saya. Setelah saya tahu kernel baru berfungsi dengan baik, saya mengubahnya kembali ke 1.

Murni commandline, ini akan menghapus semua kecuali arus dan arus kedua (melalui" -2 " di perintah kepala di bawah):

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

Pembaruan: purge-old-kernels adalah deprecated saat ini.

Saya membuat skrip untuk membersihkan kernel bahkan dalam kondisi yang rumit. Hal ini disebut linux-purge dan Anda dapat menemukannya di sini.

Jika Anda hanya ingin membersihkan kernel (dan Paket terkait) yang lebih lama dari kernel yang saat ini digunakan, ketika sistem tidak rusak, Anda dapat menggunakan script ini.

Ada juga halaman dokumentasi Ubuntu yang telah saya kontribusikan untuk menghapus kernel lama di sini.

Anda dapat mengikuti Menggunakan bagian paket "tanpa pengawasan-peningkatan" dari Pembaruan Keamanan Otomatis artikel tentang Ubuntu Wiki untuk melakukan ini.

Anda perlu mengubah baris berikut di /etc/apt / apt.conf.d / 50unattended-upgrade berkas;

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

dengan

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

untuk secara otomatis menghapus paket lama, termasuk kernel.

Hapus juga atau beri komentar pada baris

"^linux-image.*"; 

di bagian" NeverAutoRemove " dari file /etc/apt / apt.conf.d / 01autoremove.

Cara tercepat / sederhana (berlaku setidaknya sejak 12.04) yang mungkin sudah ada dengan Ubuntu adalah apt-get. Lakukan hal berikut jika Anda ingin menghapus semua versi kernel lama yang tidak digunakan (kecuali yang sebelumnya yang tidak Anda gunakan. Ini untuk memastikan bahwa jika versi kernel saat ini gagal dalam beberapa cara, Anda memiliki cara untuk kembali ke keadaan sebelumnya). Lakukan hal berikut:

sudo apt-get autoclean

Ini akan menghilangkan file lama (termasuk versi kernel) yang mungkin anda miliki. Perhatikan bahwa jika Anda memiliki banyak versi lama, itu akan memakan waktu cukup lama karena harus memastikan bahwa menghapus versi kernel tidak memiliki masalah. Bagi saya, menghapus 12 versi kernel terakhir membutuhkan waktu sekitar 2 menit. Anda juga dapat melakukan hal berikut:

sudo apt-get clean

Yang akan menghilangkan semua yang diunduh dan disimpan di folder cache apt. Terakhir Anda memiliki:

sudo apt-get autoremove

yang akan memeriksa paket yang tidak digunakan dan menghapusnya jika perlu. Ini bagus untuk pustaka dan paket ketergantungan yang tidak lagi diperlukan oleh aplikasi apa pun yang diinstal.

Untuk mengetahui kernel dan header apa yang diinstal gunakan

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

Anda kemudian dapat menghapusnya satu per satu atau bersama-sama, pastikan untuk menyimpan yang terbaru.

Ada juga beberapa perintah dan skrip praktis untuk mengotomatiskan penghapusan.

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

Klaim berikut untuk menghapus semua kernel dan header yang tidak digunakan:

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

(gunakan apt-get -y untuk menghapus tanpa pertanyaan)

Inilah yang terjadi ketika dijalankan pada 18.04.1:

~$ 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’ harus melakukan trik di Ubuntu 14.04+

Ada perintah ubuntu yang disebut purge-old-kernels untuk melakukan pekerjaan itu. Lihat saya jawaban untuk informasi lebih lanjut.

Saya terus kembali ke halaman ini… komentar oleh @ hobs hanya berfungsi jika kernel Anda diinstal secara otomatis-namun Anda membuat ‘sudo apt-get autoremove – purge’ * * jawabannya * * dengan mengikuti saran ‘apt-mark’ Di https://help.ubuntu.com/community/RemoveOldKernels

Akumulasi kernel lama adalah bug, dengan perbaikan sedang berlangsung: https://bugs.launchpad.net/bugs/1357093 . Ketika perbaikan dilepaskan, kernel yang lebih tua akan autoremove secara default.

@ hobs perintah tidak melakukan trik untuk saya di Ubuntu Studio 14.04, jika kernel belum diinstal secara otomatis, tetapi oleh pembaruan perangkat lunak.

Serta menghapus kernel lama, Hapus komentar baris ini di '/ etc / default / grub 'jika Anda ingin menyingkirkan item ‘pemulihan’ di menu: # GRUB_DISABLE_LINUX_RECOVERY= “true”

Dalam rilis terbaru Ubuntu menyembunyikan kernel di sub menu Grub, jadi tidak terlalu menonjol. Namun, mungkin ide yang baik untuk menghapus kernel tambahan untuk menghemat ruang, terutama, jika Anda memiliki partisi kecil /boot terpisah.

Saya tidak dapat menemukan jawaban yang akan membantu menghapus kernel dari rilis sebelumnya setelah memutakhirkan Ubuntu ke rilis yang lebih baru, bahkan jika pertanyaan spesifik tentang hal itu telah ditandai sebagai duplikat dari ini [di sini] (grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu). lihat juga terkait [laporan bug](https://bugs.launchpad.net/ubuntu/ + sumber / bikeshed/ + bug / 1586303)

Saya telah membuat naskah yang melakukan pekerjaan itu. Saya akan mempublikasikannya setelah tujuan karunia saya tercapai: Bountysource