/ Boot içinde nasıl daha fazla yer açabilirim?


563

Benim /bootbölüm dolmak üzere ve ben bir uyarısını benim Sistemi yeniden her zaman olsun. Eski çekirdek paketlerini (linux-headers ...) zaten sildim, aslında bunu otomatik güncellemelerle gelen daha yeni bir çekirdek sürümü yüklemek için yaptım.

Bu yeni sürümü yükledikten sonra, bölüm yeniden neredeyse doludur. Peki başka ne silebilirim? Eski çekirdek görüntüleriyle ilgili başka dosyalar var mı?

İşte bölümümdeki dosyaların bir listesi /boot:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Şu anda 3.0.0-14-genericçekirdeği kullanıyorum .


5
Her Ubuntu kurulumunun ayrı bir / önyükleme bölümüne sahip olmayacağından bahsetmeye değer - çoğu zaman hepsi büyük bir bölüm olacak. Bu cevap, ayrı bir / önyükleme bölümüne sahip olanlar için geçerlidir. LVM veya "tam disk" şifrelemesi kullananlar için ayrı / önyükleme gerekir, aksi takdirde isteğe bağlı olabilir.
thomasrutter

4
Başkası benimle aynı sorunu yaşıyorsa: / boot sonrası boş alanı kalmadıysa, "apt-get upgrade", yüklü olan çekirdekler için initrd dosyalarını yeniden oluştururken ya da update-initramfs betiğinin incelendiğinde yüklendiğine inandığında başarısız olur. / var / lib / initramfs-tools içeriği. Bu durumda apt-get komutunu kullanarak eski çekirdekleri kaldıramazsınız, çünkü fscking / boot bölümü cihazda boş alan kalmaz. Bunu "dpkg -P" kullanarak ve ardından / boot (boş alana) karşılık gelen girişi ve / var / lib / initramfs-tools (initrd görüntüsü oluşturulamaz) kullanarak yapabilirsiniz.
wojci

3
Doğru cevaplar için kilit nokta , çekirdeğin eski sürümlerini içeren paketleri çıkarmanızı söylemeleridir . Bu sorunu ele alan birçok web sayfası , / boot bölümündeki dosyaları doğrudan kaldırmanızı önerir ; bir süre için işe yarayabilir, ancak sonunda paketleri olan çekirdek sürümleri için eksik olan dosyaları yeniden oluşturan bir paketi güncelleyebilir, böylece alanınız tükenebilir.
kgrittn

Yanıtlar:


629

Çok fazla kullanılmamış çekirdeğin var. Son çekirdeğin dışındakileri kaldır:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Bunun için kısaca:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Çıkarma linux-image-x.x.x-xpaketi de kaldıracaktır linux-image-x.x.x-x-generic.

Başlıklar, /usr/srcağaç çekirdek modüllerini oluştururken kullanılır (özel nvidia sürücüsü ve sanal kutusu gibi). Eşleşen çekirdek paketi ( linux-image-*) kurulu değilse, çoğu kullanıcı bu başlık paketlerini kaldırmalıdır .

Yüklü tüm çekirdekleri listelemek için aşağıdakileri çalıştırın

dpkg -l linux-image-\* | grep ^ii

Geçerli çalışan çekirdeği hariç, kaldırılabilecek tüm çekirdekleri ve başlıkları gösterecek bir komut :

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

linux-headers-<some number>Veya ile başlayan tüm paketleri seçer linux-image-<some number>, yüklü paketler için paket adlarını yazdırır ve ardından geçerli yüklü / çalışan çekirdeği hariç tutar (zorunlu olarak en son çekirdek!). Bu, eski ve iş başında bilinen çekirdekleri çıkarmadan önce daha yeni bir çekirdeği test etme önerisine uyuyor.

Bu nedenle, çekirdekleri yükselttikten ve test etmek için yeniden başlattıktan sonra, diğer tüm çekirdekleri aşağıdakilerle kaldırabilirsiniz:

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

16
Harika cevap Başka bir bilgi parçası size yardımcı olacaktır: Hangisini kullandığınızı nasıl kesin olarak söyleyebilirim? Muhtemelen bunun sonuncusu olduğunu varsayamazsınız ... Düzenleme : Cevap sanki benziyoruname -a . Beklemede yeniden başlatmayı-yüklemeyi-yeni-çekirdek beklemede olmadığınızdan emin olmak için muhtemelen en iyisi (yaptığım gibi; ancak uname -a"en son" çekirdeği arasındaki uyumsuzluğa dikkat çekti ).
TJ Crowder

5
@ freddyb Tamam. Komutların , yüklü / önyüklenenlerin dışındaki çekirdekleri bastırdığını / kaldırdığını unutmayın .
Lekensteyn

9
Apt-get purge, karşılanmayan bağımlılıklar nedeniyle başarısız olursa, tavsiyeyi askubuntu.com/questions/171209/…
svandragt

11
Çok kapsamlı cevap ve hala çalışıyor ... ve hala 2014'te ihtiyaç duyuluyor. Biraz da GUI araçları tarafından otomatik olarak yapılmaması saçma.
allprog

6
@ byf-ferdy Çekirdek işletim sisteminin önemli bir parçasıdır, eğer en yeni sürüm bir şekilde donanımınızla tam olarak çalışmıyorsa, yine de önyüklemek için farklı bir tane seçebilirsiniz. Güzel bir özellik muhtemelen bir aydan daha eski tüm otomatik olarak yüklenen çekirdekleri kaldıracak bir şey olabilir (en son ikisi hariç).
Lekensteyn

217

Önyükleme bölümünüz dolu. Bu bir çekirdek güncellemesi olduğundan, bu dosyalar önyükleme bölümüne kopyalanacaktır, böylece temizlemeniz gerekir. Eski çekirdek görüntülerini tek bir komutla nasıl temizleyeceğinizi gösteren bir blog yazısı . Yöntemin temel bir özetini vereceğim. Çekirdeğinizin geçerli sürümünü yazdırmak için bu komutu kullanın:

uname -r

Ardından yüklediğiniz çekirdeğin en yeni çekirdeği olmayan çekirdeği yazdırmak için bu komutu kullanın:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Mevcut çekirdeğinizin listede olmadığından emin olun. Bunun nihai komuta çoğunluğunun nasıl olduğuna dikkat edin (aşağıdan). Bu eski çekirdekleri kaldırmak ve silmek için şu argümanları yönlendirmek isteyeceksiniz:

sudo apt-get -y purge

Şimdi bu son iki komutu bu kutsal olmayan karmaşa içinde birleştirerek istediğimiz her şeyi yapabiliriz:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Ve bu tek komut sizin için her şeyi halleder. Bunun kusursuz şekilde çalıştığını ancak internetteki kimseye asla güvenmediğini onaylayacağım. :) Daha fazla bilgi için, blog yazısı komutun her bir parçasının ne okuduğunu çok iyi bir şekilde açıklar; böylece, onu okumak ister.


bu ayrıca linux-libc-dev ile eşleşir: amd64
Frederick Nord

"linux-libc-dev: amd64" uygulamasının istemeden kaldırılması neden olur?
ConfusedStack

@ FrederickNord kafaları için teşekkürler. Bu düzeltildi. C programlarını derlemede bazı zorluklar doğurabilirdi.
saat

9
Komut iyi geliyor, ancak çalıştırdığımda bir şey yüklemek istediğimde elde ettiğim aynı hatayı alıyorum ve önyükleme dolu olduğundan yapamıyorum: ----------------- ----------- Aşağıdaki paketlerin karşılanmayan bağımlılıkları vardır: linux-image-extra-4.2.0-27-generic: Bağımlılar: linux-image-4.2.0-27-generic yüklenecek linux-image-extra-4.2.0-30-generic: Bağımlı: linux-image-4.2.0-30-generic ancak yüklenmeyecek
Alex

109
sudo apt-get autoremove

Bu komut işi otomatik olarak yapıyor.


7
Adından da anlaşılacağı gibi apt-get AUTOremove, sistemin elde etmeye çalıştığınız şeyi "en iyi tahminini" aldığı otomatik bir işlemdir. Sağduyulu sistem yönetimi yerine kullanılmamalıdır. Bu yaklaşımla ilgili sorun: Siz (veya bir güncelleme) bu bağımlılık listesinin bir parçası olan bir paketi kaldırırsanız, otomatik kaldırma işlevi bağımlılık listesindeki tüm diğer paketleri kaldırmak istiyor ve sizi masaüstünü çalışmadan bir sistemle bırakıyor (ve bazen de tamamen kırık bir sistemde bile).
Rinzwind

Referans: Yukarıdaki bu yorum için birçok kaynağın
1'i

7
linux-image-generic kuruluysa ve yeni çekirdekler açıkça yüklenmediyse, bu eski çekirdeği kaldıracaktır. Sağduyu, önce bunları okumadan sistemde herhangi bir değişiklik kabul etmemektir. Bu komutu kullanmadan önce sağduyu kullanılmışsa, o zaman sorun çıkmaz.
mchid

1
@Rinzwind - Bu komut eski 'linux başlıklarını' kaldırarak 250 mb disk alanımı boşalttı
Chinmaya B

3
Otomatik -boşluk, kullanım alanı dışında bir durum mevcut olmadan önce kullanılırsa çalışır . Bununla birlikte, apt'nin yeri dolduğunda ve iptal edildiğinde (ve kullanıcı nihayet sorunu fark ettiğinde), autremove veya apt veya çözüm tabanlı başka bir çözümü çalıştırmak için çok geç. Bu durumda, dpkg tabanlı çözümlerden birini deneyin.
user535733

40

Synaptic Package Manager, eski çekirdek görüntülerini kolayca seçmek ve kaldırmak için kullanılabilir. Synaptic Package Manager'ın ekran görüntüsü

Zaten Synaptic kurulmamışsa:

sudo apt-get install synaptic

Uygulamayı başlatın ve gösterilen seçenekleri seçin.

Tüm "linux-" paketlerini "2.6.x" sürümüyle vurgulayabilmeniz gerekir; burada x, / boot klasörünüzdeki dosyalara göre 31'den 38'e kadardır.

Bu linux paketlerin her birine sağ tıklayın ve "Tamamen Kaldırmak İçin İşaretle" seçeneğini seçin. Sonunda uygula düğmesine tıklayın. Bu, tüm dosyaları ve ilişkili tüm dosyaları kaldıracaktır. Kişisel /bootklasör artık biraz Sessizleştirme olmalıdır.


14.04'te yaşıyorum. Geçmişte bu durumu komut satırı üzerinden ele aldım, ancak bugün bu yöntemi denemeye karar verdim ... benim için, linux görüntülerim yüklü (el ile) altında, kurulmamış (yerel veya eski)
Ryan

8
Oh hayır. Synaptic'i yükleyemiyorum çünkü boş yer yok /boot!
John McGehee

@JohnMcGehee fsck ve ayrılık sizin için bu sorunu çözmelidir.
FlipMcF

25

Sorununla ilgili detaylı yazdığın için teşekkür ederim, bu beni doğru yöne yönlendirdi. Önceki çekirdek dosyaları saklamak faydalı olsa da, hepsini tek seferde kaldırabilirsiniz, bu yazıyı inceleyin:
Kullanılmayan Tüm Linux Çekirdek Başlıkları, Görüntüleri ve Modüllerini Kaldırma

Komut satırı ile yapılır. Bunu uzaktan kumanda ile yapıyorsanız, bir terminal oturumu açmak ve sadece yapıştırmak için WINSCP gibi bir şey kullanın, çok iyi çalışıyor.

İşte makale bağlantısından kopyalandı, makalenin tamamını okumanızı öneriyorum:

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

23

Bu eski bir soruya yeni bir cevap ama bu şeyi temizlemenin kolay bir yolu (ve daha fazlası) Ubuntu Tweak'i kurmak . To kurun :

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

o zaman "hademe" sekmesine giderek Ubuntu Tweak'i çalıştırabilirsin ve buradan üç tıklama meselesi var:

Ubuntu eski çekirdekleri için hademe çimdik

Güvenlik için son çekirdeği (asla bilemezsiniz) veya iyi bilinen bir çalışma çekirdeğini bırakmak daha iyidir; ama bu kolayca özelleştirilebilir.

Birçok aracı temizlemek için aynı aracı kullanabilirsiniz --- küçük resim önbelleğini veya TB önbelleğini temizlerseniz, gerektiğinde sistemin yeniden yapılandırması gerektiğini unutmayın.


Ubuntu tweak'i yüklemeye çalıştım ve ayrıca depo web sitesine girdim. Sadece 13.10 ve öncesi olduğunu söylüyor. 15.04 için güncellenmiş bir sürümünüz var mı?
JayCouture.com

@ JayCouture.com Sitedeki sürüm 14.04 içindir ("13.10 ve önceki sürümler" eski sürümlere bir bağlantıdır). 14.10 veya 15.04 için bir sürüm olup olmadığını görmezden geliyorum.
Rmano

19

dpkgDoğrudan paketleri kaldırmak için kullanarak sorunu çözmeyi başardım . Paketler hala listelenmesine rağmen, yer açmak dpkg -liçin dosyalar silinir /boot.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Bundan sonra apt-get -f installbağımlılık sorunlarımı düzeltti ve dünya ile her şey yolunda gitti.

Ancak bu cevabımı kabul etmeyeceğim, çünkü bedenimi arttırmam /bootmı yoksa başka bir şey yapmam mı gerektiğini bilmem gerekiyor .


Öncelikle ayrı / önyükleme bölümünüz olmamalı veya 100 MB çok küçük olduğundan boyutunu büyütmelisiniz.
psusi

1
Teşekkürler, ben silerim:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt

2
ve sudo dpkg --remove linux-image-3.5.0-28*görüntü için kontrol yoluyladf -h
TiloBunt

Teşekkürler, bu da bana hizmet etti. Ben (birkaç eski tanelerini kaldırıldı değil bir Şu anda kullanıyordum) ve daha sonra yaptığımız apt-get -f install. Ayrıca, daha sonra yapılacakları apt-get autoremove, muhtemelen gereksiz olanları çıkarmak için ihmal etmeyin .
Yajo

15

Ayrı / önyükleme bölümü kullanmayı bırakabilir, daha sonra orada bu kadar sınırlı bir alana sahip olmazsınız. Bunu yapmak için, bölümü sökün, daha sonra başka bir yere yerleştirin ve oradaki tüm dosyaları kök bölümünüzdeki / boot dizinine kopyalayın, ardından / etc / fstab dizinindeki girişi kaldırın ve grub'u yeniden yükleyin. Örneğin (doğru bölümü kullanmanız gerekecek):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Daha sonra eski / önyükleme bölümünü silmek için gparted kullanabilir ve bu alanı kullanmak için muhtemelen kök bölümünü genişletebilirsiniz. Kök bölümünü genişletmek için, canlı alandan önyükleme yapmanız ve boş alanın hemen sağa doğru olması gerekir. Eğer / boot bölümü şu anda root bölümünün solundaysa, o zaman önce root bölümünü sola kaydırmanız, sonra uzatmanız gerekir, ancak bu çok, çok uzun bir zaman alabilir, bu yüzden buna değmeyebilir. sorun.


6
/ Boot dışında her şey şifreli olduğundan benim için ana bölümüme taşımak / önyükleme yapmak benim için bir çözüm değildir. Bunu benim sorumdan bilemezsin, üzgünüm.
user6722

Bu, yukarıdaki çözümler önyükleme hacminde hiç boşluk olmadığından veya art arda "boş alan" sorununu yaşarsanız çalışmazsa iyi bir çözümdür. Lütfen ilk önce neden bazen bir / boot bölümü olması gerektiğini okuyun: ( help.ubuntu.com/community/DiskSpace )
svandragt

@svandragt, temelde bugünlerde bir / boot bölümüne ihtiyaç duymak için hiçbir neden kalmadı. Soldaki tek şey, eğer biyosun kırılmışsa ve diski göremiyorsa ve son on yılda yapılan herhangi bir makinenin böyle bir sınırı yoktur. Baskın veya LVM kullanmak gibi diğer eski durumlar artık grub2 tarafından doğru bir şekilde ele alınmaktadır.
psusi

Ayrı bir önyükleme bölümü olması için birkaç neden var. Ancak faydaların artan karmaşıklık kurulumuna değeceğinden emin değilim. 1. İşletim sistemi ext2 üzerinden daha hızlı önyüklemeden yararlanabilir. 2. RO olarak montaj / önyükleme ile güvenlik arttırılabilir. (rootkit'ler, vs.), hatta os çalışma zamanında takılı kalmazlar. 3. grub (1) hala ext4 ile ilgili bazı sorunlar yaşadı. 4. Lvm (grubv1) çalıştırmak için gereklidir. Bu, varsayılan ubuntu kurulumu için geçerli değildir.
David Cahill

lsblkhangi bölümün ne olduğunu belirlemek için kullanılabilir
Bay Mor

9

Yukarıdaki cevaplardan en iyisini alarak, denenmiş ve gerçek yaklaşımım şudur:

  • uname -a Çalışan çekirdeği bulmak için.
  • dpkg -l linux-{headers,image}-\* | grep ^iişu anda yüklü olan tüm çekirdek paketlerini listelemek için. Bu, çalışan çekirdeği de içerecektir.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}Eski çekirdekleri çıkarmak için. xx,yy,zzKaldırmak istediğiniz çekirdek yapılarının bir listesiyle değiştirin ; bunlar, şu anda çalışan çekirdekten daha eski olan önceki komut tarafından listelenen yapıların tümü. Çalışmakta olan çekirdeği kaldırmadığınızdan emin olun; sisteminiz önyüklenebilir hale gelecektir . Çekirdek sürümünü 3.16.0, sisteminizde yüklü olandan farklı olarak değiştirmeniz gerekebilir .
  • İsteğe bağlı olarak, ek bir işlem yapın; sudo apt-get autoremovebu, eski çekirdeğin artık mevcut olan tarafından artık gerekmeyen artık bağımlılıklarını ortadan kaldırarak biraz daha fazla alan açar.

Yüklü çekirdek sürümleri olmayan başlık dosyalarınız olabilir veya tam tersi - bu sürümlerin tümünü komuta dahil etmeniz yeterlidir. APT, bazı paketlerin yüklenmediklerinden kaldırılamamasından şikayet edecek, ancak bu zarar vermeyecektir.

Bir şey başarısız olursa ...

  • Apt komut nedeniyle başarısız olursa cihaz üzerinde kalan boşluk hatası yerine gelen dpkg komutu kullanın: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Dpkg komutu linux-image, linux-headerspaketlerin aynı sürümdeki paketlerin gerektirdiği için hala çalışmazsa (aynı zamanda kaldırmak istediğiniz), dpkg bunu çözmede başarısız olmuş olabilir. dpkg -lKomut satırında herhangi bir paket adı sonekinin çıktısını yeniden inceleyin ve belirtin. Örneğin, sistemlerimden birinde nihayetinde çalışan komut buydu sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Başka bir hata alırsanız yardım isteyin; düşündüğünüzden farklı bir sorunla karşılaşabilirsiniz.

@ zamanki durumda (en az bir ben içine yayınlanmaya devam) user535733 hala var olduğunu bazı boşluk /bootbaşka çekirdek paketi için yeterli değildir. Bu durumlarda yukarıdakiler iyi sonuç verdi. Buna karşılık, ilgili dpkgkomutu eklemek için çekinmeyin . purgeHayır, gelince , bu bir tür 'zorla kaldır' değil. Yaptığı şey, farklı olarak remove, yapılandırma dosyalarını da silmesi. / Çekirdek paketleri sürece hiçbir yapılandırma dosyası yüklemez removeve purgeçekirdek paketleri için de aynısını yapar.
user149408

İlgili dpkg komutuyla dördüncü mermi eklendi.
user535733

4

Benim için ikisi de apt-get purgeve dpkg --removehem başarısız oldu. Bu yüzden / boot ile gelen birkaç eski çekirdek imajını silmek zorunda kaldım rm -f.


4
Bu paketleri kaldırmak için iyi bir yol değil. Bu cevap, neden doğru yoldan çıkarılmanın başarısız olduğu konusunda çok açık olmamakla birlikte, bu bilginin verilip verilmediğinden (elbette ayrı bir soruda) sorunun nedenini çözmeyi deneyebileceğimize eminim.
thomasrutter

2
Başarısız olduğuna inanıyorum, çünkü /bootbölüm doluydu. Bu komutlar önce çekirdeği en son sürüme yükseltmeye ve No space left on deviceüretme sırasında initrd.img
çökmeye çalışır

1
UYARI, dosyaları doğrudan silmek sorunlara yol açabilir, çünkü linux bellenim paketinin bir güncellemesi, paket bilgilerine göre yüklendiğini düşündüğü her sürüm için initrd.img dosyasını yeniden oluşturabilir. Bakınız: askubuntu.com/questions/865577/…
kgrittn

1
teşekkürler, bu başka hiçbir şey çalışmadığında hayat kurtarıcı son çözümdür.
Jeff Puckett

4

Tüm çekirdekleri listele:

dpkg --list 'linux-image*'

Geçerli çekirdeği görüntüle:

uname -r

Geçerli olanları hariç tüm çekirdekleri listele :

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Mevcut çekirdeğinizin listede olmadığından emin olun.

Geçerli olanın dışındaki tüm çekirdekleri çıkar :

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Diğer şeyleri temizle:

sudo apt-get autoremove

Dosyaları yüklemek / kaldırmak için size hala disk alanı hatası veriyorsa , / OLD görüntüsünden birini doğrudan / boot dizininden kaldırın ,

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

NOT: Herhangi bir resmi silmeden önce lütfen mevcut çekirdek görüntüsünü tekrar gözden geçirin.


2

Eski çekirdek paketlerini zaten sildim (linux-headers ...)

linux-headers-*çekirdek değil Çekirdek paketleri adı verilen paketlerdir linux-image-*. Adı verilenler linux-headers-*çekirdek modülleri derlemek için geliştirme paketleridir: / boot dizininde yaşamazlar ve sisteminizin günlük kullanımları için gerekli değildirler.

İçinde / boot listelenen dosyaları yapmak birçok eski çekirdek görüntüleri içerir ( vmlinuz*) ve derlenmiş initrd'yi görüntüleri ( initrd.img*hala yüklü eski çekirdek paketleri çok şey var bir göstergesidir bu çekirdekler için).

Yüklü çekirdeklerinizi,

aptitude search ~ilinux-image

(Bunun da muhtemelen çekirdek olmayan paketleri döndüreceğini unutmayın).

Genellikle ikiden fazla çekirdeğin kurulmasına gerek yoktur - şu anda kullanımda olan ve bir öncekinin (geri dönüş olarak). Böylece, eskileri teker teker çıkarmaya başlayabilirsiniz:

sudo apt-get autoremove linux-image-3.2.0-23-generic

"3.2.0-23-generic" yerine, kaldırmak istediğiniz asıl çekirdek sürümünü kullandığınızdan emin olun! Ayrıca, gibi paketleri çıkarmayın linux-image-generic. Çalışmakta olan çekirdeği çıkarmamak için gerçekten dikkatli olmalısınız veya önyükleme yapamayacaksınız (Ubuntu sizi bu konuda uyardı veya uyarmayabilir).

Şu anda çalışan çekirdeğinizi aşağıdakilerle bulabilirsiniz:

uname -r

1

Bu sorunu yaşadım ve bazı initrd-img-xxxdosyaları / boot'dan manuel olarak kaldırdım ve bu eski sürümlerin üretilmeye devam etmesine ve /bootklasörü doldurmaya devam etmesiyle ilgili bir sorun vardı . Bunu düzeltmek için aşağıdakileri takip ettim:

  • Yer kazanmak için oluşturulan eski çekirdek sürümünü el ile kaldırdım.
  • Bir metin yapılandırma dosyasını superuser olarak düzenleyeceksiniz, bu yüzden aşağıdakileri bir terminale yapıştırın:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Çizgiyi bulun update_initramfs=yesve değiştirin update_initramfs=no. Dosyayı kaydedip çıkın, sonra çalıştırın:

    sudo dpkg --configure -a
    

Bu benim sorunumu çözdü. Bu bu bloga dayanıyordu

Eğer yeniden ne Umarım, her şey iyi olmalı ve daha sonra değiştirmeyi deneyebilirsiniz noiçin geri yesde update-initramfs.conf.


1

2017'de hala bu sorunun yeni yorumları ve cevapları olduğunu ancak burada çok yararlı olduğunu düşündüğüm bir cevabı eksik olduğunu gösteriyorum:

Günlük kullanımda basit bir masaüstü işletim sistemi olan Ubuntu, ayrı bir \ boot bölümü ile kurulmasına gerek yoktur ve bunun gibi bir şey "ortak bir kullanıcıya" bir şey sunmaz ... Bu yüzden bir çözüm \ boot bölümü olmadan yeni bir kurulumdur ve bu Asla böyle bir problemin olmayacak

Not: Cevabım kabul edilebilir cevaba silinebilir veya eklenebilir ... (bazı insanlara bu şekilde yardımcı olacağını düşünüyorum)



0

Yetenek veya sinaptikte "eski veya elle paketlenmiş bir bölüm" vardır. Orada eski linux paketleri olmalı.


0

İşlemi biraz daha kullanıcı dostu yapan aşağıya yazdığım bir bash betiği var.

YMMV - Nane 14 için yapıldı. Hala BASH öğrenmek, bu yüzden muhtemelen biraz sıkışık. Kendi risk altında kullanın, ancak benim için çalışıyor!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script

0

[Bir AskUbuntu noob olarak, itibar = 50'ye kadar yorum yapamam, bu yüzden aşağı oy verme.]

Sunucum da bunu yapıyordu. Kelimenin tam anlamıyla buradaki beklenen cevapların hiçbiri işe yaramadı çünkü bunlar / boot için çalışma odası gerektiriyor. Önyükleme bölümü doluysa, görüntülerden hiçbirini silmeden aniden sona erecek.

İşe yarayan tek şey mevcut görüntüyü gözden geçirmek, daha sonra sudo rm filenameen eski görüntü dosyaları için elle kullanmaktı (her birinin adında -3.16.0-30 vardı ). Bu yapıldıktan sonra sudo apt-get autoremove, işini yapması için gerekli kıpırdatma odası vardı. Bu sürümle ilgili bazı hataları vurguladı, örneğin: "depmod: FATAL: /boot/System.map-3.16.0-30-generic: Böyle bir dosya veya dizin yüklenemedi" ancak bu bekleniyordu.

Bittiğinde, dftekrar sağlıklı olduğunu belirtmek için / boot kullanımında% 42 geri döndü.


1
Aradığınız yazı askubuntu.com/questions/171209/…
muru

@muru Pekala, evet ... Orijinal posterin de bu tavsiyeye ihtiyacı olacağını öneriyorum. / Boot dolduğunda, onu düzeltmeye çalışan bu script versiyonları da / boot dolu olduğu için başarısız olur.
Justin Case,

Eh, benzer iki sorun var: a) sistemin diskinizin dolu olduğu konusunda uyardığı, ancak apt-getdevam etmek için yeterli alana sahip olduğu ve b) apt-getdisk fazla olduğu için başarısız olduğu yerlerde . Bu diğer yazı.
muru


0

Bu betiği farklı kaydet /usr/local/bin/remove_kernels.sh(çalıştırma izni vermeyi unutma sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Sonra tüm eski çekirdekleri kaldırmak için: sudo remove_kernels.sh


0

/ boot bölümü bazen biraz garip olabilir

doğrudan çekirdek dosyaları silmeye başlamayın.

Takip edilecek adımlar

  1. Şu anda yüklü olan çekirdeğin linux sistemi tarafından kullanıldığını kontrol edin

    uname -r

    bu, sistemde yüklü olan çekirdek görüntünün adını vermelidir

  2. Şimdi, sisteminizde yüklü olanlardan başka ek dosyaları silmeye başlayın

    apt-get remove linux-image-XXXXX

  3. Ayrıca başlık dosyasını da kaldırın

    apt-get remove linux-headers-XXXXX

  4. Ayrıca aptçalışmayı durdurduğu bir durum olabilir , bu durumda / boot konumuna geçin

    cd /boot

  5. Dosyaları manuel olarak kaldırmaya başlayın ancak çok dikkatli bir şekilde installed one'sçekirdek dosyaları sisteminizden silmeyi unutmayın .

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Eğer varsa doğru dosyaları temizledikten sonra kısmi yükleme yapar.

    apt-get -f install

  7. Önyükleme dosyaları el ile temizlendiğinde orada oturan fazladan dosyaları kaldırın

    apt-get autoremove

  8. Grub güncelle

    update-grub

  9. Son olarak sistem paketlerinizi güncelleyin

    apt-get update


-1

Daha kullanılmayan dosyaları kaldıramazsınız ve diğer bölüm / veya aynı cihaz üzerinde boş alan varsa, önyükleme bölümünün / yeniden boyutlandırma Eğer aralandı / GParted . (Kurulum medyasına da dahil edilmiştir.)

Uyarı : Bölmenin yeniden boyutlandırılması tehlikeli bir işlemdir, önemli verilerinizi yapmadan önce diğer medyalara kaydedin!


Küçük ayrı / önyükleme bölümlerinin çoğu mağduru, kurulum sonrasında LVM gerektiren 'tüm disk şifrelemesini' seçti. Bu çözüm, bu kullanıcılar için çözdüğünden daha fazla soruna neden olacak gibi görünüyor.
user535733
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.