நான் இப்போது எனது NixOS ஹோம் சர்வரின் பேக்கப்பை மாற்றியுள்ளேன், ஒரு எளிய தினசரி ஸ்கிரிப்ட்டிற்குப் பதிலாக மணிநேர பேக்கப்பிற்கு மாற்றியுள்ளேன். எனது நண்பர் நிர்வகிக்கும் Mastodon இன்ஸ்டன்ஸைப் போல இது அவ்வளவு நேர்த்தியாக இல்லை – அங்கு ஒவ்வொரு 20 நிமிடங்களுக்கும் ஒரு ZFS ஸ்னாப்ஷாட் (Snapshot) எடுக்கப்படுகிறது – ஆனால் இந்தத் தீர்வில் நான் திருப்தி அடைகிறேன். மேலும் 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" ];
  };
}