You are not logged in.
Pages: 1
Topic closed
Hello,
I'm setting up a backup system on a small home server (running debian). The server is (almost) always-on, but the machine that has to be backed-up is not (a workstation running archlinux).
For now, it works well (the server backs-up its local files and also the workstation's files via ssh), apart that the workstation has to be on when rsnapshot executes (cron job).
Would there be a solution like "do the daily backup once a day, when the workstation is on" ? By e.g asking the workstation regularly if it is on and if so, backup it, but only max once a day. I saw that anacron does something like this, but as I understood, it is for the case the server is not always on, and not the workstation. Am I right ?
Thanks for the help
Ben
Last edited by ben106 (2011-06-04 11:02:59)
Offline
I've got the same setup at home, with a Debian server pulling in backups from my laptop. I run the following script as an hourly cron job on the server (I know it's a bit hackish and could be tidied up). Files in $DATEDIR are used for timestamps of the last monthly/weekly/daily backups, and running with an '-f' flag forces a daily backup to be made.
#!/bin/bash
if ! /bin/ping -c 1 192.168.1.33 &> /dev/null; then echo "owain-laptop not available"; exit 1; fi
DATEDIR=/var/lib/rsnap
LASTMONTHLY=$(stat -c %X $DATEDIR/monthly)
LASTWEEKLY=$(stat -c %X $DATEDIR/weekly)
LASTDAILY=$(stat -c %X $DATEDIR/daily)
NOW=$(date +%s)
MONTH=2415600 # 27 days, 23 hours
WEEK=601200 # 6 days, 23 hours
DAY=82800 # 23 hours
SUCCESS=0
if [[ "$(($NOW-$LASTMONTHLY))" -gt "$MONTH" ]]; then
echo "Starting monthly snapshot"
rsnapshot -c /etc/rsnapshot.owain-laptop.boot.conf monthly || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.etc.conf monthlyy || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.home.conf monthly || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.var.conf monthly || SUCCESS="1"
if [[ $SUCCESS == "0" ]]; then
echo "Monthly snapshot successful"
touch $DATEDIR/monthly
else
echo "Error(s) with monthly snapshot"
fi
fi
SUCCESS=0
if [[ "$(($NOW-$LASTWEEKLY))" -gt "$WEEK" ]]; then
echo "Starting weekly snapshot"
rsnapshot -c /etc/rsnapshot.owain-laptop.boot.conf weekly || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.etc.conf weekly || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.home.conf weekly || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.var.conf weekly || SUCCESS="1"
if [[ $SUCCESS == "0" ]]; then
echo "Weekly snapshot successful"
touch $DATEDIR/weekly
else
echo "Error(s) with weekly snapshot"
fi
fi
SUCCESS=0
if [[ "$(($NOW-$LASTDAILY))" -gt "$DAY" || "$1" == "-f" ]]; then
echo "Starting daily snapshot"
rsnapshot -c /etc/rsnapshot.owain-laptop.boot.conf daily || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.etc.conf daily || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.home.conf daily || SUCCESS="1"
rsnapshot -c /etc/rsnapshot.owain-laptop.var.conf daily || SUCCESS="1"
if [[ $SUCCESS == "0" ]]; then
echo "Daily snapshot successful"
touch $DATEDIR/daily
else
echo "Error(s) with daily snapshot"
fi
fi
Offline
thanks a lot ! I made some minor modifications to your script, will post them as soon as I tested it a little..
Offline
Here is the modified script so it better suits my needs :
#!/bin/bash
if ! /bin/ping -c 1 192.168.1.54 &> /dev/null; then echo "enceladus not available"; exit 1; fi
DATEDIR=/home/samba/rsnapshot-enceladus/last_backups
LASTDAILY=$((`stat -c %X $DATEDIR/lastdaily` / 86400)) # number of days since epoch of the last backup
LASTWEEKLY=$((`stat -c %X $DATEDIR/lastdaily` / 86400))
LASTMONTHLY=$((`stat -c %X $DATEDIR/lastdaily` / 86400))
NOW=$((`date +%s` / 86400))
MONTH=30 # number of days between backups
WEEK=7
DAY=1
FAIL=0
if [[ "$(($NOW-$LASTMONTHLY))" -ge "$MONTH" ]]; then
echo "Starting monthly snapshot"
rsnapshot -c /etc/rsnapshot-enceladus.conf monthly || FAIL="1" # If rsnapshot failed, set FAIL=1
if [[ $FAIL == "0" ]]; then
echo "Monthly snapshot successful"
touch $DATEDIR/lastmonthly
else
echo "Error(s) with monthly snapshot"
fi
fi
FAIL=0
if [[ "$(($NOW-$LASTWEEKLY))" -ge "$WEEK" ]]; then
echo "Starting weekly snapshot"
rsnapshot -c /etc/rsnapshot-enceladus.conf weekly || FAIL="1"
if [[ $FAIL == "0" ]]; then
echo "Weekly snapshot successful"
touch $DATEDIR/lastweekly
else
echo "Error(s) with weekly snapshot"
fi
fi
FAIL=0
if [[ "$(($NOW-$LASTDAILY))" -ge "$DAY" || "$1" == "-f" ]]; then
echo "Starting daily snapshot"
rsnapshot -c /etc/rsnapshot-enceladus.conf daily || FAIL="1"
if [[ $FAIL == "0" ]]; then
echo "Daily snapshot successful"
touch $DATEDIR/lastdaily
else
echo "Error(s) with daily snapshot"
fi
fi
I chose to use days unit instead of seconds, so that a backup is really made every day, not every >23h (personal preference..). That's the most important change, otherwise it is just about IPs and names..
For now, I just could test that the daily backup works, but the weekly and monthly should also work.
Thanks again !
EDIT : The script must be placed in /etc/cron.hourly, and its name must match what "man run-parts" says (e.g foo and not foo.sh)
Last edited by ben106 (2011-06-07 05:43:54)
Offline
the problem with this is that "rsnapshot daily", for example, will simply copy (with hard links) your "hourly.23" to "daily.0". So if your computer was actually turned off for some days (and thus "hourly.23" has the backup of several days ago) you will get an old backup in "daily.0", which is misleading IMHO... this is a problem with rsnapshot though, haven't found any hack for the moment to get around it.
Offline
While I feel Nareto has added some useful info. to this thread, it was solved years ago. I am unsure if the OP will see the reply. In accordance to forum policy I close this thread. If further discussion is necessary, please start a new one. Thanks.
aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies
Offline
Pages: 1
Topic closed