6543
/
backsnap
Archived
1
0
Fork 0
This repository has been archived on 2019-09-20. You can view files and clone it, but cannot push or open issues or pull requests.
backsnap/backsnap/bin/backsnap-deamon_cp

121 lines
3.2 KiB
Bash

#!/bin/bash
###############################
# #
# spapshot script for btrfs #
# --- daemon --- #
# v0.1 #
# #
###############################
## settings ##
export logfile="../var/log/backsnap.log"
function main {
#foar each hour
while [ true ]; do
for volume in `ls ../etc/backsnap/volumes/`; do
[ -n "`cat "../etc/backsnap/volumes/$volume" | tr [:upper:] [:lower:] | grep enabled=true`" ] && snap_volume "../etc/backsnap/volumes/$volume" &
done
sleep 30s ## Debug ## norm 10m
done
}
## snap_ ##
#snap_volume <conf file>
function snap_volume {
conf="$1"
prof="`basename $conf`"
timestamp="../etc/backsnap/stamps/$prof"
[ -f "$timestamp" ] || touch "$timestamp"
chmod +x "$timestamp"
. "$timestamp"
#getconf
for t in years months weeks days hours path_vol path_bak; do
eval "$t=`cat "$conf" | grep -v "#" | tr [:upper:] [:lower:] | grep "$t=" | sed -s 's/'"$t="'/''/g' | tr -d " "`"
[ -z "${!t}" ] && eval "$t=0"
done
#check conf ...
#path_vol & path_bak exist (ar not 0 ...)
#min one time number gt 0
for t in years months weeks days hours; do
var="`echo $t | tr -d s`"
[ "${!t}" -gt 0 ] && [ "`timeget_$var`" != "${!var}" ] && {
#eigendliches backupen...
logon echo "$prof: SETTINGS: \"years=$years\" \"months=$months\" \"weeks=$weeks\" \"days=$days\" \"hours=$hours\" \"path_vol=$path_vol\" \"path_bak=$path_bak\""
logon "$prof: MODE: $var"
i=$((--$t))
#delete oldest if border is reached
[ -d "$path_bak$var.$i" ] && {
logon "$prof: SNAP: DEL: \"$path_bak$var.$i\""
#logon "$prof: SNAP: DEL: ERROR: `echo rm btrfs snapshot delete "$path_bak$var.$i" 3>&1 1>&2 2>&3`"
rm -r "$path_bak$var.$i" ## Debug ##
sleep 3
}
#move all snaps one back
while [ $i -ge 1 ]; do
[ -d "$path_bak$var.$((--i))" ] && {
logon "$prof: SNAP: MV: \"$path_bak$var.$i\" \"$path_bak$var.$((i+1))\""
#logon "$prof: SNAP: MV: ERROR: `echo mv "$path_bak$var.$i" "$path_bak$var.$((i+1))" 3>&1 1>&2 2>&3`"
mv "$path_bak$var.$i" "$path_bak$var.$((i+1))" ## Debug ##
sleep 3
}
done
#mk new snap
logon "$prof: SNAP: MK: \"$path_vol\" \"$path_bak$var.$i\""
#logon "$prof: SNAP: MK: ERROR: `echo btrfs subfolume snapshot -r "$path_vol" "$path_bak$var.$i" 3>&1 1>&2 2>&3`"
cp -f -r "$path_vol" "$path_bak$var.$i" ## Debug ##
wr_stamp "$timestamp" "$prof"
break
}
done
}
function timeget_year { date +%Y; }
function timeget_month { date +%m; }
function timeget_week { date +%V; }
function timeget_day { date +%d; }
function timeget_hour { date +%H; }
#wr_stamp <stamp_path> <for>
function wr_stamp {
timestamp="$1"
echo $1
reason="$2"
echo "## timestamp for $reason ##" > "$timestamp"
echo "## `date +%Y-%m-%d_%H-%M` ##" >> "$timestamp"
echo >> "$timestamp"
echo "year=`timeget_year`" >> "$timestamp"
echo "month=`timeget_month`" >> "$timestamp"
echo "week=`timeget_week`" >> "$timestamp"
echo "day=`timeget_day`" >> "$timestamp"
echo "hour=`timeget_hour`" >> "$timestamp"
}
function logon {
delimeter="#"
echo "`date +%Y%m%d%H%M%S` $delimeter `echo $@ | tr -d "$delimeter"`" >> "$logfile"
}
main