我觉得我们需要一个更大的 Boot Partition
I think we need a bigger boot partition...
2025.03.15 很久以前,在创建系统的时候,我自信地挥了挥手,分配了一个 1GB 的 ESP partition 和一个 1GB 的 boot partition,当时还带着自信的微笑心想,这绝对足够未来使用了。然而,这个所谓的未来迅速消失了,我的微笑也随之不见。最终该发生的事情还是发生了,只是没想到会来得这么快。到底是什么东西需要这么大的 boot partition 呢?我们又该如何解决这个问题呢? 在这里,我想介绍一下我遇到的 boot partition 问题,以及临时的应对方法和最终的解决方案,并提及在此过程中遇到的问题以供参考。
问题
如果你在 Google 上搜索关于 boot partition 应该多大,你会发现各种各样的答案,绝大多数集中在 500MB 左右。 答案之所以多样化是很正常的,因为每个人的环境和发行版都不同。 例如,如果使用 systemd-boot,ESP partition 需要更大,而 boot partition 有时可以不需要。 使用 grub 时,情况各不相同; 如果设备有显卡,通常意味着需要将驱动模块也放置在 boot 中。 在这种情况下,在没有专用显卡的设备上拥有充足的 1GB 空间也开始显得不足。 至于 500MB 这个数字,从历史的角度来看,这可能是一个不错的选择,但如今这无疑已经过时了。
我遇到了类似的问题;一开始这不是问题,直到我在日常软件包更新期间面临需要安装新的 kernel 版本的情况。 那时,apt
开始抱怨 boot partition 空间不足。 这是因为我后来安装了显卡,这意味着 boot partition 无法再容纳 NVIDIA 模块。 既然如此,问题就很明显了:直接原因是新设备需要在 boot 中放置更多的内容,因此之前指定的尺寸变得不够用,根本原因是 boot partition 最初没有设置足够大的空间。 从历史上看,500MB 甚至 1GB 对于现代 boot 的使用来说已经不够了。
临时解决方案
幸运的是,Debian 的更新策略非常保守,会在 boot 中保留至少两个版本的 kernel 以备不时之需。 因此,临时解决这个问题非常简单:只需清理旧版本即可。
dpkg --list | grep linux-image
找到最旧的版本后,可以运行 apt purge
。 如果尚未清理干净,可以检查 /etc/boot
内部:
ls /boot
如果一切顺利,我们应该能够看到一些旧版本的 initramfs
和 initrd
,可以将其清除。
如果清理它们仍然不够,我们可以继续清理更多。一次不清理所有旧版本的原因是出于保守的考虑;如果当前 kernel 出现问题,我们可以使用旧版本启动。
最终方案
当然,每次都手动清理旧版本会带来太多的精神负担。 要彻底解决这个问题,我们必须从根本上入手,这意味着扩大 boot partition。
众所周知,partition 只能向后扩展,不能向前扩展。 因此,我们需要做的很简单:缩小 boot partition 之后的 /
partition,然后将释放的空间用作新的 boot partition。 实际上,最初计划在 Live CD 环境中保守地操作,但在与 @NickCao 确认计划后,我计划直接在当前操作系统下启动,该计划的具体步骤如下:
- 使用 GParted 从后方缩小
/
partition; - 同样在 GParted 中,将未分配的空间格式化为新的 boot partition;
- 使用
rsync -a
迁移原始 boot partition 中的数据; - 编辑
fstab
以更新 boot partition 信息; - 重新启动并检查新的 boot partition 是否已由
fstab
成功挂载; - 使用
grub install
和update grub
应用更改; - 清理旧的 boot partition;
- 重新启动。
最复杂的部分基本上可以使用 GParted 完成,最终结果如下:
重要的是要注意,您必须先运行
grub install
,然后再清除原始 boot partition;否则,系统将在重新启动时继续尝试使用旧的 boot partition,因为根据 GRUB - ArchWiki,这部分似乎是硬编码的:
It also happens if the boot partition, which is hardcoded into the grubx64.efi file, has changed. 如果您不幸错过了此步骤或由于其他原因到达此处,请不要担心。 您可以在 grub shell 中找到
grub.cfg
,并使用configfile
命令手动启动系统。
至于清除的原始 boot partition,您可以将其留作其他用途。 我目前将其用作未加密的临时备份 partition,以存储某些无需进入系统即可访问的数据。
链接
Debian GRUB Linux Boot Partition System Storage Management Copyright © 2019-2025 fernvenue. All rights reserved.