In mijn thuis situatie heb ik een QNAP (TS-412) actief waarop meerdere gebruikers hun bestanden kwijt kunnen. Nu had ik laatst het idee; wat als… Ja wat als. Wat als er brand uit breekt, of wat als de mooie polder waar ik mij in bevind weer onder water komt. Dan is het nodige kwijt.
Een disaster backup, of emergency backup is dan wel wenselijk. Maar dan geen dikke media files, geen duizenden foto’s of gedownloade installatiebestanden; nee.
Documenten. De digitalisering is redelijk toegeslagen en alle documenten van papier worden langzamerhand ingescanned of opgeslagen in een directory ‘Digiarchive’.
Hier heb ik, want zelf maken is leuker, een setup voor gebouwd en een script voor gemaakt. De setup is eenvoudig:
- 1x VPS op de eigen vCloud omgeving in Amsterdam met 300GB storage, Centos als een NFS server.
- 1x VPN IKE/IPsec
- 1x QNAP met SSH access
Op de NFS server moet het bestand /etc/exports gevuld worden. Hier moet verteld worden in welke map wie en hoe bij mag. In dit geval de map /var/data/vrieskist en de host 192.168.1.100 (QNAP):
/var/data/vrieskist 192.168.1.100(rw,sync,no_root_squash,no_subtree_check)
Daarna kan het script gemaakt worden in het bestand embackup.sh . Hierin zit een dependency voor het bestand to_backup. In dit bestand kan je alle directory’s of files aangeven welke je elke maand gebackuped wil hebben.
Het script werkt als volgt:
- Geen input bestand? Stop
- Directory waarin de mount moet zijn bestaat niet? Maak aan, bij fout: Stop
- Mount zelf bestaat niet? Maak aan, bij fout: Stop
- Bestaat dezelfde maand van vorig jaar? Delete deze
- Bestaat deze maand van dit jaar? Dan heeft de backup al gedraaid
- Kopieer de direcotory’s/bestanden
#!/bin/bash
if [ ! -f /share/Bartjan/Scripts/to_backup ]; then
# input file does not exists, failing
echo "No input file detected, exiting..."
exit 1
fi
if [ ! -d "/mnt/dcstore/vrieskist" ]; then
# dir does not exists, try to create
echo "Mountpoint directory does not exists"
echo "Trying make the mountpoint directory"
mkdir -p /mnt/dcstore/vrieskist 2> /dev/null
if [ $? -eq 0 ]; then
echo "Mount point directory created"
echo ""
else
echo "Cannot create mount point directory" >&2
exit 1
fi
elif [ -d "/mnt/dcstore/vrieskist" ]; then
echo "Mountpoint directory exists"
fi
if ! `grep -qs /mnt/dcstore/vrieskist /proc/mounts`; then
echo "Mountpoint directory does exists"
echo "Trying to make the mount"
mount -t nfs 192.168.100.14:/var/data/vrieskist /mnt/dcstore/vrieskist/ 2> /dev/null
if [ $? -eq 0 ]; then
echo "Mount point created"
echo ""
else
echo "Cannot create mount point" >&2
exit 1
fi
elif `grep -qs /mnt/dcstore/vrieskist /proc/mounts`; then
echo "Mount exists"
fi
# Looks like the critical parts are in place...
LASTYEAR=`date +%b_%Y --date="1 year ago"`
THISYEAR=`date +%b_%Y`
if [ -d "/mnt/dcstore/vrieskist/$LASTYEAR" ]; then
echo "$LASTYEAR: it exists"
rm -rf /mnt/dcstore/vrieskist/$LASTYEAR 2> /dev/null
if [ $? -eq 0 ]; then
echo "Directory $LASTYEAR purged"
echo ""
else
echo "Cannot remove directory $LASTYEAR" >&2
exit 1
fi
else
echo "$LASTYEAR: it does not exists"
fi
if [ -d "/mnt/dcstore/vrieskist/$THISYEAR" ]; then
echo "$THISYEAR: it exists. Probably no need to copy.."
else
echo "$THISYEAR: does not exists"
echo "Creating target directory"
mkdir /mnt/dcstore/vrieskist/$THISYEAR 2> /dev/null
if [ $? -eq 0 ]; then
echo "Target directory created"
echo ""
else
echo "Cannot create target directory" >&2
exit 1
fi
echo "Copying..."
echo ""
while read line; do
cp -a "$line" /mnt/dcstore/vrieskist/$THISYEAR/ 2> /dev/null
done < /share/Bartjan/Scripts/to_backup
if [ $? -eq 0 ]; then
echo "Copy succesfull!"
echo ""
else
echo "Failure: Cannot copy source to target directory" >&2
exit 1
fi
fi
exit 0
De output kan zijn:
[./Scripts] # .embackup.sh
Mountpoint directory exists
Mount exists
Mar_2016: it does not exists
Mar_2017: does not exists
Creating target directory
Target directory created
Copying..
Copy succesfull!
Maar ook het kan als volgt zijn:
[./Scripts] # .embackup.sh
Mountpoint directory does not exists
Trying make the mountpoint directory
Mount point directory created
Mountpoint directory does exists
Trying to make the mount
Mount point created
Mar_2016: it does not exists
Mar_2017: it exists. Probably no need to copy..
Het doel word hiermee simpel bereikt. Dit kan vast en zeker in bestaande software pakketten of misschien veel simpeler. Dit is nu zo gedaan vanwege de automatische restore van systeem settings op de Qnap. Na een reboot zijn mount points weg, directory’s in /mnt en zo nog een paar zaken. Het staat nu in de crontab van de QNAP dat het elke maar de eerste dag even draait.
Natuurlijk, het is ook vast vanuit de QNAP store middels een te installeren programma mogelijk naar een online cloud dienst en dat is prima. Maar ik heb nu de controle over wat, hoe en ook waar.