aboutsummaryrefslogtreecommitdiffstats
path: root/arch-system/backup-sudo
blob: 90590e0134634ed8665bad08b87cc160564e8adf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash -e

validate_path() {
    # validate path
    targetpath="$(realpath -m -- "$1")"
    if [[ "$targetpath" != /.snapshots/* ]]; then
        echo "Invalid path given." >&2
        exit 2
    fi
}

case "$1" in
    snapshot)
        validate_path "$2"
        # small race, but shouldn't matter
        if ! btrfs subvolume show "$3" > /dev/null 2>&1; then
            echo "Not a btrfs subvolume." >&2
            exit 3
        fi
        touch -c -- "$3"
        btrfs subvolume snapshot -r -- "$3" "$2"
        ;;
    delete_snapshot)
        validate_path "$2"
        btrfs subvolume delete -- "$2"
        ;;
    mount)
        validate_path "$2"
        mkdir -p /backup
        mount --bind -- "$2" /backup
        ;;
    cleanup)
        umount /backup 2> /dev/null || true
        rm -df /backup
        ;;
    *)
        echo "No command specified." >&2
        exit 1
        ;;
esac