diff options
-rw-r--r-- | custom/lvm-snapshots.nix | 15 | ||||
-rw-r--r-- | odin.nix | 2 |
2 files changed, 10 insertions, 7 deletions
diff --git a/custom/lvm-snapshots.nix b/custom/lvm-snapshots.nix index 74b33570..ef4a97c4 100644 --- a/custom/lvm-snapshots.nix +++ b/custom/lvm-snapshots.nix | |||
@@ -6,6 +6,7 @@ let | |||
6 | cfg = config.services.lvm-snapshots; | 6 | cfg = config.services.lvm-snapshots; |
7 | 7 | ||
8 | snapshotMount = name: "${cfg.mountPoint}/${if isNull cfg.snapshots."${name}".mountName then name else cfg.snapshots."${name}".mountName}"; | 8 | snapshotMount = name: "${cfg.mountPoint}/${if isNull cfg.snapshots."${name}".mountName then name else cfg.snapshots."${name}".mountName}"; |
9 | snapshotName = name: "${name}-snapshot"; | ||
9 | 10 | ||
10 | snapshotConfig = { | 11 | snapshotConfig = { |
11 | options = { | 12 | options = { |
@@ -58,11 +59,13 @@ in { | |||
58 | 59 | ||
59 | config = mkIf (cfg != {}) { | 60 | config = mkIf (cfg != {}) { |
60 | 61 | ||
62 | boot.kernelModules = [ "dm_snapshot" ]; | ||
63 | |||
61 | system.activationScripts = mapAttrs' (name: scfg: nameValuePair ("lvm-mountpoint" + name) '' | 64 | system.activationScripts = mapAttrs' (name: scfg: nameValuePair ("lvm-mountpoint" + name) '' |
62 | mkdir -p ${snapshotMount name} | 65 | mkdir -p ${snapshotMount name} |
63 | '') cfg.snapshots; | 66 | '') cfg.snapshots; |
64 | 67 | ||
65 | systemd.services = mapAttrs' (name: scfg: nameValuePair ("lvm-snapshot@" + name) { | 68 | systemd.services = mapAttrs' (name: scfg: nameValuePair ("lvm-snapshot@" + snapshotName name) { |
66 | enable = true; | 69 | enable = true; |
67 | 70 | ||
68 | unitConfig = { | 71 | unitConfig = { |
@@ -71,8 +74,8 @@ in { | |||
71 | 74 | ||
72 | serviceConfig = with pkgs; { | 75 | serviceConfig = with pkgs; { |
73 | Type = "oneshot"; | 76 | Type = "oneshot"; |
74 | ExecStart = "${devicemapper}/bin/lvcreate -s ${scfg.cowSize} --name ${name} ${scfg.VG}/${scfg.LV}"; | 77 | ExecStart = "${devicemapper}/bin/lvcreate -s ${scfg.cowSize} --name ${snapshotName name} ${scfg.VG}/${scfg.LV}"; |
75 | ExecStop = "${devicemapper}/bin/lvremove ${scfg.VG}/${name}"; | 78 | ExecStop = "${devicemapper}/bin/lvremove ${scfg.VG}/${snapshotName name}"; |
76 | RemainAfterExit = true; | 79 | RemainAfterExit = true; |
77 | }; | 80 | }; |
78 | }) cfg.snapshots; | 81 | }) cfg.snapshots; |
@@ -85,13 +88,13 @@ in { | |||
85 | StopWhenUnneeded = !scfg.persist; | 88 | StopWhenUnneeded = !scfg.persist; |
86 | }; | 89 | }; |
87 | 90 | ||
88 | bindsTo = [ ("lvm-snapshot@" + name + ".service") ]; | 91 | bindsTo = [ ("lvm-snapshot@" + snapshotName name + ".service") ]; |
89 | after = [ ("lvm-snapshot@" + name + ".service") ]; | 92 | after = [ ("lvm-snapshot@" + snapshotName name + ".service") ]; |
90 | 93 | ||
91 | options = mkIf scfg.readOnly "ro"; | 94 | options = mkIf scfg.readOnly "ro"; |
92 | 95 | ||
93 | where = snapshotMount name; | 96 | where = snapshotMount name; |
94 | what = "/dev/" + scfg.VG + "/" + name; | 97 | what = "/dev/" + scfg.VG + "/" + snapshotName name; |
95 | }) cfg.snapshots; | 98 | }) cfg.snapshots; |
96 | }; | 99 | }; |
97 | } | 100 | } |
@@ -150,7 +150,7 @@ | |||
150 | 150 | ||
151 | services.lvm-snapshots = { | 151 | services.lvm-snapshots = { |
152 | snapshots = { | 152 | snapshots = { |
153 | snapshot-mail = { | 153 | mail = { |
154 | LV = "mail"; | 154 | LV = "mail"; |
155 | VG = "raid6"; | 155 | VG = "raid6"; |
156 | }; | 156 | }; |