/ bootのディスク容量が少ないためアップグレードできません


123

私はしようとしますdo-release-upgrade が、それから私は得る:

十分な空きディスク容量がありません

アップグレードは中止されました。アップグレードには、ディスク '/ boot'に合計25.7 Mの空き領域が必要です。'/ boot'に少なくとも25.7 Mの追加のディスク領域を解放してください。ごみ箱を空にし、「sudo apt-get clean」を使用して以前のインストールの一時パッケージを削除します。

出力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

ブート時にスペースが残らないのはなぜですか?の出力は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

出力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

出力を追加ls -l /bootし、uname -aあなたの質問に。
ジッピー

また、出力をdpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'質問に追加します。
ジッピー

ls -as /boot代わりに役に立つかもしれません。ファイルのサイズのみが含まれます。
adempewolff

ls -l / bootの出力はここに非常に長いので、pastebin pastebin.com/yM1aEJUx
クランプ

5
いいえそうではありません。それが問題の原因です。あなたの質問が実際に長くなりすぎている場合、誰かがそれを編集します。pastebinなどの外部サービスを使用すると、今後の参照のために質問の価値が損なわれます。
ジッピー

回答:


160

/ bootパーティションには古いカーネルがいっぱいです。それは時々それを行いますが、なぜそれが決して修正されないのか分かりません。古いカーネルが入ったパッケージがわかっている場合は、古いカーネルを簡単に削除できます。

まずuname -a、現在のバージョンを確認してください。

次に、次のコマンドを実行します。

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

このコマンドは、不要になったすべてのパッケージをリストします。私はそれらを自動的に削除するのは好きではありません。カーネルを削除することになると、私は管理するのが好きです。そのため、リストされているすべてのパッケージに対して次を実行します。

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

インターメッツォ

このintermezzoは、コマンドがどのように機能するかを詳細に説明し、で問題を修正しようとしますlinux-libc-dev:amd64。ほとんどのユーザーはこの段落をスキップできます。

  • dpkg -l 'linux-*' 「linux-」で始まる名前を持つすべてのパッケージを一覧表示します
  • sed '/^ii/!d; remove all lines that do *not* start withii`
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" 現在実行中のカーネルバージョンを見つける
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d 現在実行中のカーネルバージョン番号を含む行を除く、すべての行を削除します
  • s/^[^ ]* [^ ]* \([^ ]*\).*/\1/ 各行リストについて、パッケージ名のみ
  • /[0-9]/!d 数字を含まない行を削除します。

Frederick Nordの問題を修正するには、コマンドを次のように修正できると思います。

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

基本的に追加のフィルターを追加します。

  • / ^ linux-(headers \ | image)/!d linux-headersまたはで始まらないすべての行を削除しますlinux-image

/ Intermezzo

some-kernel-packageリストされているパッケージのいずれかで置き換えることができる場所。現在使用中のカーネルパッケージ(にリストされているuname -a)を削除しないように注意してください。sudo apt-get purge -y linux-headers-3.0.0-12

xargsコマンドを使用してさらに自動化できますが、私はそれが好きではありません。それは個人的なものです。ただし、これを行うコマンドは次のとおりです。

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

これは私の/bootように見えます。念のため、1つのスペアカーネル(2.6.38-11)と3.2.0-24が最新です。

$ 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

ファイルシステムの使用:

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

2
この溶液を重くでOzzyFrankで記事に触発されたubuntugenius.wordpress.com/2011/01/08/...
jippie

6
はい、なぜこれが問題なのですか?これは、ユーザーが処理するべきではありません。
イライジャリン

2
FWIW:これは、linux-libc-dev:amd64とも一致しました。少し寛大すぎるかもしれません。
フレデリックノール

4
It does that sometimes, not sure why it is never fixedUbuntuは、良くも悪くも、既存のパッケージのアップグレードとしてではなく、新しいパッケージとして通常の新しいカーネルを提供し、複数のカーネルをインストールしてそれらを自由に切り替えるオプションを提供することを決定しました。この仮定は、最新のカーネル(および新しいブートの問題が発生した場合のフォールバック)だけが必要であり、インストールされたカーネルを自分で管理したくない人の95%には適さないことに同意します。おそらく将来、Ubuntuはこの動作を変更するでしょう。今のところ、/ bootが大きいことを確認してください。
thomasrutter 14

1
@thomasrutterあなた(私やあなたが話している人々の95%のように)がこのバグが重要だと思うなら、ここで投票してください:bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692
FriendFX

46

sudo apt-get autoremove

私のためにトリックをしました、それはすべての未使用のカーネルパッケージを正常にクリーンアップしました。


3
これは正しくありません。man apt-getautoremove からは、一部のパッケージの依存関係を満たすために自動的にインストールされ、不要になったパッケージを削除するために使用されます。依存関係を満たすためにカーネルはインストールされず、アップグレード中にインストールされます。
dward

5
@neon_overloadトリックをしてくれたので、投稿しました。
トップレス

1
:それは自由に私のためにいくつかのスペースでした@dward autremove前に: /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot 後: /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot
ステファン・Rogin

6
[ディスクの空き容量が不足しています]ダイアログにこのタスクを実行するボタンがあります。これは、特にコマンドラインに慣れていない初心者ユーザーに役立ちます。
マーティンR.

1
私のOSを壊すことなくトリックをしました
Ruthvik Vaila

8

受け入れられた答えと同等です-別の(おそらく)より簡単な方法は、ubuntu-tweakツールをインストールすることです。ここからダウンロードできます。「管理者」に移動し、「古いカーネル」を選択してクリーニングします。数回クリックするだけで実行できます。(14.04デスクトップでテスト済み)

ここに画像の説明を入力してください


スペースが不足している状況は/boot常に発生するため、これは私のお気に入りのソリューションです。ワンクリックでジョブを実行するアプリケーションを簡単に実行できます。
s3m3n

2

ここでの他のGUI回答と比較して、この回答の利点は、ネイティブUbuntu Bashがサードパーティアプリケーションをインストールせずに使用されることです。

ZenityおよびBashベースのソリューション

Zenityは、リストを処理し、ラジオボタンで項目を選択するために、ターミナルに素敵なGUIインターフェイスを提供します

rm-kernels 1

ブートに使用した現在のカーネルは削除できず、リストに含まれていません。報告されるサイズは、/bootディレクトリに保存される量です。カーネルバイナリは他の領域にも存在するため、ディスクにはさらに多くのデータが保存されます。2017年7月27日注:ディレクトリ/usr/src/*kernel_version*/lib/modules/*kernel_version*は、現在も含まれています。

更新日を使用して発見されたstatコマンドを。私のシステムでは、これを使用してカーネルがブートされるたびにその日付が「タッチ」さます特定のカーネルバージョンが最後にブートされた時期を確認するにはどうすればよいですか?cronリブートスクリプト。ただし、システムでは、日付はカーネルのリリース日であり、最後にブートした日ではありません。

apt-get purge 中止する機会を与えます

パージされるすべてのものを表示し、回復されるディスクスペースの合計(やや誤解を招く)を確認する最後の機会が与えられます。

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] 

コード

名前の実行可能ファイルにこのコードをコピーrm-kernelsして/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

注:ファイルを作成するにはsudo権限が必要なので、次を使用します。

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

ファイルを実行可能にするには:

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

注:このスクリプトのサーバー(GUIではなくテキストベース)バージョンについては、「ブートメニューをクリーンアップするために古いカーネルバージョンを削除するにはどうすればよいですか?」を参照してください。


2017年7月28日の更新

各カーネルの計算されたサイズは、/boot/*kernel_version*合計で最大50 MBの5つのファイルから取得されました。式が変更され、とにファイルが含まれるように/usr/src/*kernel_version*なりました/lib/modules/*kernel_version*。各カーネルの計算サイズは約400 MBです。以下のための上記のコードrm-kernelsとは、rm-kernels-server更新されています。ただし、上記のサンプル画面はまだこれらの変更を反映していません。

デフォルトでは、duファイルがキャッシュにない場合は非常に遅くなる可能性があるため、linux-headersのファイルサイズを125 MB、linux-imageを220 MBに推定します。du任意のパラメーターをスクリプトに渡して、実際のサイズを取得します。

すべてのカーネルサイズの合計(削除できない現在実行中のバージョンを除く)がタイトルバーに表示されるようになりました。

各カーネルの最終アクセス日を表示するために使用されるダイアログボックス。この日付は、バックアップまたは同様の操作中にすべてのカーネルに対して大量に上書きされる可能性があります。代わりに、ダイアログボックスに変更日が表示されます。


あなたは素晴らしいです!本当にありがとう!あなたは私を幸せにしてくれた!
zhartaunik

0

シナプスパッケージマネージャーを介してカーネルを簡単に処理できます。ただし、最初に、ターミナルプロンプトで現在使用されているカーネルリリース名を知っておく必要があります。

linux@linux-desktop:~$ uname -r 4.4.0-75-generic そのため、少なくともこのバージョンでは変更しないでください。オープンシナプスと下図のようにクイックフィルタプレースホルダに記入を開始: ここに画像の説明を入力してください 今、あなたは削除し、次の操作を実行したいすべてのパッケージを選択することができます マークを完全に除去すると- >適用します。少なくとも最新の現在のカーネルパッケージと1つの前のカーネルを保持することをお勧めします。たとえば、この場合、linux-image-4.4.0-66-genericおよびlinux-image-extra-4.4.0-66-genericを安全に削除できますが、4.4.0-72を保持すること はもちろん、もちろん4.4.0-75



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.