当前位置: 首页>>技术问答>>正文


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

, ,

问题描述

当我尝试执行每日更新时,我在软件更新程序中发生错误。它说:

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,但我仍然收到消息。我阅读的所有网页似乎都是针对有经验的Ubuntuers。我正在运行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

最佳解决方法

Note: this answer is meant to be more of an ‘explanation’ than providing the best/easiest way to remove old kernels. For the best/easiest way to remove old kernels, please review the other answers.

好的,从你发布的/etc/fstab的输出结果看来,你的/boot似乎安装在一个单独的分区上,并且从df -h的输出中,该分区已满。这是因为安装了不需要的旧内核;你可以通过查看你发布的dpkg -l | grep linux-image的输出来知道,你可以看到不同版本的多个”linux-image”。我们需要删除旧版本。

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

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

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状态下看到它,这意味着它是”half configured”)。

  • 不包括25,因为通常至少保留一个旧版本是很好的做法。因此,由于您运行的是26,我们将保留25,所以我们不会将其包含在上面的命令中。

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

次佳解决方法

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

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

sudo add-apt-repository ppa:tualatrix/ppa

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

sudo apt-get update

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

sudo apt-get install ubuntu-tweak

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

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

第三种解决方法

@Lekensteyn在他的answer中指出了删除所有未使用的内核和头文件(不包括当前正在运行的内核)的快速方法:如何在/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]+//')") 

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

第四种方法

这里有一个关于这个问题的错误报告:https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692

随时告诉你“这个bug是否也会影响你”,这样它可能会得到更多的关注。

第五种方法

在我的家用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. 完成

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/381.html,未经允许,请勿转载。