由于未满足依赖性而无法清理完整的/ boot


43

我收到一条错误消息,说明我的/ boot已满。由于磁盘已满错误或依赖项错误,尝试清理旧的图像文件似乎总是失败。有人可以解释我要去哪里了。

$ sudo apt-get autoremove
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-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

我用了

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

要得到

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

然后选择要删除的第一张图像

$ sudo apt-get purge linux-image-3.13.0-32-generic
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-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

请编辑您的问题,并输出sudo apt-get autoremovels /boot
muru

尝试Phrog的答案。使用uname -r命令找出您当前的内核版本,然后尝试删除其他内核。
muru

Answers:


64

在这种情况下,我将使用该dpkg工具强制删除某些内核软件包。 不建议将其用于一般用途,这有点危险,但是在这种情况下,如果未满足依赖项可能会有所帮助。

首先,找到启动系统的内核。当前正在加载的一个。打开终端(CTRL + ALT + T)并发出以下命令

uname -r

它将显示已加载的内核,您不应尝试删除该内核。

然后发出命令

ls /boot 

它将返回所有已安装的图像。选择一两个,然后尝试将其删除。尝试强行删除/清除它们。例如

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

您可以对其他图像进行相同操作,以释放一些空间。

然后,您可以尝试安装缺少的软件包,或者

sudo apt-get install -f 

尝试解决依赖性。

最后,发出“清理旧内核”命令

 sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

上面的命令将删除除当前加载的内核以外的所有内核。

因为您有一个单独的/ boot分区,所以请记住您需要跟踪其空间并经常进行清理(频率取决于/ boot的空间)


1
嗨,当我尝试删除它们时,我得到一个错误sudo dpkg --force-all -P abi-3.13.0-32-generic dpkg:警告:忽略删除不是abi-3.13.0-32-generic的请求已安装
菲利普·霍华德

9
这个工作对我来说,一个修改:删除与内核映像之后dpkg,我还得跑sudo apt-get -f autoremove得到apt-get停止抱怨未满足的依赖。否则,sudo apt-get -f install显然一直试图重新安装所有我用删除的内核映像dpkg,这些映像显然/boot又被填满了。
mdunsmuir

4
强制清除并apt-get -f autoremove在上面的@mdunsmuir中添加注释后,它仍然希望在上述任何清理操作期间安装所有旧内核。有没有办法告诉它忽略不相关的依赖关系并删除一个完整的旧内核?
NKijak

3
我想补充一点,我还必须使用卸载其他功能sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic。否则,这些额外功能仍取决于实际映像,并且该-f标志将导致重新安装映像,然后用完磁盘空间。
Ghostkeeper's

1
@LonnieBest我同意。相比之下,Arch Linux仅保留一个后备。Fedora似乎都没有这个问题。
富兰克林·于

5

这就是我在Ubuntu 16.04上工作的原因。

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade

这种方法对我有用。
博克(Bok)

2

列出所有内核:

dpkg --list 'linux-image*'

显示当前内核:

uname -r

列出所有内核除非当前之一:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

确保您当前的内核不在该列表中。

删除所有内核除非当前之一:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

清除其他内容:

sudo apt-get autoremove

如果仍然为您提供用于安装/卸载文件的启动磁盘空间错误,则直接从/ boot目录中删除旧映像之一:ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; 注意:在删除任何映像之前,请再次查看当前的内核映像。
赫曼·索拉特

仍然抱怨它没有满足要求
Matiss Jurgelis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.