Vraag Kan niet upgraden vanwege lage schijfruimte op / boot


Ik probeer het te doen do-release-upgrade maar dan krijg ik:

Niet genoeg vrije schijfruimte

De upgrade is afgebroken. De upgrade vereist in totaal 25,7 M gratis   ruimte op schijf '/ boot'. Gelieve ten minste een extra 25,7 M van te bevrijden   schijfruimte op '/ boot'. Maak je prullenbak leeg en verwijder tijdelijke pakketten   van eerdere installaties met 'sudo apt-get clean'.

Output van 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

Waarom is er bij het opstarten geen ruimte meer? Dit is de uitvoer van 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

Output van 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

115
2018-05-27 14:48


oorsprong


Voeg de uitvoer toe aan ls -l /boot en uname -a op je vraag. - jippie
Voeg ook de uitvoer toe aan dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' op je vraag. - jippie
ls -as /boot kan in plaats daarvan nuttig zijn. Het bevat alleen de grootte van de bestanden. - adempewolff
de uitvoer van ls -l / boot is behoorlijk lang, dus hier is hier dus hier is een pastebin pastebin.com/yM1aEJUx - clamp
Nee dat is het niet. Het is de oorzaak van je probleem. Als uw vraag inderdaad te lang wordt, zal iemand deze bewerken. Het gebruik van externe diensten zoals pastebin zal de waarde van de vraag voor toekomstig gebruik verbreken. - jippie


antwoorden:


Uw / boot-partitie is gevuld met oude kernels. Het doet dat soms, niet zeker waarom het nooit wordt opgelost. Je kunt eenvoudig de oude kernels verwijderen als je weet in welke pakketten ze zijn binnengekomen.

Controleer eerst uname -a om uw huidige versie te controleren.

Voer vervolgens de volgende opdracht uit:

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

Met deze opdracht worden alle pakketten weergegeven die u niet langer nodig hebt. Ik vind het niet leuk om ze automatisch te verwijderen, ik hou ervan om de controle te hebben als het gaat om het verwijderen van kernels. Dus doe voor elk pakket het volgende:

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

Intermezzo

Dit intermezzo beschrijft in meer detail hoe de commando's werken en probeert een probleem op te lossen linux-libc-dev:amd64. De meeste gebruikers kunnen deze paragraaf overslaan.

  • dpkg -l 'linux-*' lijst alle pakketten die een naam hebben beginnend met 'linux-'
  • sed '/^ii/!d; remove all lines that do *not* start withII`
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" zoek de huidige draaiende kernelversie
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d Verwijder alle regels, behalve degene met het huidige versie-nummer van de actieve kernel
  • s/^[^ ]* [^ ]* \([^ ]*\).*/\1/ Voor elke regellijst alleen de pakketnaam
  • /[0-9]/!d Verwijder lijnen zonder nummers.

Repareren Het probleem van Frederick Nord Ik denk dat het commando als volgt kan worden gewijzigd:

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

Het voegt in feite een extra filter toe:

  • / ^ linux- (headers \ | image) /! d Verwijder alle regels die niet beginnen met linux-headers of linux-image

/Intermezzo

Waar some-kernel-package kan worden vervangen door een van de vermelde pakketten. Pas echter op dat u de kernelpakketten die momenteel in gebruik zijn niet verwijdert (zoals vermeld door de uname -a) bijv. sudo apt-get purge -y linux-headers-3.0.0-12 enz.

Het kan verder worden geautomatiseerd met de opdracht xargs, maar dat vind ik niet leuk. Het is een persoonlijke zaak. Hier is echter het bevel om dit te doen:

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

Dit is wat mijn /boot ziet eruit als één reserve kernel (2.6.38-11) voor het geval dat 3.2.0-24 actueel is:

$ 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

En bestandssysteemgebruik:

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

155
2018-05-27 15:28



Deze oplossing was sterk geïnspireerd op een artikel van OzzyFrank op ubuntugenius.wordpress.com/2011/01/08/... - jippie
Ja, waarom is dit een probleem? Dit moet niet door de gebruiker worden afgehandeld. - Elijah Lynn
FWIW: Dit paste ook linux-libc-dev: amd64 voor mij. Dus het kan heel goed een beetje te genereus zijn. - Frederick Nord
It does that sometimes, not sure why it is never fixed Ubuntu heeft de beslissing genomen om regelmatig nieuwe kernels als nieuwe pakketten aan te bieden in plaats van als upgrades voor bestaande pakketten, om de optie te geven om meerdere kernels geïnstalleerd te hebben en er naar believen tussen te schakelen. Ik ben het ermee eens dat deze veronderstelling niet geschikt is voor de 95% van de mensen die alleen de nieuwste kernel willen (en misschien een fallback in het geval van nieuwe opstartproblemen), en die zelf niet de geïnstalleerde kernels willen beheren. Misschien zal Ubuntu dit gedrag in de toekomst veranderen. Zorg er voor nu voor dat je / boot enorm is. - thomasrutter
@thomasrutter Als u (zoals ik en de 95% van de mensen waar u het over hebt) denkt dat deze bug belangrijk is, stem hier dan op: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692 - FriendFX


sudo apt-get autoremove 

heeft het voor mij gedaan, het heeft met succes alle ongebruikte kernelpakketten opgeschoond.


43
2018-04-24 09:18



dit is niet correct. van man apt-get autoremove wordt gebruikt om pakketten te verwijderen die automatisch werden geïnstalleerd om te voldoen aan afhankelijkheden voor een bepaald pakket en die niet meer nodig zijn. een kernel zou niet worden geïnstalleerd om afhankelijkheden te bevredigen, deze worden tijdens upgrades geïnstalleerd. - dward
@neon_overload Ik heb het net gepost omdat het de truc deed, voor mij. - topless
@dward Het heeft wat ruimte vrijgemaakt voor mij: voor autremove:  /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot  na:  /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot - Stefan Rogin
@clickstefan het eerste antwoord is correct. zie ook askubuntu.com/questions/89710/... - dward
Er moet een knop zijn om deze taak uit te voeren in het dialoogvenster "Onvoldoende vrije schijfruimte". Dit zou met name beginnende gebruikers helpen die niet bekend zijn met de opdrachtregel. - Martin R.


Gelijk aan het geaccepteerde antwoord - een andere (mogelijk) eenvoudigere manier is om het ubuntu-tweak tool, het kan worden gedownload van hier. Ga naar "Conciërge" en selecteer "Old Kernel" om op te ruimen. Het kan in een paar klikken worden gedaan. (getest op 14.04 desktop)

enter image description here


8
2017-11-14 07:00



Situatie met gebrek aan ruimte op /boot gebeurt er de hele tijd dus dit is mijn favoriete oplossing - eenvoudig te gebruiken applicatie die het werk met één klik doet. - s3m3n


In vergelijking met andere GUI-antwoorden hier, is het voordeel van dit antwoord native Ubuntu Bash wordt gebruikt zonder applicaties van derden te installeren.

Zenity and Bash-gebaseerde oplossing

Zenity biedt een mooie GUI-interface naar de terminal om een ​​lijst te verwerken en items te selecteren met Radio knoppen:

rm-kernels 1

De huidige kernel waarmee je hebt opgestart kan niet worden verwijderd en is niet opgenomen in de lijst. De gerapporteerde grootte is hoeveel er wordt opgeslagen /bootdirectory. Er wordt meer op uw schijf opgeslagen, omdat kernel-binaire bestanden zich ook in andere gebieden bevinden. 27 juli 2017: De mappen /usr/src/*kernel_version* en /lib/modules/*kernel_version* zijn nu ook inbegrepen.

De Aangepaste datum wordt ontdekt met behulp van de stat opdracht. Op mijn systeem is die datum "Geraakt" elke keer dat de kernel wordt geboot met deze (Hoe kom je erachter wanneer een specifieke kernelversie voor het laatst is opgestart?) cron herstart script. Op uw systeem is de datum echter de releasedatum van de kernel, niet de laatste keer dat u deze hebt opgestart.

apt-get purge geeft je de kans om te stoppen

U krijgt een laatste kans om alles te bekijken dat zal worden opgeschoond en de totale schijfruimte (enigszins misleidend) te zien die zal worden hersteld:

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] 

De code

Kopieer deze code naar een uitvoerbaar bestand met de naam rm-kernels in /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

NOTITIE: Je hebt sudo permissie nodig om het bestand aan te maken, gebruik dus:

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

Om het uitvoerbare bestand te gebruiken:

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

NOTITIE: Voor een server (op tekst gebaseerde, geen GUI) -versie van dit script, zie: Hoe verwijder ik oude kernelversies om het opstartmenu op te ruimen?


28 juli 2017 Updates

De berekende grootte van elke kernel is overgenomen /boot/*kernel_version* bestaande uit 5 bestanden van ~ 50 MB. De formule is gewijzigd en bevat de bestanden in /usr/src/*kernel_version* en /lib/modules/*kernel_version*. De berekende grootte voor elke kernel is nu ~ 400 MB. De bovenstaande code voor rm-kernels en rm-kernels-server is geupdate. De voorbeeldschermen hierboven geven deze wijzigingen echter nog niet.

De standaard is om de grootte van bestanden in te schatten voor linux-headers op 125 MB en linux-image op 220 MB omdat du kan pijnlijk traag zijn, tenzij de bestanden zich in de cache bevinden. Om de ware grootte te krijgen met du geef elke parameter door aan het script.

Het totaal van alle kernelgroottes (met uitzondering van de huidige actieve versie die niet kan worden verwijderd) wordt nu weergegeven in de titelbalk.

Het dialoogvenster dat wordt gebruikt om elke kernel weer te geven Laatste toegangsdatum. Deze datum kan massa overschreven worden voor alle kernels tijdens back-up of soortgelijke operaties. Het dialoogvenster toont nu de Aangepaste datum in plaats daarvan.


2
2018-05-10 02:54



Je bent geweldig! Heel erg bedankt! Je maakte me blij! - zhartaunik


Je kunt eenvoudig kernels verwerken via synaptic package manager. Maar eerst zou je een huidige gebruikte kernel-release naam moeten weten, in terminal prompt:

linux@linux-desktop:~$ uname -r 4.4.0-75-generic Dus deze versie moet je tenminste niet bijhouden. Open de synaptic en begin met het invullen van de quickfilter-plaatsaanduiding, zoals hieronder wordt getoond: enter image description here Nu kunt u alle pakketten selecteren die u wilt verwijderen en het volgende doen: Markeer voor volledige verwijdering -> Toepassen. Ik zou willen voorstellen om op zijn minst een recent huidig ​​kernelpakket en één vorige kernel te behouden. In dit geval kunt u bijvoorbeeld veilig van de hand doen linux-image-4.4.0-66-generic en linux-image-extra-4.4.0-66-generic, maar het is goed om te houden 4.4.0-72  en natuurlijk 4.4.0-75.


0
2018-05-07 10:39





Voor het gemak van de commandline:

https://github.com/erichs/bootnukem

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

Dan

sudo bootnukem --dry-run

0
2018-05-09 16:57





Werkt op Linux Mint 18.3 (gebaseerd op Ubuntu 16.04).

sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) --assume-yes

Bron: https://ubuntuforums.org/showthread.php?t=2248846&p=13146650#post13146650


0
2018-01-23 15:47