Bölmeyi temizlemek / önyüklemenin en güvenli yolu nedir?


Yanıtlar:


335

Komut satırı yöntemi:

Öncelikle çekirdek sürümünüzü kontrol edin, böylece çalışan çekirdek görüntüyü silmeyeceksiniz:

uname -r

Şimdi bu komutu kurulu çekirdeklerin listesi için çalıştırın:

dpkg --list 'linux-image*' | grep ^ii

ve artık çalıştırarak istemediğiniz / ihtiyaç duymadığınız çekirdekleri silin:

sudo apt-get remove linux-image-VERSION

VERSION'ı, çıkarmak istediğiniz çekirdeğin sürümüyle değiştirin.

Eski çekirdekleri çıkarmayı tamamladığınızda, artık ihtiyacınız olmayacak paketleri kaldırmak için bunu çalıştırabilirsiniz:

sudo apt-get autoremove

Sonunda, grub çekirdek listesini güncellemek için bunu çalıştırabilirsiniz:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iiSadece kurulu çekirdekleri görmeyi biraz kolaylaştırır. Ayrıca update-grubzararsız olduğunu ama kesinlikle gerekli olmadığını düşünüyorum, bir çekirdeği kaldırdığınızda otomatik olarak çalıştırılır.
Nelson

9
Kullanılacak sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""paket adlarının listesini almak için kullanın sudo apt-get remove. head -n -3sistemde kalan en son 3 çekirdeği tutmak için kullanılır.
Sithsu

2
benim basit bir liner:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremoveyeterli olmalı (genellikle son 3 çekirdeğe sahip olacaksınız)
mbx

6
Bu iyi bir cevap, ancak çoğu durumda (hepsinde olmasa) işe yarayacağından şüpheliyim: sorun /boottamamen dolu, bu nedenle apt-getbazı hata kodlarında ya da diğerlerinde başarısız olacak. Cevap aşağıda biraz "hackier" (ben o sorunu çelik kendim zorunda itiraf etmeliyim olduğunu rm -rfiçinde /boot) ancak bu durumda çalışması muhtemeldir tek.
Marco

284

NOT: bu yalnızca% 100 dolu / önyükleme nedeniyle temizlemek için apt kullanamazsanız

Apt-get çalışmıyorsa / boot'ınız% 100'dür, ilk önce temizlemeniz / boot etmeniz gerekir. Bu büyük olasılıkla kısmi bir kurulumda bir çekirdek yükseltme yakaladı, yani apt hemen hemen tamamen dondu ve apt-get -f installbu komutun başarısız olmasına rağmen çalışmanızı söylemeye devam edecek.

Çekirdek görüntülerin listesini alın ve ne yapamayacağınızı belirleyin. Bu komut, o anda çalışanlar haricinde kurulu çekirdekleri gösterecektir sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Listedeki en yeni iki sürümü not edin. Çalışan listede endişe duymanıza gerek yok. Bunu kontrol edebilirsiniz uname -r.

Aklı başında tutmak için küme ayracı genişletmeyi kullanmak sizin için önemli olmayan çekirdekler için / boot içindeki tüm dosyaları silmek için bir komut verin. Geçerli ve en yeni iki çekirdek görüntüsünü dışlamayı unutmayın. Örnek: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Bir aralığı, {80..84} sözdizimiyle de kullanabilirsiniz.

sudo apt-get -f install kısmi bir yükleme konusunda huysuz yapan şeyi temizlemek.

"Dahili Hata: Resim bulunamadı (/boot/vmlinuz-3.2.0-56-generic)" gibi bir satır içeren bir hatayla karşılaşırsanız, komutu çalıştırın sudo apt-get purge linux-image-3.2.0-56-generic(uygun sürümünüzle).

Son olarak, sudo apt-get autoremovemanuel önyükleme tarafından artık kullanılan eski çekirdek görüntü paketlerini temizlemek için temizleyin.

Tam / önyükleme bölümünü keşfetmenizi beklerken öneri, çalıştırma sudo apt-get updateve sudo apt-get upgradeyedeklemeniz gereken yükseltmelere bakmak.

Öneri2, İnceleme https://help.ubuntu.com/community/AutomaticSecurityUpdates ve Katılımsız Yükseltme :: Kaldır-Kullanılmayan Bağımlılıkları /etc/apt/apt.conf.d/50unattended-upgrades öğesinde true değerine ayarlamayı düşünün. Bu, kullanılmayan çekirdekleri temizlediğinizden emin olmak için her güvenlik güncellemesinden sonra otomatik olarak çalıştırmanın eşdeğeri olacaktır, ancak gelecekte kullanılmayacağını düşündüğünüz diğer şeyleri de ortadan kaldıracaktır.


3
Bu yolla bir sonraki yeniden başlatma için en son olana ve daha sonra bir tanesine kırılma ihtimaline karşı geleceğim. Genellikle bol bol yerim vardır, bu yüzden birkaç kişiye zarar vermez ve herhangi bir senaryoda yeterli yedekleme seçeneği olmadığı için paranoyamı tatmin eder.
flickerfly

1
Katılımsız yükseltme nedeniyle hiçbir zaman bir sorun yaşamadım. Deb-paketli olmayan kurulumlarda çoğunlukla bağımlılıkların kaybedilmesiyle ilgili bir sorun olabileceği senaryoları hayal edebiliyorum PHP'yi kurduğunuzu, kaldırmaya karar verdiğinizi ve kaynaktan daha yeni bir sürüm kurduğunuzu söyleyin. Bu sürüm önceki yükleme tarafından sağlanan bağımlılıklara sahiptir, ancak apt hala gerekli olduğunu bilmiyor. Bir dahaki sefere otomatik kaldır çalıştırdığınızda bu bağımlılıklar gitmiş olacak. Otomatik olsaydı, bu biraz kafa karıştırıcı olabilir. Depoların dışına kurulmazsa, tamamen güvenli olduğuna inanıyorum.
flickerfly

3
Bunu birkaç vsphere sanal sunucusunda (çekirdeklerin otomatik olarak yükseltildiği, ancak daha sonra kaldırılmadığı) gördükten sonra, otomatikleştirmek için bir python betiği yazdım . Üzerinde daha fazla göz olmasını isterdim
EvanK

2
Eğer dpkg --purgetam bir önyükleme yaparsanız aşağıdakileri elde edersiniz $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
flickerfly

1
Temizledikten sonra / boot apt-get install -f hala çalışmıyordu. Kullanarak df -ida /eski çekirdeğin kaynak kodunun çok büyük miktarda olması nedeniyle inode tükenmekte olduğumu öğrendim/usr/src
Kristofer

51

Bununla ilgili belgeler https://help.ubuntu.com/community/RemoveOldKernels adresinde bulunmaktadır.

Özetle: Kullanım

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

purge-old-kernelsAracı yoluyla kurulabilir sudo apt install byobu. İşte sayfasından açıklama:

Bu program eski çekirdek ve başlık paketlerini sistemden kaldırarak disk alanını boşaltır. Çalışmakta olan çekirdeği asla kaldırmaz. Varsayılan olarak en az 2 çekirdeği tutacaktır, ancak kullanıcı --keep parametreyi kullanarak bu değeri geçersiz kılabilir .

Kopyala yapıştır çözümü istiyorsanız, ReSearchIT Eng aşağıdakileri önerdi:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
Benim durumumda apt bekleyen bir çekirdekten dolayı çalışmıyor ve önerilen düzeltme bir catch-22:
James Bowery

Bozuk paketleri ilk önce askubuntu.com/a/304388/284313 ile düzeltmek zorunda kaldım. Bundan sonra çözümünüz işe yaradı.
James Bowery

3
Şu andan itibaren bunun kabul edilmiş bir çözüm olması gerektiğini düşünüyorum.
Fran Marzoa

3
bu kabul edilen cevaptan çok daha güvenli. Bence apt-get autoremove --purge, yeterli olması gerektiğini düşünüyorum .
Woodrow Barlow

7

Küçük bölümü terk etmenin ve /bootköke gitmenin çok daha kolay olduğunu buldum . Bu aynı zamanda gelecekte alan dışı sorunları da önler.

İlk önce verilerinizi önyükleme bölümünden kök dizine (farklı çalıştır sudo -s) taşıyın :

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

İçindeki /bootgirişi kaldırın (veya yorum yapın) /etc/fstab:

vim /etc/fstab

Grub güncelleyin ve her şeyin doğru olduğundan emin olun:

update-grub

apt şimdi sorunsuzca yükseltebilmeli.

Bu, kullanılmayan 200 MB'lık bir bölme bırakır (eğer başın belaya değer bulursanız başka bir şey için kullanabilirsiniz).


5
Bu iyi bir fikir, ancak kök bölümünüz için tam disk şifrelemesi yapmak istiyorsanız çalışmaz.
Paŭlo Ebermann 9:17

Evet / boot'ın ayrı bir bölüm olması gereken durumlar vardır. Bir başka örnek, Grub'un daha önce bir LVM bölümünden yüklenemediği idi.
Bastion

4

Eski Çekirdeklerin çıkarılması (/ boot'da boş alan olması) bakınız: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

O zaman koş

sudo apt-get update

1
işe
John

En iyi cevap! Bu benim için çalışan tek çözüm; otomatik kalıp aptaldır; resmen çıkarmadan önce karşılanmayan bağımlılıkları olan tüm çekirdekleri yeniden yüklemeye çalışır. Tekrar tekrar uzayda bitmeyen dairelere giriyordum. Bu cevap altın.
Lonnie Best

3

sudo apt-get autoremove

Bu son 2 çekirdeği hariç hepsini kaldırır. /boot% 100 kapasitedeyken Ubuntu 16.04 LTS'de test edildi ve apt-get upgradeen son çekirdek yükseltmesi başarısız oldu. Çekirdek otomatik kaldırması yinelemelidir, bu nedenle birkaç tane çekirdeğiniz varsa, bunlar birer birer kaldırılır. Bu yüzden sabırlı ol.


1

Bir aletle yapabiliyorken neden el ile yapıyorsunuz? 30 saniyede tekrar ihtiyacın olacağını biliyorsun, çünkü bugünlerde yeni bir çekirdek güncellemesi yapmaları 30 saniye alıyor.

Bu aracı kullanmanızı öneriyorum, bootnukem

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

Sonra

sudo bootnukem --dry-run

--dry-runGüvenli göründüğünü onayladıktan sonra çıkarın

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.