Tocmai am schimbat sistemul de backup al serverului meu de acasă NixOS, trecând de la un simplu script zilnic la unul orar. Nu este chiar atât de elegant ca pe instanța Mastodon pe care o administrează prietenul meu – acolo avem un snapshot ZFS la fiecare 20 de minute – dar sunt mulțumit și de această soluție. Și trebuie să spun că NixOS îmi place din ce în ce mai mult. Fără AI ar fi însă mult prea complicat pentru a-l putea înțelege, dar acum pot cel puțin să citesc fișierele Nix gata făcute. M-am gândit la un moment dat să trec serverul pe un Linux obișnuit, dar atâta timp cât funcționează atât de bine...
-
/etc/nixos: Întreaga configurație NixOS (toate fișierele .nix). -
/opt/minecraft: Toate lumile și datele serverului de Minecraft. -
/opt/satisfactory: Salvările și configurația serverului de Satisfactory. -
/opt/Blog: Codul sursă și conținutul blogului. -
/opt/ui: Fișierele UI pentru Mastodon. -
/opt/audiobookshelf: Cărțile audio și baza de date aferentă.
Totul ajunge pe un spațiu de stocare S3 montat prin RClone.
Configurația NixOS
{ config, pkgs, ... }:
{
# Configurație BorgBackup
services.borgbackup.jobs.hourly = {
# Calea către repository în mount-ul S3
repo = "/opt/S3/Backup/NixOSHomeServer_Borg";
# Nu este necesară nicio parolă
encryption.mode = "none";
# Compresie pentru o economie și mai mare de spațiu
compression = "auto,zstd";
# Căile care trebuie salvate
paths = [
"/etc/nixos"
"/opt/minecraft"
"/opt/satisfactory"
"/opt/Blog"
"/opt/ui"
"/opt/audiobookshelf"
];
# Execuție orară
startAt = "hourly";
# Inițializare automată a repository-ului dacă acesta lipsește
doInit = true;
# Reguli de retenție (Pruning)
prune.keep = {
within = "1d"; # Toate snapshot-urile din ultimele 24h
daily = 7;
weekly = 4;
monthly = 12;
};
};
# Asigurarea că mount-ul S3 este gata înainte de pornirea Borg
systemd.services.borgbackup-job-hourly = {
requires = [ "rclone-s3-mount.service" ];
after = [ "rclone-s3-mount.service" ];
};
}