Phi*_*ard 45 package-management boot disk-usage
我收到一条错误消息,说明我的 /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
Run Code Online (Sandbox Code Playgroud)
我用了
kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver
Run Code Online (Sandbox Code Playgroud)
要得到
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
Run Code Online (Sandbox Code Playgroud)
然后选择要删除的第一个图像
$ 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).
Run Code Online (Sandbox Code Playgroud)
Nic*_*Tux 66
在这种情况下,我会使用该dpkg工具强制删除一些内核包。
这不建议经常使用,而且有点危险,而且,但在这种情况下,未满足的依赖项可能会有所帮助。
首先找到系统启动所在的内核。当前加载的那个。打开终端 (CTRL+ALT+T) 并发出以下命令
uname -r
Run Code Online (Sandbox Code Playgroud)
它会向您显示加载的内核,您不应该尝试删除这个内核。
然后发出命令
ls /boot
Run Code Online (Sandbox Code Playgroud)
它将返回所有已安装的图像。选择一两个并尝试删除它们。尝试强制移除/清除它们。例如
sudo dpkg --force-all -P linux-image-3.13.0-32-generic
Run Code Online (Sandbox Code Playgroud)
您可以对其他图像执行相同操作,以释放一些空间。
然后你可以尝试安装缺少的包,或者
sudo apt-get install -f
Run Code Online (Sandbox Code Playgroud)
尝试解决依赖关系。
最后,发出“清理旧内核”命令
sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")
Run Code Online (Sandbox Code Playgroud)
上述命令将删除除当前加载的内核之外的所有内核。
因为你有一个单独的 /boot 分区,请记住你需要经常跟踪它的空间并清理(频率取决于 /boot 的空间)
小智 6
这就是在 Ubuntu 16.04 上对我有用的方法。
sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)