میں نے اب اپنے NixOS ہوم سرور کے بیک اپ کو ایک سادہ روزانہ اسکرپٹ کے بجائے فی گھنٹہ بیک اپ پر منتقل کر دیا ہے۔ یہ اتنا شاندار تو نہیں ہے جتنا کہ میرے دوست کے زیر انتظام Mastodon انسٹینس پر ہے – وہاں ہمارے پاس ہر 20 منٹ میں ایک ZFS اسنیپ شاٹ ہوتا ہے – لیکن میں اس حل سے بھی مطمئن ہوں۔ اور مجھے کہنا پڑے گا کہ NixOS مجھے اب پہلے سے زیادہ پسند آ رہا ہے۔ مصنوعی ذہانت (AI) کے بغیر یہ سمجھنا بہت مشکل ہوتا، لیکن اب میں کم از کم تیار شدہ Nix فائلوں کو پڑھ سکتا ہوں۔ میں نے ایک بار سرور کو عام لینکس پر منتقل کرنے کا سوچا تھا، لیکن جب تک یہ اتنا اچھا کام کر رہا ہے...

  1. /etc/nixos: مکمل NixOS کنفیگریشن (تمام .nix فائلیں)۔

  2. /opt/minecraft: مائن کرافٹ سرور کی تمام دنیایں اور ڈیٹا۔

  3. /opt/satisfactory: سیٹسفیکٹری سرور کی گیم سیوز اور کنفیگریشن۔

  4. /opt/Blog: بلاگ کا سورس کوڈ اور مواد۔

  5. /opt/ui: Mastodon-UI فائلیں۔

  6. /opt/audiobookshelf: آڈیو بکس اور متعلقہ ڈیٹا بیس۔

یہ سب کچھ ایک S3 اسٹوریج پر محفوظ ہوتا ہے جسے RClone کے ذریعے ماؤنٹ کیا گیا ہے۔

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