నేను ఇప్పుడు నా NixOS హోమ్ సర్వర్ బ్యాకప్‌ను మార్చాను మరియు సాధారణ రోజువారీ స్క్రిప్ట్‌కు బదులుగా గంటవారీ బ్యాకప్‌కు మార్చాను. నా స్నేహితుడు నిర్వహించే మాస్టోడాన్ (Mastodon) ఇన్‌స్టన్స్‌లో ఉన్నంత అద్భుతంగా ఇది లేదు – అక్కడ ప్రతి 20 నిమిషాలకు ఒక ZFS స్నాప్‌షాట్ ఉంటుంది – కానీ ఈ పరిష్కారంతో కూడా నేను సంతృప్తిగా ఉన్నాను. మరియు నేను చెప్పాలి, NixOS నాకు రోజురోజుకూ మరింత నచ్చుతోంది. AI (కృత్రిమ మేధస్సు) లేకుండా, నేను అర్థం చేసుకోలేనంత క్లిష్టంగా ఇది ఉండేది, కానీ ఇప్పుడు నేను కనీసం సిద్ధంగా ఉన్న Nix ఫైల్‌లను చదవగలుగుతున్నాను. సర్వర్‌ను సాధారణ లైనక్స్‌కు మార్చాలని ఒకప్పుడు అనుకున్నాను, కానీ ఇది ఇంత బాగా పనిచేస్తున్నంత కాలం...

  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;

    # నిలుపుదల నియమాలు (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" ];
  };
}