问题描述
当我尝试执行每日更新时,我在软件更新程序中发生错误。它说:
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
选项卡并选择Apps
,Personal
和System
复选框,然后单击右下角的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系统上,我遵循类似的方法发布,但它更简单一些,并清除更多的空间,包括内核头文件等。
-
我检查了我正在使用的内核,因为这是不干涉的。
uname -a
-
然后,我看着/boot目的是删除所有与运行内核无关的内核相关文件。这给了我想要删除的所有内核版本的列表,例如:3.5.0-17,3.5.0-18
ls -l /boot
-
现在我在我的清除列表中找到第一个内核版本,并找到与其相关的所有程序包。
dpkg -l | grep 3.5.0-17
-
从系统中清除它们
sudo apt-get purge <list of packages separated by spaces>
-
回到3并选择我的清除列表中的下一个内核版本。
-
完成
参考资料