Я продолжаю наполняться /boot
со старыми ядрами, после чего nixos-rebuild switch --upgrade
загрузит кучу производных только для того, чтобы в конечном итоге выйти из строя при установке нового ядра (или initrd), потому что на нем недостаточно места /boot
.
Один из вариантов - запустить nix-collect-garbage -d
, но это может быть очень медленным и может привести к необходимости заново загружать новые загруженные версии.
Иногда кажется, что помогает удаление старых ядер (пока /boot
заполняется снова), в то время как в других случаях вручную выбирая несколько поколений для удаления из ls /nix/var/nix/profiles/system-??-link
работал лучше.
Есть ли лучший подход к /boot
заправка? (Особенно когда я хочу обновить и сразу же использовать новую систему.)
Есть давний отчет об ошибке об этой проблеме, когда /boot
заполняет. Ситуация улучшилась, но чтение всех комментариев требует времени, поэтому я попытаюсь подвести итог.
Если вы используете GRUB, устанавливать boot.loader.grub.configurationLimit = 42;
(или выберите лучшее число в зависимости от того, сколько у вас места в /boot
), так что старые ядра будут автоматически очищены. Существующие старые ядра будут очищены на следующем nixos-rebuild switch
, хотя вам может потребоваться сначала удалить некоторые вручную, поскольку install-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
и связанные варианты.