如何欺骗分区管理器:问题:我的 /boot 分区已达到 100%,现在我无法升级。无法删除旧内核以腾出空间

如何欺骗分区管理器:问题:我的 /boot 分区已达到 100%,现在我无法升级。无法删除旧内核以腾出空间

嗯,这个问题经常被问到 - 然而解决方案似乎不太明确,而且对我来说并不真正起作用。

$ df
Filesystem               1k-blocks      Used  Available  Use% Mounted on
/dev/sda5                   184307    173269          0  100% /boot
/dev/sda6                  4673664   2926312    1486900   67% /home


$ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)

pi  linux-image-4.4.0-21-generic                    4.4.0-21.37                                amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-22-generic                    4.4.0-22.40                                amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
iF  linux-image-4.4.0-28-generic                    4.4.0-28.47                                amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
iF  linux-image-4.4.0-31-generic                    4.4.0-31.50                                amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP

这是最好的一个:

$ sudo apt-get purge linux-image-extra-4.4.0-36-generic

Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Probieren Sie »apt-get -f install«, um dies zu korrigieren:
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 linux-image-extra-4.4.0-34-generic : Hängt ab von: linux-image-4.4.0-34-generic soll aber nicht installiert werden
 linux-image-generic : Hängt ab von: linux-image-4.4.0-36-generic soll aber nicht installiert werden
                       Hängt ab von: linux-image-extra-4.4.0-36-generic soll aber nicht installiert werden
E: Unerfüllte Abhängigkeiten. Versuchen Sie »apt-get -f install« ohne Angabe eines Pakets (oder geben Sie eine Lösung an)

不知何故,4.4.0-36 似乎已安装但实际上并未安装。我甚至无法对包管理器进行洗脑。

我知道我最好不要 cd /boot;rm -f ........为了不让主脑更加困惑,但我认为除了帮助自己清理之外没有其他办法了。

我现在的问题如下:

我可以sudo rm -f /boot/somebigfiles;sudo touch /boot/somebigfiles在上面创建一些工作空间/boot吗?

如何欺骗包管理器,使他认为东西已经安装完毕,并且可以使用所有 niceapt-get clean/autoclean和其他 apt 命令自行清理?

答案1

也许这不是最简单的解决方案,但这是我尝试解决该问题的方法。

获取一个大于 /boot 分区的 USB 驱动器 将 /boot 的内容复制到它上面 然后调整 /etc/fstab 以在下次重启时将 USB 驱动器挂载到 /boot 重启 清理你的东西,升级 然后将 /boot(USB 驱动器)的内容复制到旧的 /boot(你可以挂载在 /boot1 上) 完成后,再次编辑 /etc/fstab 以挂载 /boot 分区而不是 USB 驱动器并重启

答案2

您可以采取以下措施来清理启动分区上的空间,而不会使包管理器感到困惑,即保留文件但删除其内容。

例如:

echo“”> / boot / vmlinuz-旧版本-旧-您想要删除
echo“”> / boot / initrd-旧版本-旧-您想要删除

这将回收已用的空间但文件仍为空。

由于 apt 似乎处于损坏状态,你应该运行

apt-get 安装 -f

按照上述示例在 /boot/ 中留出一些空间后

一个更长期的解决方案是在 USB 驱动器上的 Ubuntu 上启动,并使用 gparted 简单地调整启动分区的大小,以便它将来能够适合更多版本。

答案3

最近,我在清理旧内核失败后遇到了这个问题。我使用的方法是 cd 到 /boot 并删除几个旧内核。如果您有一段时间没有重新启动,则需要确保不要删除当前正在使用的内核。以下命令列出了可以相对安全地删除或截断的文件。列表顶部的文件更有可能被使用。

uname -r
cd /boot 
ls -1t *-* | grep -v $(uname -r)

我现在运行它时它看起来是这样的。发布的文件4.4.0-34-generic是值得删除的。

root@ubuntu:~# uname -r
4.4.0-31-通用
root@ubuntu:~# cd /boot
root@ubuntu:/etc/grub.d$ cd /boot
root@apollo:/boot# ls -1t *-* | grep -v $(uname -r)
initrd.img-4.4.0-34-通用
abi-4.4.0-36-通用
配置-4.4.0-36-通用
System.map-4.4.0-36-通用
vmlinuz-4.4.0-36-通用
abi-4.4.0-34-通用
配置-4.4.0-34-通用
System.map-4.4.0-34-通用
vmlinuz-4.4.0-34-通用
initrd.img-4.2.0-35-通用
abi-4.2.0-35-通用
配置-4.2.0-35-通用
System.map-4.2.0-35-通用
vmlinuz-4.2.0-35-通用

软件包管理器并没有因为我删除了内核而感到太过沮丧。删除脚本对丢失的文件具有合理的容忍度。您可以使用类似 的命令截断文件> vmlinuz-4.4.0-34-generic。重定向之前无需提供命令>

一旦您腾出空间,命令dpkg --configure -a应该会帮助您进行清理。

答案4

这种方法奏效了。我删除了不需要的文件(通过备份),并创建了空文件来平息包管理器。我们把它们称为“不需要的内核”。然后我让包管理器 apt-get 自行修复,启动分区只占了 50%。然后我清除了不需要的内核,这意味着包管理器要清除空文件。好吧,他没有抱怨 ;-)

Apt-get 现在已清理完毕,/boot 下降至 50%。

相关内容