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


我/启动分区命中100%,现在我无法升级。无法删除旧内核腾出空间

, , ,

问题描述

我的第一个问题是当我尝试apt-get更新/升级。在升级时出现以下错误:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

我试着运行apt-get install -f,这是输出(在提示符后显示yes)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

我试着运行apt-get autoremove,它给了我与apt-get升级相同的错误

当我运行df时,我得到了这个/boot:

/dev/sda1                    233191     230297         0 100% /boot

所以,我在其他地方读到我应该尝试清除旧的kernals。我检查了我曾与哪些kernals

dpkg -l linux-image-\* | grep ^ii

它返回

ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

所以,当我尝试删除最老的这个:

sudo apt-get purge linux-image-2.6.38-13-server

我收到错误:

Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

我怎样才能释放/扩展启动而不会搞乱我的安装?

最佳解决方案

释放根文件系统上的空间

要释放根文件系统上的空间,您可以尝试执行apt-get clean

如果这样做不起作用,你可以去/var /cache /apt /archives并从缓存中手动删除一些文件以获得一些空间,例如:

sudo rm linux-headers-*

如果需要的话,在这里删除所有的.deb文件并不会造成什么影响 – 这就是apt-get clean所做的。如果他们再次需要,他们将自动成为re-downloaded。

释放/boot文件系统上的空间

原始海报有一个单独的/启动分区,这是完整的,并防止apt系统工作。他有必要在那里腾出空间。

如果有足够的空间,请进入/boot并删除一个或两个配置文件:

sudo rm config-3.2.0-19-generic-pae

例如,但使用您打算删除的内核版本之一的名称。这将释放一点空间(每个约144K)。

如果你需要更多的空间单独删除旧的vmlinuz initrd,abi和System.map文件,直到你有足够的空间(我的一个i386内核版本大约22 megs)。

无论你做什么,都不要全部删除它们。您至少应该保留每种文件的最新两个匹配版本,针对您使用的每种内核。

然后继续使用apt-get安装命令。如上所述,他们可能必须将re-download中的某些debs删除,但如果这样会自动发生。当你需要重新工作时,通过使用apt-get清除与你删除的文件相对应的包 – 因此一切都匹配。


/boot中的配置文件是内核团队用来构建相同名称的内核的内核配置。除非你想要它的参考或帮助你构建你自己的内核,否则它应该是无害的。

最后,你需要从/boot分区中手动删除一个或两个旧的内核软件包,以便为新软件包腾出更多空间。

次佳解决方案

在我的情况下,apt命令和dpkg命令无法完成,无法删除。自动更新在安装2.6.32-56-server时失败。

我的第一步是确定要使用的空间,

cd /boot
du -sk *|sort -n

我有大约30个内核和支持文件。

我做了一个uname -a来获取正在运行的内核,我发现我在Linux备用版本2.6.32-43-server上,并且做了一个tar版本的6个未运行的版本,并且旧版本。

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

然后,我做了我所支持的rm -rf

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

我将这些命令作为示例展示,您将不得不决定要如何处理您的情况。

现在我在/boot上有一些空间,我可以运行

apt-get -f install 

清理2.6.32-56-server的失败安装。

然后我做了一个

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

这给我留下了我备份的空间。

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

为了清理,我可以运行:

apt-get autoremove

我重新启动,现在正在使用/boot的4%。

第三种解决方案

您可以使用dpkg而不是apt-get删除较旧的内核:

sudo dpkg -r linux-image-3.2.0-29-generic

第四种方案

这是我用来清理这个过程的过程。

我注意到在启动目录中还有一些旧版本的文件

$ ls /boot
vmcoreinfo-2.6.31-17-server

包管理器会列出旧版本

dpkg -l | grep linux-image

因此,我使用这个命令(autoremove也会删除我不想删除的更新图像)

sudo apt-get purge linux-image-2.6.31-17-server

我还剩下一些标题

dpkg -l | grep linux-headers

所以我这样做了:

sudo apt-get purge linux-headers-2.6.32-34

最后还有一个包裹,我无法用apt-get清除

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

感谢下面的线程,我用下面的方法做了:Remove a package marked as rc by dpkg

sudo dpkg --purge linux-image-2.6.28-11-server

第五种方案

你不能对软件包采取行动,但你可以对其他文件采取行动。首先,浏览您的主文件夹,查看是否有任何可删除的内容。如果没有,尝试将大量文件移动到另一个分区(或闪存驱动器),然后尝试sudo apt-get install -f清理程序包依赖性问题(很可能是通过dpkg安装了.deb文件),然后清除所有内核。一旦您安全地拥有至少10 MB,请尝试清除不需要的软件或文件。

参考资料

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