Bagaimana saya bisa menghapus kernel lama / menginstal yang baru ketika / boot sudah penuh?

31

Saya tahu pertanyaan ini ditanyakan berkali-kali sebelumnya, namun dengan saya itu agak berbeda, saya kira.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

Partisi boot saya penuh.

Kernel saat ini:

# uname -r
3.2.0-35-generic

Semua Kernel:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

Jadi saya berpikir untuk menghapus kernel 3.2.0.32-generic dengan:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Tidak berhasil

Ketika saya mencobanya apt-get -f installjuga gagal:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Bantuan apapun akan sangat dihargai.

Pembaruan: Saya lakukan:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

Setelah itu masalah berikut dengan apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
Marcel
sumber
Lihat jawaban saya ketika autoremove tidak berfungsi karena kurangnya ruang.
nslntmnx

Jawaban:

22

Anda tidak dapat menggunakan apt-get ketika kernel Anda sudah usang.

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

gunakan lsuntuk melihat apa yang ada di folder hapus satu atau dua tertua itu

sudo apt-get -f install

Kemudian Anda dapat membersihkan apt-get seperti di

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

atau lanjutkan dengan rm.

Anda juga harus melakukannya sudo update-grubsaat finsihed

wlraider70
sumber
Perintah install menginstal ulang banyak kernel lama, menghasilkan disk boot penuh. Perintah pembersihan menyelesaikan ini untukku.
SPRBRN
Saya mengikuti jawaban ini hingga sudo apt-get -f install, kemudian memulai kembali untuk memastikan semuanya baik-baik saja dan menghapus sisanya apt autoremoveseperti yang disarankan dalam perintah keluaran sebelumnya.
Bart C
10

Ternyata, ini berhasil:

sudo apt-get autoremove 

Menurut apt-gethalaman manual:

autoremove digunakan untuk menghapus paket yang diinstal secara otomatis untuk memenuhi dependensi untuk paket lain dan sekarang tidak lagi diperlukan.

3.16.0-39 adalah yang saya coba instal, tetapi gagal karena / boot penuh. 3.16.0-38 adalah versi saya saat ini. Anda dapat melihat bahwa -38 dilewati.

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.
ChePazzo
sumber
Saya suka jawaban ini tetapi melewatkan beberapa manual untuk tahu persis untuk apa autoremove.
s3m3n
1
autoremove hanya berfungsi jika tindakan apt yang sebelumnya di-antri selesai dengan benar. Autoremove tidak akan berfungsi jika Anda sudah mendapatkan kesalahan 'tidak ada ruang tersisa di perangkat' - tindakan yang sebelumnya antri akan gagal, dan autoremove tidak akan berjalan. Dengan kata lain, autoremove berfungsi ... sampai tidak.
user535733
@ user535733 Anda benar. Lihat jawaban saya ketika autoremove tidak berfungsi karena kurangnya ruang.
nslntmnx
7

Di terminal, jalankan perintah berikut:

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

Perintah ini mencantumkan semua kernel Linux yang saat ini diinstal, kemudian memilih semua yang saat ini tidak digunakan dan menghapusnya.

Django23
sumber
2
Mungkin Anda ingin menjelaskan apa yang dilakukan perintah ini dengan tepat. Kelihatannya agak rumit: secara umum, orang harus disarankan untuk tidak menjalankan perintah seperti ini yang tidak mereka pahami - terutama dengan sesuatu yang vital bagi sistem mereka.
mtdevans
@mtdevans: Saya telah menambahkan bahwa perintah di atas mencantumkan semua kernel Linux yang terinstal, kemudian memilih semua yang saat ini tidak digunakan, dan kemudian menghapus semua kernel yang saat ini tidak digunakan.
Kristian
4
Perintah ini berguna, jalankan saja bagian sebelum "| xargs" terlebih dahulu untuk memeriksa apa yang akan Anda hapus. Juga, | grep -v mungkin diperlukan untuk mempertahankan kernel terbaru, yang mungkin belum digunakan, tetapi diinginkan.
Roman Susi
4
ini berbahaya karena juga cocok dengan linux-libc-dev: amd64
Frederick Nord
2
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Jika menjalankan perintah di atas tanpa "sudo apt-get -y purge" cocok dengan linux-libc-dev Anda: amd64 Anda dapat menambahkan tanda titik koma ke regex untuk tidak memasukkannya:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ :]*\).*/\1/;/[0-9]/!d' | xargs

Sekarang pastikan itu terlihat bagus dan tambahkan "sudo apt-get -y purge"

Cory W
sumber
1

Untuk Ubuntu 12,04 coba ini sudo apt-get purge linux-image-[kernel version]

Ini akan menghapus versi kernel apa pun. Jika folder boot Anda memiliki banyak kernel, jangan lupa memperbarui grub dan mem-boot ulang sistem Anda

ex. sudo apt-get purge linux-image-3.11.6 *

alisaleh
sumber
2
Masalahnya adalah bahwa ini tidak berfungsi lagi ketika seseorang memiliki titik di mana ada masalah ketergantungan, seperti yang ada di depan.
Paŭlo Ebermann
Ini bekerja untuk saya!
Daniel
0

Banyak jawaban mengatakan untuk menggunakan "apt autoremove" tetapi itu mungkin tidak berfungsi ketika / boot penuh karena apt mencoba menambahkan kernel sebelum menghapus.

Selanjutnya apt autoremove tidak akan menghapus kernel yang disebutkan di /etc/apt/apt.conf.d/01autoremove-kernels sehingga kita perlu memperbaikinya.

Inilah proses yang bekerja untuk saya.

Hapus file konfigurasi kernel yang tidak diinginkan.

sudo dpkg --purge $ (KOLOM = 200 dpkg-l | grep "linux-image-extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

Perbarui /etc/apt/apt.conf.d/01autoremove-kernels dengan menjalankan ...

sudo /etc/kernel/postinst.d/apt-auto-removal

Semoga autoremove yang tepat akan bekerja.

sudo apt autoremove --purge

Jika tidak, Anda harus dapat menghapus kernel yang sangat lama dan tidak terpakai dari / boot.

Pertama cari tahu kernel apa yang Anda jalankan.

uname -r

Jangan hapus kernel Anda saat ini, atau kernel sebelumnya.

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

Sekarang Anda harus memiliki ruang yang cukup untuk mencoba autoremove apt lagi. Jika tidak, hapus kernel lain yang sangat lama. Tentu saja, pertahankan tertua dan terbaru.

nslntmnx
sumber
-2

Saya harap ini dapat membantu:

saya biasanya menghapus kernel lama menggunakan ubuntu-tweak janitor, GUI yang bagus dan mudah :)

klik 'sistem' dan akan ada daftar kernel lama, cukup klik dan bersihkan

mohur
sumber
1
ini adalah server ubuntu dan saya terhubung melalui dempul. (Tetapi saya juga memiliki ketersediaan untuk Webmin di server)
Marcel
Bagaimana saya bisa menginstal petugas kebersihan ubuntu-tweak ini?
Jenny O'Reilly