zfs autosnapshots
This commit is contained in:
@@ -4,15 +4,17 @@
|
|||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
service = "holocron_offsite";
|
service = "offsite";
|
||||||
cfg = config.holocron.${service};
|
cfg = config.holocron.${service};
|
||||||
|
sec = config.sops.secrets;
|
||||||
in {
|
in {
|
||||||
options.holocron.ensure_perms = {
|
options.holocron.offsite = {
|
||||||
enable = lib.mkEnableOption "enables backup script for holocron fileshare";
|
enable = lib.mkEnableOption "enables backup script for holocron fileshare";
|
||||||
paths = lib.mkOption {
|
paths = lib.mkOption {
|
||||||
type = with lib.types; listOf str;
|
type = with lib.types; listOf str;
|
||||||
default = [
|
default = [
|
||||||
"/holocron/srv"
|
"/holocron/srv"
|
||||||
|
"/holocron/users"
|
||||||
];
|
];
|
||||||
description = "list of paths to backup";
|
description = "list of paths to backup";
|
||||||
};
|
};
|
||||||
@@ -39,12 +41,14 @@ in {
|
|||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
User = "root";
|
||||||
|
Group = "archives";
|
||||||
};
|
};
|
||||||
|
|
||||||
script = ''
|
script = ''
|
||||||
${pkgs.sshpass}/bin/sshpass -f ${sec."lifeboat_rsync".path} \
|
${pkgs.sshpass}/bin/sshpass -f ${sec."lifeboat_rsync".path} \
|
||||||
${pkgs.rsync}/bin/rsync -aHAX --partial --numeric-ids --info=progress2,name1,stats2 --delete \
|
${pkgs.rsync}/bin/rsync -aHAX --partial --numeric-ids --info=progress2,name1,stats2 --delete \
|
||||||
-e "ssh -o StrictHostKeyChecking=no" \
|
-e "${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no" \
|
||||||
${builtins.concatStringsSep " " cfg.paths} \
|
${builtins.concatStringsSep " " cfg.paths} \
|
||||||
${cfg.offsite_user}@${cfg.offsite_target}::${cfg.offsite_dir}
|
${cfg.offsite_user}@${cfg.offsite_target}::${cfg.offsite_dir}
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ in {
|
|||||||
cert = sec."${service}/lumiose/cert".path;
|
cert = sec."${service}/lumiose/cert".path;
|
||||||
settings = {
|
settings = {
|
||||||
devices = {
|
devices = {
|
||||||
"mudkip" = {id = "OV4NUQK-3YHRL5R-SIZGTNL-7VZFFUX-FOJ6NTS-C7ROXR7-I2Q2W7G-QERO7AO";};
|
"piplup" = {id = "OV4NUQK-3YHRL5R-SIZGTNL-7VZFFUX-FOJ6NTS-C7ROXR7-I2Q2W7G-QERO7AO";};
|
||||||
"zygarde" = {id = "UYLTF52-VVKUR7F-JN33HQZ-RFNWGL3-JER52LA-GZD2LPJ-QIFEE7K-MNMZRQ5";};
|
"zygarde" = {id = "UYLTF52-VVKUR7F-JN33HQZ-RFNWGL3-JER52LA-GZD2LPJ-QIFEE7K-MNMZRQ5";};
|
||||||
"yveltal" = {id = "ZVSQ4WJ-7OICYOZ-3ECES4X-KH37IPB-TKHKUJG-BSEGXVM-AHYY5C3-VKG44AX";};
|
"yveltal" = {id = "ZVSQ4WJ-7OICYOZ-3ECES4X-KH37IPB-TKHKUJG-BSEGXVM-AHYY5C3-VKG44AX";};
|
||||||
"CEN-IT-07" = {id = "DPYKA4Z-3PX7JB2-FBEOXXX-SC7TLT2-QC5P2IR-SXOPJGX-QO3DMII-5B7UCA4";};
|
"CEN-IT-07" = {id = "DPYKA4Z-3PX7JB2-FBEOXXX-SC7TLT2-QC5P2IR-SXOPJGX-QO3DMII-5B7UCA4";};
|
||||||
@@ -36,7 +36,7 @@ in {
|
|||||||
folders = {
|
folders = {
|
||||||
"holocron" = {
|
"holocron" = {
|
||||||
path = "/holocron/users/blake/holocron";
|
path = "/holocron/users/blake/holocron";
|
||||||
devices = ["mudkip" "zygarde" "CEN-IT-07" "CEN-IT-00007" "yveltal"];
|
devices = ["piplup" "zygarde" "CEN-IT-07" "CEN-IT-00007" "yveltal"];
|
||||||
id = "5voxg-c3he2";
|
id = "5voxg-c3he2";
|
||||||
versioning = {
|
versioning = {
|
||||||
type = "staggered";
|
type = "staggered";
|
||||||
|
|||||||
@@ -47,6 +47,14 @@ in {
|
|||||||
services.zfs = {
|
services.zfs = {
|
||||||
autoScrub.enable = true;
|
autoScrub.enable = true;
|
||||||
autoScrub.interval = "weekly";
|
autoScrub.interval = "weekly";
|
||||||
|
autoSnapshot = {
|
||||||
|
enable = true;
|
||||||
|
frequent = 4; # 15 min snapshots
|
||||||
|
hourly = 24; # hourly snapshots
|
||||||
|
daily = 7; # daily snapshots
|
||||||
|
weekly = 4; # weekly snapshots
|
||||||
|
monthly = 12; # monthly snapshots
|
||||||
|
};
|
||||||
# email notifs
|
# email notifs
|
||||||
zed = {
|
zed = {
|
||||||
enableMail = true;
|
enableMail = true;
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ in {
|
|||||||
};
|
};
|
||||||
offsite_dir = lib.mkOption {
|
offsite_dir = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "lifeboat/archives/gameservers";
|
default = "lifeboat/holocron/archives/gameservers";
|
||||||
description = "path to rsync offsite backups to";
|
description = "path to rsync offsite backups to";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ in {
|
|||||||
};
|
};
|
||||||
offsite_dir = lib.mkOption {
|
offsite_dir = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "lifeboat/archives";
|
default = "lifeboat/holocron/archives";
|
||||||
description = "path to rsync offsite backups to";
|
description = "path to rsync offsite backups to";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user