저는 이번에 NixOS 홈 서버의 백업 방식을 간단한 일일 스크립트에서 시간별 백업으로 변경했습니다. 제 친구가 관리하는 마스토돈(Mastodon) 인스턴스처럼 20분마다 ZFS 스냅샷을 찍는 방식만큼 우아하지는 않지만, 이 솔루션에도 만족하고 있습니다. 그리고 NixOS가 점점 더 마음에 든다는 점을 말씀드리고 싶네요. AI가 없었다면 제가 이해하기에는 너무 복잡했겠지만, 이제는 완성된 Nix 파일들을 어느 정도 읽을 수 있게 되었습니다. 서버를 일반적인 리눅스로 바꿀까 고민한 적도 있었지만, 이렇게 잘 작동하는 한 계속 사용할 것 같습니다.
-
/etc/nixos: 전체 NixOS 설정 (모든 .nix 파일). -
/opt/minecraft: 마인크래프트 서버의 모든 월드와 데이터. -
/opt/satisfactory: 새티스팩토리(Satisfactory) 서버의 세이브 파일과 설정. -
/opt/Blog: 블로그의 소스 코드와 콘텐츠. -
/opt/ui: 마스토돈 UI 파일들. -
/opt/audiobookshelf: 오디오북과 관련 데이터베이스.
이 모든 데이터는 RClone을 통해 마운트된 S3 스토리지에 저장됩니다.
NixOS 설정
{ config, pkgs, ... }:
{
# BorgBackup 설정
services.borgbackup.jobs.hourly = {
# S3 마운트 내의 저장소(Repository) 경로
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" ];
};
}