/ Önyüklemedeki düşük disk alanı nedeniyle yükseltme yapılamıyor


123

Yapmaya çalışıyorum do-release-upgrade ama sonra alıyorum:

Yeterli boş disk alanı yok

Yükseltme iptal edildi. Yükseltme, '/ boot' diskinde toplam 25.7 M boş alana ihtiyaç duyar. Lütfen '/ boot' üzerine en az 25,7 M boş disk alanı boşaltın. Çöplerinizi boşaltın ve 'sudo apt-get clean' kullanarak eski kurulumların geçici paketlerini kaldırın.

Çıktı df:

                    237251272 214797108  10402504  96% /
udev                    488120         4    488116   1% /dev
tmpfs                   198676       668    198008   1% /run
none                      5120         0      5120   0% /run/lock
none                    496684         0    496684   0% /run/shm
/dev/sda1               233191    225867         0 100% /boot

Önyüklemede neden boşluk kalmadı? İşte çıktısı ls -as /boot:

total 221839
    4 .
    4 ..
  645 abi-2.6.32-34-generic-pae
  698 abi-2.6.35-30-generic-pae
  727 abi-2.6.38-12-generic-pae
  727 abi-3.0.0-12-generic-pae
  727 abi-3.0.0-13-generic-pae
  727 abi-3.0.0-14-generic-pae
  727 abi-3.0.0-15-generic-pae
  727 abi-3.0.0-16-generic-pae
  727 abi-3.0.0-17-generic-pae
  727 abi-3.0.0-19-generic-pae
  761 abi-3.0.0-20-generic-pae
  115 config-2.6.32-34-generic-pae
  128 config-2.6.35-30-generic-pae
  136 config-2.6.38-12-generic-pae
  140 config-3.0.0-12-generic-pae
  140 config-3.0.0-13-generic-pae
  140 config-3.0.0-14-generic-pae
  140 config-3.0.0-15-generic-pae
  140 config-3.0.0-16-generic-pae
  140 config-3.0.0-17-generic-pae
  140 config-3.0.0-19-generic-pae
  140 config-3.0.0-20-generic-pae
    5 grub
10773 initrd.img-2.6.32-34-generic-pae
13619 initrd.img-2.6.35-30-generic-pae
15365 initrd.img-2.6.38-12-generic-pae
16481 initrd.img-3.0.0-12-generic-pae
16487 initrd.img-3.0.0-13-generic-pae
16501 initrd.img-3.0.0-14-generic-pae
16476 initrd.img-3.0.0-15-generic-pae
16481 initrd.img-3.0.0-16-generic-pae
16478 initrd.img-3.0.0-17-generic-pae
   12 lost+found
  174 memtest86+.bin
  176 memtest86+_multiboot.bin
 1700 System.map-2.6.32-34-generic-pae
 1841 System.map-2.6.35-30-generic-pae
 2115 System.map-2.6.38-12-generic-pae
 2141 System.map-3.0.0-12-generic-pae
 2141 System.map-3.0.0-13-generic-pae
 2143 System.map-3.0.0-14-generic-pae
 2146 System.map-3.0.0-15-generic-pae
 2147 System.map-3.0.0-16-generic-pae
 2147 System.map-3.0.0-17-generic-pae
 2148 System.map-3.0.0-19-generic-pae
 2149 System.map-3.0.0-20-generic-pae
    2 vmcoreinfo-2.6.32-34-generic-pae
    2 vmcoreinfo-2.6.35-30-generic-pae
    2 vmcoreinfo-2.6.38-12-generic-pae
    2 vmcoreinfo-3.0.0-12-generic-pae
    2 vmcoreinfo-3.0.0-13-generic-pae
    2 vmcoreinfo-3.0.0-14-generic-pae
    2 vmcoreinfo-3.0.0-15-generic-pae
    2 vmcoreinfo-3.0.0-16-generic-pae
    2 vmcoreinfo-3.0.0-17-generic-pae
    2 vmcoreinfo-3.0.0-19-generic-pae
    2 vmcoreinfo-3.0.0-20-generic-pae
 4092 vmlinuz-2.6.32-34-generic-pae
 4347 vmlinuz-2.6.35-30-generic-pae
 4567 vmlinuz-2.6.38-12-generic-pae
 4675 vmlinuz-3.0.0-12-generic-pae
 4676 vmlinuz-3.0.0-13-generic-pae
 4681 vmlinuz-3.0.0-14-generic-pae
 4698 vmlinuz-3.0.0-15-generic-pae
 4700 vmlinuz-3.0.0-16-generic-pae
 4700 vmlinuz-3.0.0-17-generic-pae
 4703 vmlinuz-3.0.0-19-generic-pae
 4705 vmlinuz-3.0.0-20-generic-pae

Çıktı uname -a:

 Linux kitsch 3.0.0-17-generic-pae #30-Ubuntu SMP Thu Mar 8 17:53:35 UTC 2012 i686 i686 i386 GNU/Linux

Çıktı ekleyin ls -l /bootve uname -asorunuza.
jippie

Ayrıca çıktıyı dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'sorunuza ekleyin .
jippie

ls -as /bootbunun yerine yararlı olabilir. Sadece dosyaların boyutlarını içerecektir.
adempewolff

ls -l / boot çıktısı oldukça uzun burada yazıyor, bu yüzden burada bir pastebin pastebin.com/yM1aEJUx
kelepçe

5
Hayır öyle değil. Bu senin sorununun nedeni. Sorunuz gerçekten çok uzun sürüyorsa, birisi bunu düzenleyecektir. Pastebin gibi harici servislerin kullanılması, gelecekteki referans için sorunun değerini kıracak.
jippie

Yanıtlar:


160

/ Boot bölümünüz eski çekirdekleri ile doludur. Bunu bazen yapar, neden hiçbir zaman sabit olmadığından emin değilsiniz. Hangi paketleri girdiklerini biliyorsanız eski çekirdekleri kolayca kaldırabilirsiniz.

İlk uname -aönce mevcut sürümünüzü kontrol edin.

Sonra aşağıdaki komutu çalıştırın:

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

Bu komut artık ihtiyacınız olmayan tüm paketleri listeler. Onları otomatik olarak kaldırmayı sevmiyorum, çekirdekleri çıkarmaya gelince kontrolde olmayı seviyorum. Yani listelenen her paket için aşağıdakileri yapın:

sudo apt-get -y purge some-kernel-package

İntermezzo

Bu intermezzo, komutların nasıl çalıştığını ve bir sorunu çözmeye çalıştığını daha ayrıntılı olarak açıklar linux-libc-dev:amd64. Çoğu kullanıcı bu paragrafı atlayabilir.

  • dpkg -l 'linux-*' 'linux-' ile başlayan ismi olan tüm paketleri listeler.
  • sed '/^ii/!d; remove all lines that do *not* start withii`
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" Geçerli çalışan çekirdek sürümünü bulmak
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d Geçerli çalışan çekirdek sürüm numarasını içerenler dışındaki tüm satırları kaldırın
  • s/^[^ ]* [^ ]* \([^ ]*\).*/\1/ Her satır listesi için sadece paket adı
  • /[0-9]/!d Sayı içermeyen satırları kaldırın.

Frederick Nord'un sorununu gidermek için komutun şu şekilde değiştirilebileceğini düşünüyorum:

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

Temel olarak ekstra bir filtre ekler:

  • / ^ linux- (headers \ | image) /! d Başlamayan tüm satırları linux-headersveyalinux-image

/İntermezzo

some-kernel-packageListelenen paketlerden biriyle nerede değiştirilebilir. Mevcut kullanımda olan çekirdek paketlerini kaldırmadığınızdan emin olun ( uname -aörn. Tarafından listelenen ). sudo apt-get purge -y linux-headers-3.0.0-12vb.

Xargs komutu kullanılarak daha da otomatikleştirilebilir, ancak bundan hoşlanmıyorum. Bu kişisel bir şey. Ancak, işte böyle yapmak için komut:

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

Bu ne benim olduğunu /bootbir yedek ihtimale kernel (2.6.38-11) ve 3.2.0-24 akım olmak gibi görünüyor:

$ ls -l /boot
total 59388
-rw-r--r-- 1 root root   730545 Sep 13  2011 abi-2.6.38-11-generic
-rw-r--r-- 1 root root   791023 Apr 25 13:51 abi-3.2.0-24-generic
-rw-r--r-- 1 root root   130326 Sep 13  2011 config-2.6.38-11-generic
-rw-r--r-- 1 root root   140341 Apr 25 13:51 config-3.2.0-24-generic
drwxr-xr-x 3 root root     5120 May 27 17:46 grub
-rw-r--r-- 1 root root 20883146 Oct  1  2011 initrd.img-2.6.38-11-generic
-rw-r--r-- 1 root root 22474219 May  5 09:04 initrd.img-3.2.0-24-generic
drwxr-xr-x 2 root root    12288 Apr 16  2009 lost+found
-rw-r--r-- 1 root root   176764 Nov 27 11:00 memtest86+.bin
-rw-r--r-- 1 root root   178944 Nov 27 11:00 memtest86+_multiboot.bin
-rw------- 1 root root  2656297 Sep 13  2011 System.map-2.6.38-11-generic
-rw------- 1 root root  2884358 Apr 25 13:51 System.map-3.2.0-24-generic
-rw------- 1 root root     1369 Sep 13  2011 vmcoreinfo-2.6.38-11-generic
-rw------- 1 root root  4526784 Sep 13  2011 vmlinuz-2.6.38-11-generic
-rw------- 1 root root  4965776 Apr 25 13:51 vmlinuz-3.2.0-24-generic

Ve dosya sistemi kullanımı:

$ df -h /boot
Filesystem Size Used Avail Use% Mounted
/dev/sda5  228M  63M  154M  29% /boot

2
Bu çözüm ağır de OzzyFrank bir makalesinden ilham aldı ubuntugenius.wordpress.com/2011/01/08/...
jippie

6
Evet, neden bu bir sorudur? Bu işlemek için kullanıcı olmamalıdır.
Elijah Lynn

2
FWIW: Bu aynı zamanda linux-libc-dev: amd64 ile eşleşiyor. Bu yüzden biraz fazla cömert olabilir.
Frederick Nord

4
It does that sometimes, not sure why it is never fixedUbuntu, daha iyi veya daha kötüsü için, mevcut paketlere yükseltme yapmak yerine yeni paketler olarak düzenli olarak yeni çekirdekler sağlama, birden fazla çekirdek takma ve bunlar arasında geçiş yapma seçeneği verme kararını verdi. Bu varsayımın, yalnızca en son çekirdeği isteyen (ve yeni açılış problemleri için belki bir geri dönüş) isteyen ve yüklü çekirdeği kendileri yönetmek istemeyen insanların% 95'ine uymadığını kabul ediyorum. Belki de gelecekte Ubuntu bu davranışı değiştirecektir. Şimdilik, / boot'ınızın çok büyük olduğundan emin olun.
thomasrutter

1
@thomasrutter Eğer (benim gibi ve konuştuğunuz kişilerin% 95'i gibi) bu hatanın önemli olduğunu düşünüyorsanız, burada oy verin: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692
FriendFX

46

sudo apt-get autoremove

benim için hile yaptım, kullanılmayan çekirdek paketlerini başarıyla temizledi.


3
bu doğru değil. dan man apt-getautoremove otomatik olarak bazı paket için bağımlılıkları karşılamak için yüklenen paketleri kaldırmak için kullanılan ve o artık ihtiyaç vardır edilir. bağımlılıkları karşılamak için bir çekirdek kurulmaz, yükseltme sırasında yüklenir.
dward

5
@neon_overload Ben sadece hile yaptım çünkü benim için hile yaptı.
üstsüz

1
@dward Benim için biraz boşluk bıraktı: otorite öncesi: /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot sonrası: /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot
Stefan Rogin

6
Bu görevi gerçekleştirmek için "Yeterli boş disk alanı yok" iletişim kutusunda bir düğme olmalıdır. Bu özellikle, komut satırına aşina olmayan acemi kullanıcılara yardımcı olacaktır.
Martin R.

1

8

Kabul edilen cevaba eşdeğer - başka (muhtemelen) daha kolay bir yol ubuntu-tweakaracı yüklemek, buradan indirilebilir . "Kapıcı" ya gidin ve "Eski Çekirdek" i seçerek temizleyin. Birkaç tıklamayla yapılabilir. (14.04 masaüstünde test edilmiştir)

görüntü tanımını buraya girin


Alan yetersizliği olan /bootdurum her zaman gerçekleşir, bu yüzden bu benim en sevdiğim çözümdür - tek tıklamayla işi yapan uygulamayı çalıştırmak kolaydır.
s3m3n

2

Buradaki diğer GUI cevaplarıyla karşılaştırıldığında, bu cevabın avantajı yerli Ubuntu Bash’in üçüncü taraf uygulamaları kurmadan kullanılmasıdır.

Zenity ve Bash tabanlı çözüm

Zenity, bir listeyi işlemek ve radyo düğmeleriyle öğeleri seçmek için terminale hoş bir GUI arayüzü sağlar :

rm-çekirdekleri 1

Önyüklemekte olduğunuz çekirdek, kaldırılamaz ve listeye dahil edilmez. Bildirilen boyut, /bootdizine ne kadar tasarruf sağlanacağıdır . Çekirdek ikili dosyaları diğer alanlarda da bulunduğundan diskinize daha çok şey kaydedilir. 27 Temmuz 2017 not: Rehberler /usr/src/*kernel_version*ve /lib/modules/*kernel_version*şimdi de eklenmiştir.

Modifiye Tarihi kullanarak keşfedilir statkomutu. Sistemimde, o tarih kullanılarak çekirdeğin her açılışında tarihin "dokunulduğunu" ( belirli bir çekirdeğin en son ne zaman başlatıldığını nasıl anlarsınız? ) Cron yeniden başlatılmasını sağlar. Ancak, sisteminizde tarih, en son başlattığınız zaman değil çekirdek yayın tarihi olacaktır.

apt-get purge iptal etme şansını veriyor

Temizlenecek her şeyi görmek ve kurtarılacak toplam disk alanını (biraz yanıltıcı) görmek için son bir fırsat verilir:

The following packages will be REMOVED:
  linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
  linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
  linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
  linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
  linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
  linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
  linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
  linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
  linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
  linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
  linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
  linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n] 

Kod

Adlı bir yürütülebilir dosya için bu kodu kopyalayın rm-kernelsiçinde /usr/local/bin:

#!/bin/bash

# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove

# DATE: Mar 10, 2017. Modified Jul 28, 2017.

# NOTE: Will not delete current kernel.

#       With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
#       # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
#       First time for `du` 34 seconds.
#       Second time for `du` 1 second.

# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
#       By default `du` is not used and estimated size is displayed.

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    zenity --error --text "root access required. Use: sudo rm-kernels"
    exit 99
fi

OLDIFS="$IFS"
IFS="|"
choices=()

current_version=$(uname -r)

for f in /boot/vmlinuz*
do
    if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
    [[ $f =~ vmlinuz-(.*) ]]
    v=${BASH_REMATCH[1]}        # example: 4.9.21-040921-generic
    v_main="${v%-*}"            # example: 4.9.21-040921

    # Kernel size in /boot/*4.9.21-040921-generic*
    s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')

    if [[ $# -ne 0 ]] ; then    # Was a parameter passed?
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             # Kernel headers size in /usr/src/*4.9.21-040921*
             s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
        else
             s2="0M"            # Linux Headers are not installed
        fi
        # Kernel image size in /lib/modules/4.9.21-040921-generic*
        s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
    else
        # Estimate sizof of optional headers at 125MB and size of image at 220MB
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             s2="125M"
        else
             s2="0M"            # Linux Headers are not installed
        fi
        s3="220M"
    fi

    # Strip out "M" provided by human readable option of du and add 3 sizes together
    s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
    t=$(( t + s ))
    s=$s" MB"
    d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
    choices=("${choices[@]}" false "$v" "$d" "$s")
done

# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large

choices=(`zenity \
        --title "rm-kernels - Total: $t MB excluding: $current_version" \
        --list \
        --separator="$IFS" \
        --checklist --multiple \
        --text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
        --width=640 \
        --height=480 \
        --column "Select" \
        --column "Kernel Version Number" \
        --column "Modified Date" \
        --column " Size " \
        "${choices[@]}"`)
IFS="$OLDIFS"

i=0
list=""
for choice in "${choices[@]}" ; do
    if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
    ((i++))

    short_choice=$(echo $choice | cut -f1-2 -d"-")
    header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)

    # If -lowlatency and -generic are purged at same time the _all header directory
    # remains on disk for specific version with no -generic or -lowlatency below.
    if [[ $header_count -lt 3 ]]; then
        # Remove all w.x.y-zzz headers
        list="$list""linux-image-$choice- linux-headers-$short_choice"
    else
        # Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
        list="$list""linux-image-$choice- linux-headers-$choice" 
    fi

done

if [ "$i" -gt 0 ] ; then
     apt-get purge $list
fi

NOT: Dosyayı oluşturmak için sudo iznine ihtiyacınız var.

gksu gedit /usr/local/bin/rm-kernels

Dosyanın çalıştırılabilir kullanımını sağlamak için:

sudo chmod +x /usr/local/bin/rm-kernels

NOT: Bu betiğin bir sunucusu (Metin tabanlı, GUI değil) sürümüne bakın: Önyükleme menüsünü temizlemek için eski çekirdek sürümlerini nasıl kaldırabilirim?


28 Temmuz 2017 Güncellemeleri

Her bir çekirdeğin hesaplanan boyutu, /boot/*kernel_version*toplamda ~ 50 MB olan 5 dosyadan alınmıştır . Formül, /usr/src/*kernel_version*ve içindeki dosyaları içerecek şekilde değiştirildi /lib/modules/*kernel_version*. Her bir çekirdek için hesaplanan boyut şimdi ~ 400 MB'dir. Yukarıdaki kod rm-kernelsve rm-kernels-servergüncellendi. Ancak, yukarıdaki örnek ekranlar bu değişiklikleri henüz yansıtmamaktadır.

Varsayılan değer, 125 MB’daki linux başlıklarının dosya boyutunu ve 220 MB’da linux görüntüsünü tahmin etmektir, çünkü dudosyalar önbellekte olmadığı sürece acı verici bir şekilde yavaşlayabilir. Gerçek büyüklüğü kullanmak duiçin betiğe herhangi bir parametre iletin.

Tüm çekirdek boyutlarının toplamı (kaldırılamayan geçerli sürüm hariç) artık başlık çubuğunda gösteriliyor.

Her Çekirdeğin Son Erişim Tarihini görüntülemek için kullanılan iletişim kutusu . Bu tarih, yedekleme veya benzeri işlemler sırasında tüm çekirdeğin üzerine kitlenin üzerine yazılabilir. İletişim kutusu şimdi bunun yerine Değiştirme Tarihi'ni gösteriyor .


Harikasın! Gerçekten harika teşekkürler! Beni mutlu ettin!
zhartaunik

0

Sinaptik paket yöneticisi ile çekirdekleri kolayca kullanabilirsiniz. Fakat önce terminal isteminde geçerli olarak kullanılan bir çekirdek sürüm adı bilmelisiniz:

linux@linux-desktop:~$ uname -r 4.4.0-75-generic Yani en azından bu versiyona dokunulmamalısın. Sinaptik açın ve aşağıda gösterildiği gibi hızlı filtre yer tutucusunu doldurmaya başlayın: görüntü tanımını buraya girin Şimdi silmek istediğiniz tüm paketleri seçebilir ve aşağıdakileri yapabilirsiniz: Tamamen çıkarılması için işaretle -> Uygula . En azından güncel bir çekirdek paketini ve bir önceki çekirdeği tutmayı öneririm. Örneğin, bu durumda, linux-image-4.4.0-66-generic ve linux-image-extra-4.4.0-66-generic'den güvenle kurtulabilirsiniz , ancak 4.4.0-72 ve tabii ki 4.4.0-75 .



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.