我的 /boot 分区已达到 100%,现在无法升级。无法删除旧内核以腾出空间

我的 /boot 分区已达到 100%,现在无法升级。无法删除旧内核以腾出空间

我的第一个问题是当我尝试apt-get update或时apt-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).

我怎样才能释放或延长启动时间而不弄乱我的安装?

答案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)。

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

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

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


中的配置文件/boot是内核配置被使用由内核团队建造同名的内核。删除它应该无害,除非您想将其作为参考或帮助您构建自己的内核。

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

答案2

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

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

cd /boot
du -sk *|sort -n

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

我执行了uname -a获取正在运行的内核的操作,我发现我使用的是 Linux 替代版本2.6.32-43-server,并且执行了tar6 个未运行且较旧的版本。

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

我重新启动后现在只使用了 4% /boot

答案3

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

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

答案4

我发现唯一对我有用的方法就是使用 Aptitude。

sudo aptitude

然后,当它打开时,通常会在底部显示一些未满足的依赖关系。您可以点击字母g继续建议的删除。它会带您进入一个页面,其中列出了将要发生的事情。

-破碎的玉米粒旁边应该有一个减号。g再次按下,它将移除破碎的玉米粒。按下q退出。然后你应该能够使用sudo apt-get autoremove它来摆脱旧的玉米粒并释放空间。

2022 年更新: 另一种方法是手动删除一些内核文件,特别是在未安装 aptitude 的情况下:

首先检查正在运行的内核,确保您没有删除它:

uname -r

然后列出模块目录:

ls /usr/lib/modules/

例如,这是我的一台服务器的列表:

drwxr-xr-x 5 root root 4096 Mar  2 14:16 5.4.0-100-generic
drwxr-xr-x 2 root root  250 Apr 27  2021 5.4.0-26-generic
drwxr-xr-x 2 root root  250 May 13  2021 5.4.0-28-generic
drwxr-xr-x 2 root root  250 Oct 26 14:01 5.4.0-72-generic
drwxr-xr-x 2 root root  250 Oct 26 14:01 5.4.0-73-generic
drwxr-xr-x 2 root root  250 Oct 26 14:01 5.4.0-80-generic
drwxr-xr-x 2 root root  250 Mar 11 16:20 5.4.0-84-generic
drwxr-xr-x 2 root root  250 Mar 11 16:20 5.4.0-89-generic
drwxr-xr-x 2 root root  250 Mar 11 16:20 5.4.0-91-generic
drwxr-xr-x 5 root root 4096 Feb  1 14:15 5.4.0-97-generic

从此目录中删除除最新 2 个之外的所有文件。例如:

sudo rm -rf 5.4.0-26-generic 5.4.0-28-generic 5.4.0-72-generic 5.4.0-73-generic 5.4.0-80-generic 5.4.0-84-generic 5.4.0-89-generic 5.4.0-91-generic

还要检查 /boot 目录并在那里执行相同的过程。

然后检查是否释放了一些空间:

df -h

最后运行 apt 来修复损坏的软件包:

sudo apt -f install

相关内容