From 5ac5c11823f2e0fe5096a47ec7b47d0a377f53b1 Mon Sep 17 00:00:00 2001 From: mc-fucker Date: Tue, 27 Aug 2024 22:47:38 +0200 Subject: [PATCH] made borg work with lvm --- modules/borg.nix | 8 +++----- modules/borgHook.sh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100755 modules/borgHook.sh diff --git a/modules/borg.nix b/modules/borg.nix index 05a761d..3e9ce08 100644 --- a/modules/borg.nix +++ b/modules/borg.nix @@ -1,6 +1,7 @@ { config, pkgs, ... }: let backuppath = "/backup/snapshot"; + borgHook = toString ./borgHook.sh; in { services.borgbackup.jobs.default = { @@ -27,11 +28,8 @@ in environment.BORG_RSH = "ssh -o 'StrictHostKeyChecking=no' -i /root/.ssh/id_borg"; extraCreateArgs = "--verbose --stats"; startAt = "00:10"; - preHook = ''if [[ -d ${backuppath} ]]; then - btrfs subvolume delete ${backuppath} - fi - btrfs subvolume snapshot / ${backuppath}''; #create snapshot for consistent filesystem - postCreate = "btrfs subvolume delete ${backuppath}"; #delete snapshot again + preHook = "${borgHook} pre ${backuppath}"; #create snapshot for consistent filesystem + postCreate = "${borgHook} post ${backuppath}"; #delete snapshot again }; systemd.services.borgbackup-job-default = { diff --git a/modules/borgHook.sh b/modules/borgHook.sh new file mode 100755 index 0000000..32712f5 --- /dev/null +++ b/modules/borgHook.sh @@ -0,0 +1,31 @@ +#!/run/current-system/sw/bin/bash +hooktype="$1" +backuppath="$2" +fstype="$(df --output=fstype / | sed 1d)" +function dellvm { + umount ${backuppath} + lvremove -y "$1" +} +function delbtrfs { + btrfs subvolume delete ${backuppath} +} +if [[ "$fstype" == "btrfs" ]]; then + if [[ -d ${backuppath} ]]; then + delbtrfs + fi + if [[ "$hooktype" == "pre" ]]; then + btrfs subvolume snapshot / ${backuppath} + fi +else + snapname=nixos_snap + volume_group="$(mount | grep 'on / ' | cut -f 1 -d' ')" + vgname="$(lvs --noheadings "$volume_group" -o vg_name | tr -d ' ')" + snappath="/dev/mapper/${vgname}-${snapname}" + if [[ -b "$snappath" ]]; then + dellvm "$snappath" + fi + if [[ "$hooktype" == "pre" ]]; then + lvcreate -l50%FREE -s -n "$snapname" "$volume_group" + mount "$snappath" -o ro /backup/snapshot + fi +fi