שיניתי כעת את הגיבוי של שרת הבית שלי ב-NixOS, ועברתי מסקריפט יומי פשוט לגיבוי שעתי. זה לא אלגנטי כמו במופע (instance) של Mastodon שחבר שלי מנהל – שם יש לנו Snapshot של ZFS כל 20 דקות – אבל אני מרוצה גם מהפתרון הזה. ואני חייב לומר ש-NixOS מוצאת חן בעיניי יותר ויותר. בלי בינה מלאכותית זה היה מסובך מדי עבורי להבנה, אבל בינתיים אני לפחות מצליח לקרוא את קובצי ה-Nix המוכנים. חשבתי פעם להעביר את השרת להפצת לינוקס רגילה, אבל כל עוד זה עובד כל כך טוב...
-
/etc/nixos: כל הגדרות ה-NixOS (כל קובצי ה-nix.). -
/opt/minecraft: כל העולמות והנתונים של שרת המיינקראפט. -
/opt/satisfactory: שמירות וקונפיגורציה של שרת ה-Satisfactory. -
/opt/Blog: קוד המקור והתכנים של הבלוג. -
/opt/ui: קובצי ה-UI של Mastodon. -
/opt/audiobookshelf: ספרי השמע ומסד הנתונים המשויך אליהם.
הכל נשמר באחסון S3 שעבר Mount באמצעות RClone.
הגדרות ה-NixOS
{ config, pkgs, ... }:
{
# הגדרות BorgBackup
services.borgbackup.jobs.hourly = {
# נתיב למאגר (Repository) ב-S3 Mount
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"; # כל ה-Snapshots ב-24 השעות האחרונות
daily = 7;
weekly = 4;
monthly = 12;
};
};
# וידוא שחיבור ה-S3 מוכן לפני ש-Borg מתחיל
systemd.services.borgbackup-job-hourly = {
requires = [ "rclone-s3-mount.service" ];
after = [ "rclone-s3-mount.service" ];
};
}