Kesalahan penuh disk palsu: apt-get tidak dapat menginstal atau menghapus

24

Saya mengalami kesalahan berikut saat memutakhirkan server Ubuntu 12.04 saya. Sekarang apt-gettidak dapat menginstal atau menghapus paket apa pun.

Bongkar linux-headers-3.13.0-62 (dari ... / linux-headers-3.13.0-62_3.13.0-62.102 ~ precision1_all.deb) ...
dpkg: pemrosesan kesalahan /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102 ~precise1_all.deb (--unpack):
 tidak dapat membuat `/usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h.dpkg-new ' 
(saat memproses `./usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h '): Tidak ada ruang tersisa di perangkat 
Tidak ada laporan tertulis yang ditulis karena pesan kesalahan menunjukkan disk kesalahan penuh
 dpkg-deb: error: paste subprocess terbunuh oleh sinyal (Broken pipe)
Galat ditemukan saat memproses:
 /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb
E: Sub-proses / usr / bin / dpkg mengembalikan kode kesalahan (1)

Meskipun saya tidak benar-benar kehabisan ruang disk,

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  4.7G  1.8G  69% /  

Bagaimanapun inode saya penuh,

# df -i
Filesystem     Inodes   IUsed  IFree IUse% Mounted on
/dev/sda1      458752  455214   3538  100% /

Saya memiliki lebih dari sepuluh kernel lama tetapi saya tidak dapat menghapusnya karena saya apt-getsendiri lumpuh. Jadi saya tidak dapat mengikuti pos ini yang melaporkan masalah serupa.

Satu-satunya opsi tampaknya menghapus beberapa kernel lama secara manual. Apakah akan menimbulkan masalah?

Apakah ada jalan keluar yang lebih baik? Dapatkah saya menggunakan ruang yang disediakan untuk root untuk saat ini dan menghapus kernel yang lebih lama?

souravc
sumber
1
Memang saya secara manual menghapus beberapa kernel lama dari /usr/srcuntuk menyingkirkan situasi. Untungnya semuanya berjalan dengan baik dan aptmulai bekerja lagi. Tetapi saya akan meminta Anda untuk mengambil kembali sebelum melakukan hal seperti itu pada mesin produksi. Saya melakukannya pada mesin virtual yang memiliki cadangan lengkap.
souravc
Berhasil! Saya melakukan hal yang sama di sini (ubutu 14.04.1) untuk memperbarui ke kernel 4.4.0-51-generik. Saya hanya tidak yakin apakah itu akan menyebabkan masalah di masa depan. Terima kasih.
Moreno

Jawaban:

36

Saya tahu posting ini agak lama, tetapi saya menemukan jawaban di sini untuk siapa saja yang mungkin menemukan posting ini: https://help.ubuntu.com/community/RemoveOldKernels

Jika tautan rusak, berikut cuplikan yang relevan:

Menghapus kernel tua dengan aman

Untuk pengguna sistem LVM, sistem terenkripsi atau sistem penyimpanan terbatas, masalah yang paling sering adalah bahwa partisi / boot cukup penuh. Manajer paket tidak dapat menginstal pemutakhiran yang tertunda karena kurangnya ruang. Selain itu, apt-get tidak dapat menghapus paket karena ketergantungan yang rusak.

Masalah ini dapat diperbaiki dengan cepat dan mudah dari shell. Cukup identifikasi satu atau dua kernel lama untuk dihapus secara manual, yang akan memberikan cukup ruang kepada manajer paket untuk menginstal pembaruan yang antri.


$ sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*  
                                  ## In Ubuntu 16.04 and earlier there may be leftover temporary
                                  ## files to delete.
                                  ## See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=814345

$ uname -r                        ## This command identifies the currently-running kernel
4.2.0-21-generic                  ## This is the current kernel.
                                  ## DO NOT REMOVE it!

$ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)
                                  ## This command lists all the kernels excluding the booted
                                  ## kernel in the package database, and their status.
rc  linux-image-4.2.0-14-generic  ## The oldest kernel in the database
                                  ## Status 'rc' means it's already been removed
ii  linux-image-4.2.0-15-generic  ## The oldest installed kernel. Eligible for removal.
                                  ## Status 'ii' means Installed.
ii  linux-image-4.2.0-16-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-18-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-19-generic  ## The previous good kernel. Keep
iU  linux-image-4.2.0-22-generic  ## DO NOT REMOVE. Status 'iU' means it's not installed,
                                  ## but queued for install in apt.
                                  ## This is the package we want apt to install.

                                  ## Purge the oldest kernel package using dpkg instead of apt.
                                  ## First you need to remove the image initrd.img file manually
                                  ## due to Bug #1678187.
$ sudo update-initramfs -d -k 4.2.0-15-generic
$ sudo dpkg --purge linux-image-4.2.0-15-generic linux-image-extra-4.2.0-15-generic
                                  ## If the previous command fails, some installed package
                                  ## depends on the kernel. The output of dpkg tells the name
                                  ## of the package. Purge it first.

                                  ## Also purge the respective header package.
$ sudo dpkg --purge linux-headers-4.2.0-15-generic
                                  ## Try also purging the common header package.
$ sudo dpkg --purge linux-headers-4.2.0-15
                                  ## Do not worry, if the previous command fails.

$ sudo apt-get -f install         ## Try to fix the broken dependency.

Saya mengikuti ini dengan:

sudo apt-get autoremove --purge
Junkle
sumber
9

Saya menemukan sekarang jalan keluar dari situasi dan menghapus beberapa kernel yang lebih tua dari /usr/srcuntuk menyingkirkan situasi. Untungnya semuanya berjalan dengan baik dan mulai bekerja lagi.

Sangat disarankan untuk mengambil kembali sebelum mengeluarkan kernel yang lebih tua pada mesin produksi.

souravc
sumber
Solusi yang lebih baik masih diterima. Saya memposting komentar ini sebagai jawaban karena dapat membantu seseorang.
souravc
1
Setelah menghapus beberapa kernel lama dan berlari apt-get autoremove dan menginstal beberapa dependensi apt-get -f installmemperbaiki masalah saya
Thamaraiselvam
TERIMA KASIH. Saya menghapus semua linux- * di bawah /boottetapi tidak menggunakan dkpgsehingga masih ada *-headerfile di/usr/src
Dylan Pierce