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;
|
||||
|
||||
platforms.hetzner = {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
imports = [
|
||||
./zrepl.nix
|
||||
./disko.nix
|
||||
./state.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