我最近调整了我的 NixOS 家庭服务器的备份策略,将简单的每日脚本改成了每小时备份。虽然不像我朋友管理的那台 Mastodon 实例那样优雅(那里每 20 分钟就会生成一个 ZFS 快照),但我对目前的方案也很满意。我必须说,我越来越喜欢 NixOS 了。虽然如果没有 AI 的帮助,它对我来说可能太复杂而无法理解,但现在我至少能读懂写好的 Nix 文件了。我曾考虑过将服务器换回普通的 Linux 发行版,但只要它运行得这么好……
-
/etc/nixos:整个 NixOS 配置(所有 .nix 文件)。 -
/opt/minecraft:Minecraft 服务器的所有世界和数据。 -
/opt/satisfactory:Satisfactory 服务器的存档和配置。 -
/opt/Blog:博客的源代码和内容。 -
/opt/ui:Mastodon UI 文件。 -
/opt/audiobookshelf:有声读物及其相关数据库。
所有内容都存储在通过 RClone 挂载的 S3 存储中。
NixOS 配置
{ config, pkgs, ... }:
{
# BorgBackup 配置
services.borgbackup.jobs.hourly = {
# S3 挂载中的仓库路径
repo = "/opt/S3/Backup/NixOSHomeServer_Borg";
# 无需密码
encryption.mode = "none";
# 启用压缩以进一步节省空间
compression = "auto,zstd";
# 需要备份的路径
paths = [
"/etc/nixos"
"/opt/minecraft"
"/opt/satisfactory"
"/opt/Blog"
"/opt/ui"
"/opt/audiobookshelf"
];
# 每小时执行一次
startAt = "hourly";
# 如果仓库缺失则自动初始化
doInit = true;
# 保留规则(清理)
prune.keep = {
within = "1d"; # 保留过去 24 小时内的所有快照
daily = 7;
weekly = 4;
monthly = 12;
};
};
# 确保在 Borg 启动前 S3 挂载已就绪
systemd.services.borgbackup-job-hourly = {
requires = [ "rclone-s3-mount.service" ];
after = [ "rclone-s3-mount.service" ];
};
}