added zrepl for snapshots
This commit is contained in:
parent
52af8fc06e
commit
7cee029fff
3 changed files with 100 additions and 0 deletions
|
@ -29,6 +29,8 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
zrepl.enable = true;
|
||||||
|
|
||||||
ssh-on-boot.enable = true;
|
ssh-on-boot.enable = true;
|
||||||
|
|
||||||
platforms.hetzner = {
|
platforms.hetzner = {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./zrepl.nix
|
||||||
./disko.nix
|
./disko.nix
|
||||||
./state.nix
|
./state.nix
|
||||||
./ssh-luks-zfs-on-boot.nix
|
./ssh-luks-zfs-on-boot.nix
|
||||||
|
|
97
shared/modules/zrepl.nix
Normal file
97
shared/modules/zrepl.nix
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) types;
|
||||||
|
|
||||||
|
cfg = config.mine.zrepl;
|
||||||
|
|
||||||
|
# helpers
|
||||||
|
zreplFilesystems = lib.listToAttrs (
|
||||||
|
lib.forEach cfg.datasets (dataset: lib.nameValuePair dataset true)
|
||||||
|
);
|
||||||
|
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
mine.zrepl = {
|
||||||
|
enable = lib.mkEnableOption "zrepl snapshot";
|
||||||
|
|
||||||
|
datasets = lib.mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [
|
||||||
|
"rpool/safe<"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services.zrepl = {
|
||||||
|
enable = true;
|
||||||
|
settings.jobs = [
|
||||||
|
# push
|
||||||
|
{
|
||||||
|
name = "snapjob";
|
||||||
|
type = "snap";
|
||||||
|
|
||||||
|
filesystems = zreplFilesystems;
|
||||||
|
|
||||||
|
snapshotting = {
|
||||||
|
type = "periodic";
|
||||||
|
interval = "5m";
|
||||||
|
prefix = "zrepl_";
|
||||||
|
};
|
||||||
|
|
||||||
|
pruning = {
|
||||||
|
keep = [
|
||||||
|
{
|
||||||
|
type = "grid";
|
||||||
|
regex = "^zrepl_.*";
|
||||||
|
|
||||||
|
# 1. keep all snapshots for 30 minutes
|
||||||
|
# 2. keep one every 15 minutes for 2 hours
|
||||||
|
# 3. keep one every hour for 1 day
|
||||||
|
grid = "1x30m(keep=all) | 8x15m | 24x1h";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
# {
|
||||||
|
# services.zrepl = {
|
||||||
|
# enable = true;
|
||||||
|
# settings.jobs = [
|
||||||
|
# {
|
||||||
|
# type = "push";
|
||||||
|
# name = "safesnapshots";
|
||||||
|
|
||||||
|
# filesystems = [
|
||||||
|
# "rpool/safe<"
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# snapshotting = {
|
||||||
|
# type = "periodic";
|
||||||
|
# interval = "5m";
|
||||||
|
# prefix = "zrepl_";
|
||||||
|
# };
|
||||||
|
|
||||||
|
# pruning = {
|
||||||
|
# keep_sender = [
|
||||||
|
# {
|
||||||
|
# type = "grid";
|
||||||
|
# regex = "^zrepl_.*";
|
||||||
|
|
||||||
|
# # 1. keep all snapshots for 30 minutes
|
||||||
|
# # 2. keep one every 15 minutes for 2 hours
|
||||||
|
# # 3. keep one every hour for 1 day
|
||||||
|
# grid = "1x30m(keep=all) | 8x15m | 14x1d";
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# }
|
Loading…
Reference in a new issue