/ Boot bölümüm% 100'e ulaştı ve şimdi yükseltme yapamıyorum. Oda yapmak için eski çekirdekleri kaldıramıyor


154

Ben çalıştığımda Benim ilk konu oldu apt-get updateya apt-get upgrade. Yükseltme sırasında aşağıdaki hatayı alıyorum:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

Apt-get install -f komutunu çalıştırmayı denedim ve bu çıktı oldu (istendiğinde evet dedikten sonra)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Koşmayı denedim apt-get autoremoveve bana aynı hatayı veriyor apt-get upgrade.

Ben çalıştırdığınızda df, bunun için olsun /boot:

/dev/sda1                    233191     230297         0 100% /boot

Bu yüzden başka yerlere okudum, eski çekirdekleri temizlemeye çalışmalıyım. Hangi çekirdeğe sahip olduğumu kontrol ettim:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

Bununla en eski olanı kaldırmaya çalıştığımda:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Kurulumu mahvetmeden önyüklemeyi nasıl serbest bırakabilir veya genişletebilirim?


@ Mreiter'ın cevabının en iyisi olabileceğini düşünüyorum: paket yöneticisini kullanıyor ve en azından benim için diğer paket yöneticisi komutları başarısız olduğunda çalıştı: askubuntu.com/a/205776/247661
Aaron Hall


1
@ dskrvk Evet! Neden Remove-Unused-Dependenciesvarsayılan değil?
Steven R. Loomis

Yanıtlar:


129

Kök Dosya Sisteminde Yer Açmak

Kök dosya sisteminde yer açmak için çalıştırmayı deneyebilirsiniz apt-get clean.

Bu işe yaramazsa /var/cache/apt/archives, biraz alan geri almak için önbellekten birkaç dosyayı alıp manuel olarak kaldırabilirsiniz, örneğin:

sudo rm linux-headers-*

.debGerekirse , buradaki tüm dosyaları kaldırmaktan zarar apt-get cleangelmez - bu ne yapar. Yeniden aptihtiyaç duyulursa otomatik olarak yeniden indirilecektir .

/ Boot Dosya Sisteminde Boş Yer Açmak

Orijinal Afiş ayrı bir /bootbölüme sahiptir ve bu tam olan ve aptsistemin çalışmasını engelleyen şeydir . Orada yer açmak için gerekli olacak.

Neredeyse yeterince boş alan varsa, /bootbir ya da iki yapılandırma dosyasına gidin ve kaldırın:

sudo rm config-3.2.0-19-generic-pae

örneğin, ancak yine de kaldırmayı düşündüğünüz çekirdek sürümlerinden birinin adını kullanarak. Bu küçük bir alan boşaltacaktır (yaklaşık 144K alan).

Daha fazla yere ihtiyacınız varsa tek tek eski kaldırmak vmlinuz, initrd, abive System.mapsen (benim i386 çekirdek sürümleri biri için 22M hakkında) yeterli alana sahip yapana kadar dosya.

Ne yaparsan yap, hepsini kaldırma . Kullandığınız her bir çekirdek için, en azından her dosya türünün en son iki eşleşen sürümünü tutmalısınız.

Ardından apt-get install komutlarınızla devam edin. Yukarıda belirtildiği gibi, sildiğiniz bazı hesapların yeniden indirilmesi gerekebilir, ancak öyleyse bu otomatik olarak gerçekleşecektir. Tekrar çalışmaya uygun olduğunuzda, kaldırdığınız dosyalara karşılık gelen paketleri kaldırmak için apt-get komutunu kullanarak temizleyin; böylece her şey eşleşir.


Yapılandırma dosyası , aynı adın çekirdeğini oluşturmak için çekirdek takımı tarafından kullanılan/boot çekirdek yapılandırmasıdır . Başvuru yapmak istemezseniz veya kendi çekirdeklerinizi oluştururken size yardımcı olmak istemezseniz, çıkarmanız zararsız olmalıdır.

Sonunda, /bootyenisine daha fazla yer açmak için eski bir çekirdek paketini bölmeden el ile kaldırıyorsunuz .


Neredeyse tüm yapılandırmaları kaldırmayı denedim. Hala yeterli alana sahip değil gibi görünüyor. Buradaki diğer dosyaları silmek güvenli midir? Kök dosya sistemim yakınlarda hiçbir yerde bulunmadığından endişelenmiyorum.
Strifey16 16

Elimi kaldırmak için cevabımı ek dosyalar ile güncelledik. Bana öyle geliyor ki 3.0.0.13 ve 3.0.0.14 setlerini (abi dosyası dahil sete beş dosya) kaldırmak yeterli olacaktır.
John S Gruber

2
Bu düzeltti. Muhtemelen dosyaları elden kaldırmanın aşağıya ineceğini fark ettim, ancak bunu apt ile yüklenen herhangi bir şeyle yapmakta her zaman tereddüt ediyorum, bu yüzden önce buraya sormam gerektiğini düşündüm.
Strifey16

9
sudo rm/ Boot içinden kaldırmak için kullanmayın . Bunun yerine, sudo dpkg --purgebazı eski linux görüntü paketini kaldırmak için kullanın . Daha sonra sudo apt-get -f installkırılan bağımlılığı düzeltmek için kullanın .
jarno

4
Bazen bir sistem o kadar dolu olsa da dpkg bile çalışamaz. Ancak rmo zaman kullanılabilir.
jarno

66

Benim durumumda, aptkomutlar ve dpkgkomut bitiremedi ve kaldıramadı. Otomatik güncelleme yüklenemedi 2.6.32-56-server.

İlk adımım, kullanılacak alanı belirlemek oldu.

cd /boot
du -sk *|sort -n

Yaklaşık 30 tane çekirdek ve destek dosyam vardı.

uname -aÇalışan çekirdeği elde etmek için bir tane yaptım , Linux alternatifi olduğumu 2.6.32-43-serverve tarçalışmayan ve eski olan 6 sürümden birini yaptığımı belirledim.

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Sonra rm -rfyedeklediklerimin bir kısmını yaptım :

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Bu komutları örnek olarak gösteriyorum, durumunuz için ne ile çalışacağınıza karar vermeniz gerekecek.

Şimdi biraz /bootyerim olduğu için kaçabildim

apt-get -f install 

Başarısız kurulumunu temizlemek için 2.6.32-56-server.

Sonra yaptım bir

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

Bu bana yedeklediklerimi geri koymam için yer verdi.

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

Temizlemek için daha sonra kaçabilirim:

apt-get autoremove

Yeniden başlattım ve şimdi% 4'ünü kullanmaya başladım /boot.


Bu, tüm önerilerden benim için en yararlı oldu. Çok teşekkür ederim!
Joshua F. Rountree,

dosyaları / boot 'dan kaldırmak sadece apt ve dpkg' ı keser, çünkü kurulum ve kaldırma komut dosyaları, dosyalar eksik olduğunda SABİT başarısız olur. Bunun nasıl işe yaradığını anlamıyorum.
FizxMike

20

Eski çekirdekleri kaldırmak dpkgyerine kullanabilirsiniz apt-get:

sudo dpkg -r linux-image-3.2.0-29-generic

Belki bunu kullanmak için artılar var, ama @ mreiter'ın önerisi, bu işe yaramadığı zaman benim için işe yaradı (bu, ubuntu'nun IRC destek kanalında önerildi.)
Aaron Hall

3
@AaronHall Bu cevap basitçe anahtar bölümünü içeren mreiter cevabı (son satır) ve (ayrı durumunda yardımcı olmuyor başlıkların temizliğini kapsamaz çünkü çok daha kısa /bootbölüm).
Melebius

9

Önyükleme dizinindeki eski sürümlerin hala bazı dosyaları olduğunu fark ettim:

$ ls /boot
vmcoreinfo-2.6.31-17-server

Ve paket yöneticisi eski sürümleri listelerdi:

dpkg -l | grep linux-image

Bu yüzden bu komutu kullandım ( autoremovekaldırmak istemediğim daha yeni görüntüleri de kaldırır)

sudo apt-get purge linux-image-2.6.31-17-server

Hala bazı başlıklar kaldı:

dpkg -l | grep linux-headers

Bu yüzden bunu yaptım:

sudo apt-get purge linux-headers-2.6.32-34

Sonunda apt-get purge ile kaldıramadığım bir paket kaldı.

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

Kaynak: dpkg tarafından rc olarak işaretlenmiş bir paketi kaldırın

sudo dpkg --purge linux-image-2.6.28-11-server

3

Kullanımını kontrol /var/tmpile du -sh /var/tmp/. Bu klasördeki tüm dosyalar yer açmak için silinebilir.

Eski çekirdekleri kaldırmak için aşağıdakileri çalıştırabilirsiniz:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub

Ne gelmez /var/tmpeski çekirdekler ile ne ilgisi var? Ve içindeki her şeyi silmek her zaman güvenli değildir /var/tmp...
fosslinux

3

Bu benim kullandığım şeydi:

sudo apt-get autoremove linux-image-xxxx

Bunu tüm eski çekirdekler için yapın ve yalnızca en son ikisini saklayın.

Eski çekirdekleri otomatik olarak kaldırmak ve GRUB'u güncellemek istiyorsanız, şuna bakın: Ubuntu Belgeleri


2
Bu kabul edilen cevap olmalı. Her şeyi temizlemenin sakıncası yoksa, Linux görüntüsünü belirtmeniz bile gerekmez.
CyberEd

2

Benim için çalışan tek şeyin Yetenek kullanmak olduğunu buldum.

sudo aptitude

Sonra açıldığında genellikle alt kısımdaki karşılanmayan bağımlılıklar hakkında bir şeyler söyler. gÖnerilen kaldırma işlemine devam etmek için mektuba basabilirsiniz . Sizi olanları listeleyen bir sayfaya götürecektir.

-Kırılan tanelerin yanında eksi olmalı . gTekrar basın , kırık çekirdekleri kaldıracaktır. Çıkmak qiçin tuşuna basın . O zaman sudo apt-get autoremoveeski çekirdeklerden kurtulmak ve yer açmak için kullanabilmelisin .


1
Bu SADECE geçerli cevaptır. diğer tüm cevaplar işe yaramadı, çünkü paket yöneticisi bir şeyi kaldırmadan önce bir paket yüklemek istedi.
machineeaddict

2

Paketler üzerinde hareket edemezsiniz, ancak diğer dosyalar üzerinde de hareket edebilirsiniz . Öncelikle, ana klasörünüzü gözden geçirin ve silebileceğiniz bir şey olup olmadığına bakın . Değilse, iyi miktarda dosyayı başka bir bölüme (veya bir flash sürücüye) taşımayı ve ardından sudo apt-get install -fpaket bağımlılığı sorunlarını (büyük olasılıkla bir .deb dosyası yüklediğinizden) temizlemeye çalışın dpkgve ardından eski çekirdekleri temizleyin. Güvenle en az 10 MB'a sahip olduğunuzda, gereksiz yazılım veya dosyaları temizlemeyi deneyin.


5
Ana klasör / boot konumunda değil
Thorbjørn Ravn Andersen

1

Synaptic Paket Yöneticisi'ni kullanın. Kaldırılmasını istediğiniz paketi seçmeniz yeterlidir; ayrıca bağımlı olan paketleri de kaldırmanız istenir. Deneyimlerime göre, çekirdek paketleri her zaman birbirinden bağımsız olan iki (veya daha fazla sayıya bağlı olarak) gruplar halinde gelir. "Yerel / eski" filtresini kullanarak genellikle eskileri hızlı bir şekilde bulabilirsiniz.


2
Örneğin (yalnızca metin içeren) bir sunucuda, Synaptic yoktur. Yani sunucular için gerçekten uygun bir çözüm değil.
nerdoc,

1

Zaman zaman bu sorunla mücadele ediyorum ve hala tam işi yapan bir çözüm görmedim. Bazı durumlarda eski çekirdeğin çıkarılması beni bir şeyden çıkarmamı engelleyen bağımlılıklarla sonuçlanır ve çekirdeği elle / önyüklemeden çıkarmak zorunda kaldım. Ancak, el ile silinen çekirdeklerin bir yere kaydedildiğini ve bir şey benim dosyalarımda oturup rm -rf yaparken oturduğum bir dosya eksik olduğunu bildirdiğinde gelecekteki sorunlara neden olabileceğini hayal ettiğimden beri hala tam işi yapmak istiyordum.

Bu yüzden, burada daha fazla kurulum gerektirmeyen birçok googled önerisine dayanarak bu senaryoyu yazdım. Bazı "beklenmedik" durumlarımı desteklemek için komut dosyası birkaç kez değiştirildi. Örneğin, bunu bir ahududu pi üzerinde çalıştırmak, güncelleme grub muhtemelen yoktur. Bazı durumlarda son güncelleyicileri çalıştırırken, sunucular bazı sitelere erişilemediği IPv6 ile sıkışmış.

Senaryo, bağımlılıktan dolayı tamamen sıkışan çekirdekleri zorla kaldırması gerekip gerekmediğini, eğer “doğru” şekilde yapabiliyorsa çözer.

#!/bin/bash

ipv4="-o Acquire::ForceIPv4=true"

if [ "$1" = "4" ] ; then
    withip=$ipv4
    echo "Going IPv4 ($withip)"
fi

echo "Autoremove+Purge."
apt-get $withip -y -f autoremove --purge >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "Auto Removal Failed!"
fi

echo "Old dependency fix."
apt-get $withip -f -y install >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "That failed. So we'll try to make up to it during this process."
fi

echo "Now, going old kernel cleanup!"
kern=$(dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`)
hadErrors=0

for k in $kern
do
    echo apt-get -y purge $k
    apt-get $withip -y purge $k >/dev/null 2>&1

    if [ "$?" != "0" ] ; then
        echo "Failed apt-purge... Using plan B (--force-all -P)..."
        dpkg --force-all -P $k >/dev/null 2>&1
        echo "Rerunning stuff (apt-get -f -y install) for dependencies..."
        apt-get $withip -f -y install >/dev/null 2>&1
        if [ "$?" != "0" ] ; then
            echo "Still failing..."
            hadErrors=1
        fi
    fi
done

if [ "$hadErrors" = "1" ] ; then
    echo "I had errors. I should rerun this process, to see if there are more kernels that were left out after cleanup..."
    /usr/local/tornevall/cleankernel
fi

apt-get $withip autoremove
apt-get $withip update
apt-get $withip upgrade
apt-get $withip dist-upgrade

grb=$(which update-grub)
if [ "" != "$grb" ] ; then
    update-grub
else
    echo "Can't upgrade grub since update-grub is missing..."
fi

Linux temizlemeyi denedin mi? Şu anda, şu anda bu IPv4 Kuvvetini zorlamıyor.
jarno

Komut dosyanız, sistemimde linux-image-generic'i temizliyor, ki bu kötü.
jarno

Eski çekirdekler temizlendiğinde bir nedenden dolayı geri çekilirler. En azından bu senaryoyu yazdığımdan beri bu benim için geçerli. Ancak, bu komut dosyası, ilerlemek için başka seçenek olmadığında kullandığım bir şey. Normalde, yükseltmeler kendi başlarına bunu halledilir, ancak bu ana geldiğinde, başka hiçbir şey işe yaramazsa, temizlemeden sonra kurulacak daha fazla çekirdek olduğu için bu iyi bir seçenek olabilir. Bu iyi ya da kötü muhtemelen tartışılabilir.
Tomas Tornevall

0

Sadece koşmak sudo apt-get -f autoremovebenim sorunumu çözdü.


2
% 100 disk alanı / önyükleme kullanımınız var mıydı?
fosslinux

İzleme geçmişime baktığımda görünmüyordu. Not: Ben Vagrant xenial'dayım ve açılış dosya sistemim /dev/sda1monte edildi/
forzagreen

0

Bunu çalıştır:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

Kaynak: Yükseltmeden sonra bu hatayı alıyorum. lütfen yardım et


sudo dpkg-reconfigure -a bu ne işe yarar? Ubuntu 16'da, bilinmeyen seçeneği -a diyor
Shivam Kotwalia

Bu soru için, aptçekirdek paketlerinin kaldırılması başarısız olacaktır çünkü temizleme işlemi kendisi /bootzaten dolu olan dosyalar oluşturur . Bu yüzden apt-get autoremovebaşarısız oluyor. Aradığınız soru zaten listelenen askubuntu.com/q/142926/158442autoremove .
muru

@muru Sadece bunu yolladım çünkü hile yaptım, benim için: D
Ardi Nusawan

Yaptığımdan, söylediğim şeyin senin sorunun bu değil, diğer soru olacağıdır.
muru

@muru oh tamam anladım: D
Ardi Nusawan

0

Apt / get -f install ya da apt-get -f autoremov e çekirdeklerini yeniden yükler , çünkü eski linux çekirdeklerini temizleyerek dpkg tarafından çözülmeyen / boot dolu birkaç makale gördüm .

Benim durumumda, en azından, imzalı ve ekstra paketlerin de kaldırılması gerekiyordu - çekirdekler bu paketlerin bağımlılıklarıydı, bu yüzden bunları yeniden uygun hale getirdiler. Genellikle ilgili kurulum paketleri 'install' çağrılmadan önce temizlenmelidir. Eğer temizleme işleminden hemen sonra apt-get upgrade yapmayı denediyseniz , hata mesajı hangi paketlerin henüz tasfiye ettiğiniz çekirdeğin karşılanmamış bir bağımlılığı olduğunu söylemeliydi.

Benim durumumda, aşağıdaki taktik işe yaradı:

#as sudo, repeat 1-3 for any old kernels; can be scripted
dpkg --force-all -P linux-image-4.4.0-112-generic 
dpkg --purge linux-image-extra-4.4.0-112-generic
dpkg --purge linux-signed-image-4.4.0-112-generic
apt-get -f install #dependency resolution didn't have work to do for kernel packages
apt-get autoremove --purge -f 
apt-get autoclean
apt-get upgrade

0

Yükleme linux-tasfiye gibi araç bu .

Ardından terminalde çalıştırın:

sudo linux-purge --clear-boot --fix

Sonra çekirdeği çıkarmaya devam edin.

sudo linux-purge --keep 1 --choose

Ekstra:

Bunun için katılımsız yükseltmeler kullanmak yerine katılımsız çekirdek kaldırma işlemi için linux-purge kullanmak istiyorsanız, /etc/apt/apt.conf.d/50unattended-upgrades dosyasını düzenleyerek ve systemd hizmeti ayarlayarak kullanılmayan öğeleri kaldırmayı devre dışı bırakmalısınız. yürütme

/usr/local/bin/linux-purge --auto-only --keep 1 --yes

ne zaman istersen.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.