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

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,这是输出(在提示符下回答是后)

(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 upgrade相同。

当我运行df时,我得到了/boot的错误:

/dev/sda1                    233191     230297         0 100% /boot


所以,我在其他地方读到我应该尝试清除旧内核。我检查了使用的内核:

$ 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).


如何在不影响安装的情况下释放或扩展引导?

评论

我认为@mreiter的答案可能是最好的:它使用程序包管理器,并且在其他程序包管理器命令失败时也有效,至少对我而言:askubuntu.com/a/205776/247661

help.ubuntu.com/community/RemoveOldKernels

@dskrvk是的!为什么“ Remove-Unused-Dependencies”不是默认值?

#1 楼

释放根文件系统上的空间

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

如果这样做不起作用,则可以转到/var/cache/apt/archives并手动从高速缓存中删除一些文件以获取一些空间,例如:

sudo rm linux-headers-*


如果您要删除此处的所有.deb文件,也不会造成损害需要-那就是apt-get clean所做的。如果再次需要它们,它们将由apt自动重新下载。

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

原始海报具有单独的/boot分区,这就够用了,从而导致apt系统无法正常工作。

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

sudo rm config-3.2.0-19-generic-pae


,例如,但无论如何都要使用其中一个内核版本的名称。这将释放一些空间(每个大约144K)。

如果需要更多空间,请分别删除旧的vmlinuzinitrdabiSystem.map文件,直到有足够的空间(对于我的i386之一,大约为22M)内核版本)。

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

然后继续执行apt-get install命令。如上所述,他们可能必须重新下载一些已删除的Deb,但如果这样,它将自动发生。当您再次使用apt时,请使用apt-get进行清理,以删除与要删除的文件相对应的软件包-这样,所有内容都将匹配。


/boot中的配置文件是内核配置内核团队使用它来构建同名的内核。除非您希望它作为参考或帮助您构建自己的内核,否则删除它应该是无害的。

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

评论


我尝试删除几乎所有配置。它似乎仍然没有足够的空间。里面的其他文件可以安全删除吗?我的根文件系统还没满,所以我不用担心。

– Strifey16
2012年8月2日在16:28



我用其他文件更新了我的答案以手动删除。在我看来,删除3.0.0.13和3.0.0.14集(包括abi文件的5个文件)就足够了。

– John S Gruber
2012年8月2日19:42

这样就解决了。我意识到这可能归结为手动删除文件,但是我总是不愿意使用apt安装的任何工具来执行此操作,因此我想我先在这里问一下。

– Strifey16
2012年8月4日19:13

不要使用sudo rm从/ boot中删除。相反,请使用sudo dpkg --purge删除一些旧的linux-image软件包。之后,使用sudo apt-get -f install修复损坏的依赖关系。

– jarno
16年2月9日在20:48

尽管有时系统可能已满,甚至dpkg也无法运行。但是可以使用rm。

– jarno
16年11月5日在17:27

#2 楼

就我而言,apt命令和dpkg命令无法完成,也无法删除。
安装2.6.32-56-server时自动更新失败。

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

cd /boot
du -sk *|sort -n


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

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

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%。

评论


在所有建议中,这对我最有帮助。非常感谢你!

–约书亚(Joshua F. Rountree)
15年3月28日在1:53

从/ boot删除文件只是可怕地破坏了apt和dpkg,因为缺少文件时,安装和删除脚本将使HARD失败。我看不到您如何使用它。

– FizxMike
16年6月11日在22:54

#3 楼

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

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


评论


也许有使用它的好处,但是@mreiter的建议对我有用,而这个建议却不起作用(在ubuntu的IRC支持频道上建议了这一建议。)

–亚伦·霍尔
15年3月28日在13:09



@AaronHall该答案仅包含mreiter答案的关键部分(最后一行),并且由于它不涉及标题的清理(因此在单独的/ boot分区中无济于事),因此答案要短得多。

–梅勒比乌斯
17年4月6日在10:27

有几点提醒:使用uname -r知道您不能删除的内核(当前正在使用的内核)。另外,当您完成删除旧内核后,请记住运行apt-get -f install来修复可能损坏的依赖项。

– Yajo
20 Jan 28'在9:25



#4 楼

我注意到引导目录中仍然存在一些旧版本的文件:

$ 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


源:删除dpkg标为rc的软件包

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


#5 楼

/var/tmp检查du -sh /var/tmp/的使用。可以删除该文件夹中的所有文件以腾出空间。

然后您可以运行以下命令删除旧内核:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub


评论


/ var / tmp与旧内核有什么关系?删除/ var / tmp中的所有内容并不总是安全的...

– fosslinux
18年4月27日在7:09



#6 楼

这就是我使用的方法:

sudo apt-get autoremove linux-image-xxxx


对所有旧内核执行此操作,仅保留最新的两个。

如果要自动删除旧内核并更新GRUB
,请参见:Ubuntu文档

评论


这应该是公认的答案。如果您不介意清理所有内容,则甚至无需指定Linux映像。

–Cyber​​Ed
16 Dec 22'在4:34

#7 楼

我发现唯一适合我的方法是使用Aptitude。

sudo aptitude


然后,当打开它时,通常会在底部说一些关于未满足的依赖项。您可以按字母g进行建议的移除。它将带您到一个页面,其中列出了将要发生的事情。

损坏的内核旁边应该有一个负号-。再次按g,它将删除损坏的内核。按q退出。然后,您应该能够使用sudo apt-get autoremove摆脱旧的内核并释放空间。

评论


这是唯一有效的答案。所有其他答案均不起作用,因为程序包管理器要先安装程序包,然后才能删除任何内容。

–machineaddict
18-09-24在14:16

#8 楼

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

评论


主文件夹不在/ boot中

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
13年5月17日在8:05

#9 楼

使用Synaptic软件包管理器。只需选择要删除的软件包,它会提示您也删除依赖于此的软件包。以我的经验,内核软件包总是以两个相互依赖的组(或更多,取决于您的计数方式)分组。通常,您可以使用“本地/过时的”过滤器快速找到旧的过滤器。

评论


例如。在(纯文本)服务器上,没有Synaptic。因此,对于服务器而言,这并不是真正可行的解决方案。

–nerdoc
17年8月31日在20:41

#10 楼

我一直不时与这个问题作斗争,但仍未见任何能真正完成全部工作的解决方案。在某些情况下,删除旧内核最终会导致依赖关系,这使我无法删除任何东西,而不得不从/ boot手动删除内核。但是,我仍然希望能够完成全部工作,因为我想象手动删除的内核会记录在某处,并且可能由于某些原因导致文件丢失,因为我坐在文件上执行rm -rf可能会导致将来出现问题。

因此,我根据此处的许多谷歌建议编写了此脚本,不需要进一步安装任何东西。对该脚本进行了几次修改,以支持我自己的某些“意外”情况。例如,在树莓派上运行此命令,update-grub可能不存在。而且在某些情况下,运行最新的更新程序时,服务器会陷入无法访问某些站点的IPv6。

该脚本指出是否必须强制删除由于依赖关系构建而完全陷入困境的内核,否则,如果它能以“正确”的方式做到这一点。

#!/bin/bash

ipv4="-o Acquire::ForceIPv4=true"

if [ "" = "4" ] ; then
    withip=$ipv4
    echo "Going IPv4 ($withip)"
fi

echo "Autoremove+Purge."
apt-get $withip -y -f autoremove --purge >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "Auto Removal Failed!"
fi

echo "Old dependency fix."
apt-get $withip -f -y install >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "That failed. So we'll try to make up to it during this process."
fi

echo "Now, going old kernel cleanup!"
kern=$(dpkg --list 'linux-image*'|awk '{ if (=="ii") print }'|grep -v `uname -r`)
hadErrors=0

for k in $kern
do
    echo apt-get -y purge $k
    apt-get $withip -y purge $k >/dev/null 2>&1

    if [ "$?" != "0" ] ; then
        echo "Failed apt-purge... Using plan B (--force-all -P)..."
        dpkg --force-all -P $k >/dev/null 2>&1
        echo "Rerunning stuff (apt-get -f -y install) for dependencies..."
        apt-get $withip -f -y install >/dev/null 2>&1
        if [ "$?" != "0" ] ; then
            echo "Still failing..."
            hadErrors=1
        fi
    fi
done

if [ "$hadErrors" = "1" ] ; then
    echo "I had errors. I should rerun this process, to see if there are more kernels that were left out after cleanup..."
    /usr/local/tornevall/cleankernel
fi

apt-get $withip autoremove
apt-get $withip update
apt-get $withip upgrade
apt-get $withip dist-upgrade

grb=$(which update-grub)
if [ "" != "$grb" ] ; then
    update-grub
else
    echo "Can't upgrade grub since update-grub is missing..."
fi


评论


您尝试过linux-purge吗?但是,它目前没有该Force IPv4的东西。

– jarno
19年8月14日在8:27

您的脚本会清除我系统中的linux-image-generic,这很糟糕。

– jarno
19年8月14日在8:35

当清理旧内核时,由于某种原因会将它们放回原位。自从我构建此脚本以来,至少对我来说就是这种情况。但是,当没有其他选项可以继续时,我将使用此脚本。通常,升级是由他们自己完成的,但是到了这一刻,当其他任何事情都不起作用时,这可能是一个不错的选择,因为通常会在清理后设置更多的内核。这是好是坏是可以讨论的。

– Tomas Tornevall
19-09-27在11:19

#11 楼

只需运行sudo apt-get -f autoremove就可以解决我的问题。

评论


您有100%的磁盘空间/启动使用率吗?

– fosslinux
18年4月27日在6:58

查看我的监视历史记录,似乎没有。 PS:我在Vagrant xenial上,我的启动文件系统/ dev / sda1安装在/

– forzagreen
18年4月29日在11:26

#12 楼

运行此命令:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a


来源:升级后出现此错误。请帮助

评论


sudo dpkg-reconfigure -a做什么?在Ubuntu 16上说未知选项-a

– Shivam Kotwalia
17年11月28日在7:59

对于这个问题,apt将无法删除内核软件包,因为删除过程本身会在/ boot中生成文件,该文件已经满了。这就是apt-get autoremove失败的原因。您正在寻找的问题是askubuntu.com/q/142926/158442,该文件已经列出了autoremove。

–muru
18-1-23在5:52



@muru我刚刚发布了它,因为它对我有用:D

– Ardi Nusawan
18年1月23日在14:06

我确定是的,我的意思是您的问题将是另一个问题,而不是这个问题。

–muru
18年1月23日在14:08

@muru哦,知道了:D

– Ardi Nusawan
18年1月23日在14:10

#13 楼

我已经看到了/ boot上的几篇文章已满,而dpkg清除旧的Linux内核并不能解决这些问题,因为apt-get -f install或apt-get -f autoremove会重新安装内核。

就我而言,至少还需要删除已签名和多余的软件包-内核是这些软件包的依赖项,因此请重新安装它们。通常,应在调用“安装”之前清除相关的内核软件包。如果您尝试在清除后立即进行升级,该错误消息应该说明哪些软件包与您刚刚清除的内核具有未满足的依赖性。

对我而言,以下策略有效:

#as sudo, repeat 1-3 for any old kernels; can be scripted
dpkg --force-all -P linux-image-4.4.0-112-generic 
dpkg --purge linux-image-extra-4.4.0-112-generic
dpkg --purge linux-signed-image-4.4.0-112-generic
apt-get -f install #dependency resolution didn't have work to do for kernel packages
apt-get autoremove --purge -f 
apt-get autoclean
apt-get upgrade


#14 楼

安装这样的linux-purge工具。

然后在终端中运行:

sudo linux-purge --clear-boot --fix


然后继续通过例如
<>删除内核br />
sudo linux-purge --keep 1 --choose


额外:

如果要使用linux-purge进行无人值守的内核删除,而不是使用无人值守的升级,则应通过以下方式禁止删除未使用的东西:编辑/etc/apt/apt.conf.d/50unattended-upgrades,并设置一个systemd服务,以便在需要时执行

/usr/local/bin/linux-purge --auto-only --keep 1 --yes




#15 楼

/ boot 100%充满时解决问题的简单步骤:
这是一篇非常好的文章:
https://gist.github.com/ipbastola/2760cfc28be62a5ee10036851c654600
TL / DR :
确定已安装的Linux映像:
dpkg -l linux-image-* | awk '/ii/{print }'

,选择一个不是您当前的内核,并从启动中删除相应的文件:
sudo rm /boot/*-OLD_KERNEL_IMAGE_VERSION-*

示例:
sudo rm /boot/*-5.4.0-31-*

修复“部分安装”:
sudo apt -f install

让我们做一些清理:
sudo apt autoremove ; sudo apt clean

更新Grub:
sudo update-grub