由于 /boot 上的磁盘空间不足而无法升级

cla*_*amp 129 upgrade kernel disk-usage

我尝试这样做,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
Run Code Online (Sandbox Code Playgroud)

为什么启动时没有剩余空间?这是输出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
Run Code Online (Sandbox Code Playgroud)

的输出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
Run Code Online (Sandbox Code Playgroud)

jip*_*pie 168

您的 /boot 分区充满了旧内核。它有时会这样做,不知道为什么它永远不会被修复。如果您知道它们来自哪些软件包,您可以轻松删除旧内核。

首先检查uname -a以检查您当前的版本。

然后运行以下命令:

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

此命令将列出您不再需要的所有软件包。我不喜欢自动删除它们,我喜欢在删除内核时进行控制。因此,对于列出的每个包,请执行以下操作:

sudo apt-get -y purge some-kernel-package
Run Code Online (Sandbox Code Playgroud)

间奏曲

此间奏曲更详细地描述了命令的工作方式并尝试解决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'
Run Code Online (Sandbox Code Playgroud)

它基本上添加了一个额外的过滤器:

  • /^linux-(headers\|image)/!d 删除所有不以linux-headers或开头的行linux-image

/间奏曲

哪里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
Run Code Online (Sandbox Code Playgroud)

这是我的/boot样子,一个备用内核 (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
Run Code Online (Sandbox Code Playgroud)

和文件系统使用:

$ df -h /boot
Filesystem Size Used Avail Use% Mounted
/dev/sda5  228M  63M  154M  29% /boot
Run Code Online (Sandbox Code Playgroud)

  • 是的,为什么这是一个问题?这不应该由用户来处理。 (6认同)
  • `有时会这样做,不确定为什么它永远不会修复` Ubuntu 已经做出决定,无论好坏,将常规新内核作为新软件包提供,而不是作为对现有软件包的升级,以提供安装多个内核的选项并在它们之间随意切换。我同意这个假设不适合 95% 只想要最新内核(可能还有新引导问题的后备)以及不想自己管理已安装内核的人。也许将来 Ubuntu 会改变这种行为。现在,请确保您的 /boot 很大。 (4认同)
  • @thomasrutter 如果你(像我和你所谈论的 95% 的人一样)认为这个错误很重要,请在这里投票:https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug /1183692 (3认同)
  • 该解决方案的灵感来自 OzzyFrank 在 http://ubuntugenius.wordpress.com/2011/01/08/ubuntu-cleanup-how-to-remove-all-unused-linux-kernel-headers-images-and 上的一篇文章-模块/ (2认同)
  • FWIW:这对我来说也匹配 linux-libc-dev:amd64。所以它很可能有点过于慷慨了。 (2认同)

top*_*ess 51

sudo apt-get autoremove
Run Code Online (Sandbox Code Playgroud)

对我有用,它成功清理了所有未使用的内核包。

  • 在“可用磁盘空间不足”对话框中应该有一个按钮来执行此任务。这将特别有助于不熟悉命令行的新手用户。 (8认同)
  • @neon_overload 我刚刚发布它是因为它对我有用。 (5认同)
  • 这是不正确的。from `man apt-get` autoremove 用于删除自动安装的软件包,以满足某些软件包的依赖关系并且不再需要这些软件包。不会安装内核以满足依赖项,它们是在升级期间安装的。 (3认同)
  • 在不破坏我的操作系统的情况下做到了这一点 (2认同)

Yix*_*ing 8

相当于接受的答案——另一种(可能)更简单的方法是安装该ubuntu-tweak工具,可以从这里下载。转到“管理员”,然后选择“旧内核”进行清理。只需点击几下即可完成。(在 14.04 桌面上测试)

在此处输入图片说明