मैंने अब अपने NixOS होम सर्वर के बैकअप को एक साधारण दैनिक स्क्रिप्ट के बजाय प्रति घंटा बैकअप में बदल दिया है। यह उतना शानदार नहीं है जितना कि मेरे दोस्त द्वारा प्रबंधित Mastodon इंस्टेंस पर है – वहां हमारे पास हर 20 मिनट में एक ZFS स्नैपशॉट होता है – लेकिन मैं इस समाधान से भी खुश हूं। और मुझे कहना होगा कि NixOS मुझे और भी पसंद आने लगा है। एआई (AI) के बिना, यह समझने के लिए बहुत जटिल होता, लेकिन अब मैं कम से कम तैयार Nix फाइलों को पढ़ सकता हूं। मैंने एक बार सर्वर को सामान्य लिनक्स में बदलने के बारे में सोचा था, लेकिन जब तक यह इतना अच्छा काम कर रहा है...

  1. /etc/nixos: पूरी NixOS कॉन्फ़िगरेशन (सभी .nix फाइलें)।

  2. /opt/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;

    # प्रतिधारण नियम (Pruning)
    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" ];
  };
}