升级时没有足够的可用磁盘空间


142

尝试进行日常更新时,我在软件更新程序中遇到错误。它说:

The upgrade needs a total of 25.3 M free space on disk `/boot`.
Please free at least an additional 25.3 M of disk space on `/boot`.
Empty your trash and remove temporary packages of former installations 
using `sudo apt-get clean`.

我尝试在sudo apt-get clean终端中输入内容,但仍然收到消息。我阅读的所有页面似乎都是针对经验丰富的Ubuntu用户的。我正在运行Ubuntu 12.10。我想升级到13.04,但明白我必须先完成这些。

这是输入cat /etc/fstab终端的输出:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ubuntu-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=fa55c082-112d-4b10-bcf3-e7ffec6cebbc /boot           ext2    defaults        0       2
/dev/mapper/ubuntu-swap_1 none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
matty@matty-G41M-ES2L:~$ 

输出df -h

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu-root  915G   27G  842G   4% /
udev                     984M  4.0K  984M   1% /dev
tmpfs                    397M  1.1M  396M   1% /run
none                     5.0M     0  5.0M   0% /run/lock
none                     992M  1.8M  990M   1% /run/shm
none                     100M   52K  100M   1% /run/user
/dev/sda1                228M  222M     0 100% /boot
matty@matty-G41M-ES2L:~$ 

dpkg -l | grep linux-image给出:

ii linux-image-3.5.0-17-generic 3.5.0-17.28 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-18-generic 3.5.0-18.29 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-19-generic 3.5.0-19.30 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-21-generic 3.5.0-21.32 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-22-generic 3.5.0-22.34 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-23-generic 3.5.0-23.35 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-24-generic 3.5.0-24.37 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-25-generic 3.5.0-25.39 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
ii linux-image-3.5.0-26-generic 3.5.0-26.42 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP
iF linux-image-3.5.0-28-generic 3.5.0-28.48 i386 Linux kernel image for version 3.5.0 on 32 bit x86 SMP

1
另外,/ etc / fstab的内容可能会有所帮助。看起来/ boot是安装在单独的分区上的。
Chuck R

1
就像说@Githlar一样,您的fstab可以为我们提供有关高清分区的信息。
ssoto

1
fstab是一个文件,其中包含有关在引导计算机时挂载的分区的信息。要显示此文件的内容,请输入cat /etc/fstab终端。复制输出并将其添加到您的问题(您可以编辑您的问题)。此外,复制的输出df -hdpkg -l | grep linux-image
Alaa Ali

1
您的问题是分区中所有多余的linux-image...文件都/boot用完了空间-分区上只有6MB的可用空间。sudo dpkg -P purge 'older_linux_image_filename'删除除最新版本= 3.5.0-28.48和3.5.0-26.42以外的所有版本。这应该允许您进行更新/升级。
douggro

2
我只需要跑来sudo apt-get autoremove解决这个问题。
Juampy NR

Answers:


192

注意:这个答案比起提供最好/最简单的删除旧内核的方式更像是一种“解释”。有关删除旧内核的最佳/最简便方法,请查看其他答案。

好的,从/etc/fstab您发布的输出来看,您似乎/boot已安装在一个单独的分区上,而从的输出来看df -h,该分区已满。这是因为安装了不需要的旧内核。您可以通过查看dpkg -l | grep linux-image发布的输出来说明这一点,在这里您可以看到多个具有不同版本的“ linux-image ”。我们需要删除旧版本。

首先,我希望您uname -r在终端中运行该命令,这将向您显示当前使用的内核版本。我们永远都不想删除该内核版本。该命令将说出这样的内容。记下该数字!以下命令将假定您正在运行的内核。3.5.0-26-generic26

删除旧内核版本的命令是:

sudo apt-get purge linux-image-x.x.x-xx-generic

...其中x字符是数字。因此,在您的情况下,因为您有很多旧版本(17、18、19等),我们将必须为每个版本运行此命令,如下所示:

  • sudo apt-get purge linux-image-3.5.0-17-generic
  • sudo apt-get purge linux-image-3.5.0-18-generic
  • sudo apt-get purge linux-image-3.5.0-19-generic

...等等。但是,有一种方法可以通过一个命令完成所有这些操作。命令是这样的(不要运行命令!请阅读以下内容。):

sudo apt-get purge linux-image-3.5.0-{17,18,19,21,22,23,24}-generic

此命令将删除括号中提到的版本。由于以下原因,我未包含版本25、26和28:

  • 显然没有包括26,因为这是您当前正在运行的内核版本!那是我们从命令中获得的版本uname -r,还记得吗?我们永远都不想删除它!
  • 不包括28,因为这是您的升级要升级到的版本(您可以从其iF旁边的状态看出来,这意味着它是“一半配置的”)。
  • 不包括25,因为通常最好保留至少一个旧版本。因此,由于您正在运行26,所以我们将保留25,因此我们不会在上面的命令中包括它。

因此,如果最后输入的数字uname -r是26(或28,甚至25),则可以安全地运行上述命令。在提示时输入密码,然后y在询问时键入。这将显示很多行,并最终返回到命令提示符(在您的情况下为matty@matty-G41M-ES2L:~$),希望没有错误。完成后,df -h查看最后一行,以开头/dev/sda1。您应该发现它现在有更多空间,并且使用的百分比小于以前的100%。现在,您可以再次进行更新。


1
有效!!!非常感谢!额外的问题:当我第一次下载Ubuntu时,我不小心删除了家庭区域中的“ pictures”文件夹。因此,侧面没有“图片”标签。我只是通过创建一个名为“图片”的文件夹来解决这个问题,但是它没有显示在侧栏中。你知道怎么去那里吗?我尝试单击并拖动,但无济于事。@Alaa
carmatt95

3
别客气!对于另一个问题,请创建另一个问题,我会回答。这样,正在寻找该问题的人们可以找到它。
Alaa Ali

13
我希望我每次回来引用它时都可以投票赞成……到现在它已经很多了。
sevenseacat 2014年

4
是的,再次回到这里引用相同的内容。您可能认为我现在会记得它。
sevenseacat 2014年

2
清除所有旧内核的更简洁命令是:sudo apt-get autoremove --purge
2016年

42

您可以安装Ubuntu-Tweak.To要安装请按照以下步骤操作:

打开终端。使用以下命令添加所需的存储库:

sudo add-apt-repository ppa:tualatrix/ppa

使用以下命令更新软件列表:

sudo apt-get update

最后,使用以下命令安装Ubuntu Teak:

sudo apt-get install ubuntu-tweak

之后,打开破折号并输入“ ubuntu tweak”。

然后转到janitor选项卡并选择AppsPersonal然后System选中复选框并单击右下角的clean按钮。


9
这比弄乱命令行并尝试删除所有内核(如果它们甚至具有不同的版本(不仅是-32结尾)以及-extra数据包)不是最新的要好。Ubuntu的调整为我节省了5分钟,谢谢!
POMATu 2014年

更方便。
2014年

我无法添加PPA,但是我.deb从proyect的网站ubuntu-tweak.com
Luigi Siri

无需在ubuntu 14.04上添加PPA
Edward Torvalds

1
@edwardtorvalds当然,您可以安装它而无需在.deb软件包14.04和14.10上通过软件包添加其PPA ,但这并不是最可取的。您要通过其PPA安装该软件的原因是因为它可以确保更新。
αғsнιη

17

@Lekensteyn在他对如何释放/ 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]+//')") 

这应该释放出足够的空间供您升级。



3

在我的家庭Ubuntu系统上,我采用与发布的方法类似的方法,但是它更简单一些,并且清除了更多的空间,包括内核头文件等。

  1. 我检查我正在使用的正在运行的内核,因为必须不干扰它。

    uname -a
    
  2. 然后,我查看/ boot,以删除所有与运行中的内核直接相关的所有与内核相关的文件。这列出了我要删除的所有内核版本,例如:3.5.0-17、3.5.0-18

    ls -l /boot
    
  3. 现在,在清除列表中获取第一个内核版本,并找到与其相关的所有软件包。

    dpkg -l | grep 3.5.0-17
    
  4. 从系统中清除它们

    sudo apt-get purge <list of packages separated by spaces>
    
  5. 返回3并在我的清除列表中选择下一个内核版本。

  6. 完成了


1

我遇到此错误,这篇文章对您有所帮助。

我曾经df -h确定该uname -r版本的引导已满,然后使用purge上面列出的字符串删除了旧内核。单内核清除工作,多没有(对我来说)。

我在Windows中找到了文件;我无法删除它们,必须使用终端,但是它确实向我显示了其中的旧版本。

我不知道为什么/ boot(sda2)完全被分区,以及为什么它是如此之小。但是现在我可以再次使用Ubuntu更新程序了。

我也有一些小的成功sudo apt-get updatesudo apt-get upgradesudo apt-get clean,也尝试过免费软件Bleachbit。使用清除字符串,但不要在当前版本上使用。希望这对某人有帮助。


编辑:我认为您不必在清除字符串中添加“ -generic”
Brian P

0

您是否安装了未使用的旧内核映像软件包?这些会占用/ boot上的空间。我建议使用以下命令来检查已安装的内核软件包集:

dpkg -l "linux-image*" | grep "^i"

这应该概述安装的内核映像软件包集。对于那些没有被使用并且不需要恢复的linux-image软件包-例如,例如,我想在安装的活动版本之后保留至少一个内核版本,以进行恢复-否则,您可以使用喜欢的打包工具(如aptitude)删除任何此类未使用的软件包。

我还建议您查看相关的inux-headerslinux-image-extras(如果适用),linux-sourcelinux-tools软件包,这些软件包可以与任何未使用的linux-image软件包一起安装。


0

我怀疑会有很多人(如果有的话)遇到这个问题,但如果有人需要,我会将其放在此处以提供文档。

我的问题是,直到空间用完之前,我一直在编译不同的自定义内核。我必须清理空间的方法是进入我一直在使用的每个内核目录并运行一个sudo make clean

  • $ cd /usr/src 内核源所在的目录
  • $ cd linux-image-custom_kernel_name
  • $ sudo make clean

0

marianoju的答案确实很有帮助,除了我使用时出错了apt purge。我找不到强制选项。

结合较低级别的dpkg,我可以继续进行以下操作:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.