NixOSホームサーバーのバックアップ設定を見直し、単純な日次スクリプトから毎時バックアップに変更しました。友人が管理しているMastodonインスタンスのように、20分おきにZFSスナップショットを取るほどエレガントではありませんが、このソリューションには満足しています。それにしても、NixOSがどんどん気に入ってきました。AIがなければ理解するには複雑すぎたでしょうが、今では完成したNixファイルを少なくとも読むことはできるようになりました。一時はサーバーを普通のLinuxに戻そうかと考えたこともありましたが、これほど上手くいっているうちは……。

  1. /etc/nixos: NixOSの設定全体(すべての.nixファイル)。

  2. /opt/minecraft: Minecraftサーバーのすべてのワールドとデータ。

  3. /opt/satisfactory: Satisfactoryサーバーのセーブデータと設定。

  4. /opt/Blog: ブログのソースコードとコンテンツ。

  5. /opt/ui: MastodonのUIファイル。

  6. /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" ];
  };
}