From 5f0253ace683bae4c7989f4db167676dd0a507e7 Mon Sep 17 00:00:00 2001 From: Austin Seipp Date: Thu, 7 Jan 2016 04:23:54 -0600 Subject: [PATCH] nixos: tarsnap - separate archive cachedirs Tarsnap locks the cachedir during backup, meaning if you specify multiple backups with a shared cache that might overlap (for example, one backup may take an hour), secondary backups will fail. This isn't very nice behavior for the obvious reasons. This splits the cache dirs for each archive appropriately. Note that this will require a rebuild of your archive caches (although if you were only using one archive for your whole system, you can just move the directory). Signed-off-by: Austin Seipp --- nixos/modules/services/backup/tarsnap.nix | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/backup/tarsnap.nix b/nixos/modules/services/backup/tarsnap.nix index 57121e238553..f0b250689494 100644 --- a/nixos/modules/services/backup/tarsnap.nix +++ b/nixos/modules/services/backup/tarsnap.nix @@ -5,8 +5,8 @@ with lib; let cfg = config.services.tarsnap; - configFile = cfg: '' - cachedir ${config.services.tarsnap.cachedir} + configFile = name: cfg: '' + cachedir ${config.services.tarsnap.cachedir}/${name} keyfile ${config.services.tarsnap.keyfile} ${optionalString cfg.nodump "nodump"} ${optionalString cfg.printStats "print-stats"} @@ -57,6 +57,12 @@ in will refuse to run until you manually rebuild the cache with tarsnap --fsck. + Note that each individual archive (specified below) has its own cache + directory specified under cachedir; this is because + tarsnap locks the cache during backups, meaning multiple services + archives cannot be backed up concurrently or overlap with a shared + cache. + Set to null to disable caching. ''; }; @@ -251,6 +257,7 @@ in mkdir -p -m 0700 ${cfg.cachedir} chown root:root ${cfg.cachedir} chmod 0700 ${cfg.cachedir} + mkdir -p -m 0700 ${cfg.cachedir}/$1 DIRS=`cat /etc/tarsnap/$1.dirs` exec tarsnap --configfile /etc/tarsnap/$1.conf -c -f $1-$(date +"%Y%m%d%H%M%S") $DIRS ''; @@ -269,7 +276,7 @@ in environment.etc = (mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.conf" - { text = configFile cfg; + { text = configFile name cfg; }) cfg.archives) // (mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.dirs" { text = concatStringsSep " " cfg.directories;