NixOS执行nixos-rebuild switch后重启无法加载新配置求助
解决NixOS
nixos-rebuild switch 后重启回旧配置的问题 核心问题定位
执行sudo nixos-rebuild switch后当前系统运行正常,但重启回到旧配置,且nixos-rebuild list-generations未更新,说明新系统代未被正确添加到启动加载器配置中,或是系统代本身未成功生成。
排查与解决步骤
1. 重新执行命令并检查详细日志
重新运行命令,查看完整输出定位隐藏错误:
sudo nixos-rebuild switch -vv
重点关注:
- 是否出现
error或warning信息,尤其是配置语法错误、npins模块导入失败、权限问题 - 是否成功完成
building the system configuration步骤,生成新的/nix/store/xxx-nixos-system-xxx路径 - 是否执行了
switch-to-configuration switch,以及GRUB配置更新流程是否正常
2. 验证新系统代是否生成
检查系统代符号链接是否指向最新构建的系统:
ls -l /nix/var/nix/profiles/system
如果该链接未与/run/current-system指向同一路径,说明新系统代未成功生成,需排查配置:
- 切换到配置目录,执行语法检查:
nix-instantiate --eval -E 'import ./configuration.nix' - 确认npins的
npins.json锁定文件有效,Proxmox模块路径正确且可正常拉取。
3. 检查GRUB配置是否正确更新
手动生成GRUB配置
强制更新GRUB菜单:
sudo grub-mkconfig -o /boot/grub/grub.cfg
查看/boot/grub/grub.cfg,确认其中包含最新系统代条目(通过时间戳或版本号识别)。
检查GRUB默认设置
查看/etc/default/grub中的GRUB_DEFAULT项:
- 如果设置为固定数字(如
0),重启会始终选择旧菜单条目;建议改为default或saved,并开启GRUB_SAVEDEFAULT=true。
确认启动加载器无冲突
检查configuration.nix中是否同时启用GRUB和systemd-boot,需只保留一个:
boot.loader.grub.enable = true; # boot.loader.systemd-boot.enable = true; # 注释冲突项
4. 检查NixOS配置中的GRUB设备设置
确认configuration.nix中GRUB设备配置正确:
boot.loader.grub = { enable = true; device = "/dev/sda"; # 传统BIOS启动,替换为你的磁盘设备 # UEFI启动使用: # device = "nodev"; # efiSupport = true; };
设备指定错误会导致GRUB配置无法写入正确路径,重启后无法加载新系统代。
5. 手动添加系统代到启动项
如果新系统代已存在于/nix/store但未被添加到系统代列表:
- 找到新系统代路径(如
/nix/store/abc123-nixos-system-myhost-23.11.xxxx) - 设置为当前系统代:
sudo nix-env -p /nix/var/nix/profiles/system --set /nix/store/abc123-nixos-system-myhost-23.11.xxxx - 重新切换配置并更新GRUB:
sudo /run/current-system/bin/switch-to-configuration switch sudo grub-mkconfig -o /boot/grub/grub.cfg
6. 确认Git配置状态
确保执行nixos-rebuild switch时使用的是正确Git分支,配置文件无未提交的旧版本修改。
内容的提问来源于stack exchange,提问作者Prateek Raj Gautam
相关产品推荐
相关产品推荐

