我不断填充/boot
旧内核,此时nixos-rebuild switch --upgrade
会下载一堆派生版本,最终在安装新内核(或 initrd)时失败,因为空间不足/boot
。
一种选择是运行nix-collect-garbage -d
,但这可能非常慢,并且可能导致需要重新下载新下载的版本。
有时删除旧内核似乎有帮助(直到/boot
再次填满),而其他时候,手动挑选几代进行删除ls /nix/var/nix/profiles/system-??-link
效果更好。
有没有更好的方法来解决/boot
填充问题?(特别是当我想立即升级并使用新系统时。)
答案1
长期以来错误报告关于这个问题的评论已经/boot
满了。情况已经改善了,但阅读所有评论需要一段时间,所以我将尝试总结一下。
如果你使用 GRUB,设置boot.loader.grub.configurationLimit = 42;
(或根据 中的空间大小选择一个更好的数字/boot
),以便自动清理较旧的内核。现有的旧内核将在下一次 中被清理nixos-rebuild switch
,但您可能需要先手动删除一些,因为安装-grub.pl脚本将首先尝试复制新内核,然后删除旧内核。
如果你使用 systemd-boot(以前称为 Gummiboot),从 NixOS 19.03 开始(谢谢 domenkozar),设置boot.loader.systemd-boot.configurationLimit = 42;
(或者根据 中的空间大小选择一个合适的数字/boot
),下一步nixos-rebuild switch
应该自动清理旧内核。
nix-collect-garbage
请注意,您最终需要在填满之前(或/nix
填满时)运行。也可以通过设置将其设置为自动运行nix.gc.automatic = true
和相关选项。