Tar backup av PVVs maskiner
This commit is contained in:
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
# CVS default ignores begin
|
||||
tags
|
||||
TAGS
|
||||
.make.state
|
||||
.nse_depinfo
|
||||
*~
|
||||
\#*
|
||||
.#*
|
||||
,*
|
||||
_$*
|
||||
*$
|
||||
*.old
|
||||
*.bak
|
||||
*.BAK
|
||||
*.orig
|
||||
*.rej
|
||||
.del-*
|
||||
*.a
|
||||
*.olb
|
||||
*.o
|
||||
*.obj
|
||||
*.so
|
||||
*.exe
|
||||
*.Z
|
||||
*.elc
|
||||
*.ln
|
||||
core
|
||||
# CVS default ignores end
|
||||
180
backup.sh
Executable file
180
backup.sh
Executable file
@@ -0,0 +1,180 @@
|
||||
#!/usr/local/bin/bash
|
||||
#
|
||||
# Hjemmesnekret script som tar backup av PVV-servere.
|
||||
#
|
||||
# orjane - 2008.11.10
|
||||
#
|
||||
# Oppdatert av pederbs og yorinad 2017.02.04
|
||||
#
|
||||
|
||||
#for å legge til en backup jobb:
|
||||
# zfs create alphys-zdata/backupz/%name%
|
||||
#
|
||||
#sørg for at alphys kan logge inn som brukerene på boksen uten passord:
|
||||
#
|
||||
#ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsCm6f5JOlKDbZMiQ6rXvU35QU4Gs/WKKlZymXtFxPhK5jBoZskQjNhfsr+peuhnZ1y+04L9qEBkN3jN0ThROaRaKSFVWfnMnij7pEB0bmJRxDmkQsHL7YsAm6tPn8116tt9m9ASPYE5RpnaDGtxTP7uXa42URvwXdvWY618tdX4z39JG9f85KYexhwRbhaBMLnSPH6JKCKu1tTBwr7oEbuhLFrFXQwqWRip/oN/6/eSxnIrwaey1GM+CdNfeGh/0OeQJ4XIUas2WbgiQRw6Dkxo32FeFS5LVaOYWRys6W3Znw9a9yOYImjJ8WUmiwSeN2bksUizNBNA1HBhoKGM5b root@alphys
|
||||
#
|
||||
|
||||
|
||||
echo "PVV; hjemmelaget backupscript (2017.03.16 \$Revision: 1.40 $)"
|
||||
echo
|
||||
echo $(date)
|
||||
|
||||
|
||||
# Blir brukt som navn på ZFS-snapshot og logger.
|
||||
snapshot=`date +%Y%m%d`
|
||||
if [ "x$1" = "xfull" ]; then # Fullbackupen starter før midnat, legg på en dag
|
||||
snapshot=`date -v +1d +%Y%m%d`
|
||||
fi
|
||||
|
||||
lockfile="/backupz/backup.sh.lock"
|
||||
|
||||
if [ -e $lockfile ]; then
|
||||
pid=$(cat $lockfile)
|
||||
|
||||
# TODO: Bruk bedre metode for å finne prosess.
|
||||
if ps -p $pid ; then
|
||||
echo "Backup kjører allerede:" `cat $lockfile`
|
||||
exit -1
|
||||
fi
|
||||
|
||||
echo "Forrige backup ble avbrutt, rydder opp..."
|
||||
rm $lockfile
|
||||
|
||||
zfs snapshot -r backupz@avbrutt_${snapshot} && \
|
||||
echo "ZFS-snapshot OK." || echo "ZFS-snapshot FEILET!"
|
||||
|
||||
# TODO: zfs rollback til forrige komplette backup.
|
||||
|
||||
echo "Ferdig med oppryddingen."
|
||||
fi
|
||||
|
||||
# Fang SIGINT, vi vil rydde opp om vi blir avbrutt.
|
||||
trap "rm $lockfile; echo 'Avbrutt, sletter låsfil...'; exit -2" SIGINT
|
||||
echo $$ > $lockfile
|
||||
|
||||
echo "Sjekker at det er nok ledig plass på disken..."
|
||||
/bin/df -h /backupz/
|
||||
#while [ $(/bin/df /backupz/ | /usr/bin/awk '/^backupz/{print $4}' ) -lt 100000000 ] ; do
|
||||
while [ $( zfs get -Hp available alphys-zdata/backupz | cut -f3 ) -lt 4000000000 ] ; do
|
||||
echo; echo "Disken er nesten full, rydder"; echo
|
||||
min_backups=5
|
||||
if [ $(zfs list -t snapshot | grep backupz@ | wc -l) -lt $min_backups ]; then
|
||||
echo; echo "Mindre enn $min_backups backups lagret, feiger ut fra sletting"; echo
|
||||
break;
|
||||
fi
|
||||
oldest=$(zfs list -t snapshot | grep backupz@ | head -n1 | tr @ ' ' | awk '{print $2}')
|
||||
echo "Kjører zfs destroy på alle disker @$oldest"
|
||||
for d in $(zfs list | grep ^backupz | awk '{print $1}'); do
|
||||
zfs destroy "$d@$oldest"
|
||||
done
|
||||
/bin/df -h /backupz/
|
||||
echo
|
||||
done
|
||||
|
||||
echo "Starter backup..."
|
||||
|
||||
#export RSYNC_RSH="ssh -c arcfour -v"
|
||||
export RSYNC_RSH="ssh -v"
|
||||
rsync="/usr/local/bin/rsync"
|
||||
rsync_flags="--archive --hard-links --delete --numeric-ids --stats --inplace --relative"
|
||||
logdir="/backupz/log"
|
||||
|
||||
exclude_file="/backupz/homepvv.exclude"
|
||||
|
||||
# Gjør selve overføringen.
|
||||
# Start på en liste over PID vi skal vente på.
|
||||
venteproc=""
|
||||
|
||||
# Gjør "full"-backup på søndager.
|
||||
if [ "x$1" = "xfull" ]; then # Det er søndag
|
||||
echo "Det er søndag; tar «full»-backup."
|
||||
rsync_flags="${rsync_flags} --checksum"
|
||||
fi
|
||||
|
||||
echo "Snapshot ID: $snapshot"
|
||||
echo
|
||||
echo
|
||||
|
||||
# knakelibrak (wiki)
|
||||
command="${rsync} ${rsync_flags}\
|
||||
wiki:/var/lib/mediawiki /backupz/wiki/"
|
||||
$command >${logdir}/wiki.out.$snapshot 2>&1 &
|
||||
venteproc="$venteproc $!"
|
||||
echo "Startet $!: $command"
|
||||
|
||||
# knakelibrak (databases)
|
||||
command="${rsync} ${rsync_flags}\
|
||||
knakelibrak:/var/backups/databases /backupz/databases/"
|
||||
$command >${logdir}/knakelibrak.out.$snapshot 2>&1 &
|
||||
venteproc="$venteproc $!"
|
||||
echo "Startet $!: $command"
|
||||
|
||||
# skrotnisse
|
||||
command="${rsync} ${rsync_flags}\
|
||||
skrotnisse:/var/www/ skrotnisse:/srv/ /backupz/skrotnisse/"
|
||||
$command >${logdir}/skrotnisse.out.$snapshot 2>&1 &
|
||||
venteproc="$venteproc $!"
|
||||
echo "Startet $!: $command"
|
||||
|
||||
# dash8
|
||||
command="${rsync} ${rsync_flags}\
|
||||
dash8:/var/lib/bitlbee/ /backupz/dash8/"
|
||||
$command >${logdir}/dash8.out.$snapshot 2>&1 &
|
||||
venteproc="$venteproc $!"
|
||||
echo "Startet $!: $command"
|
||||
|
||||
# tim (web)
|
||||
command="${rsync} ${rsync_flags}\
|
||||
tim:/var/lib/squirrelmail /backupz/web/"
|
||||
$command >${logdir}/tim.out.$snapshot 2>&1 &
|
||||
venteproc="$venteproc $!"
|
||||
echo "Startet $!: $command"
|
||||
|
||||
# homepvv
|
||||
command="${rsync} ${rsync_flags} --exclude-from=${exclude_file} \
|
||||
--log-file=${logdir}/homepvv.log.$snapshot \
|
||||
homepvv:/ /backupz/homepvv/ "
|
||||
$command >${logdir}/homepvv.out.$snapshot 2>&1 &
|
||||
venteproc="$venteproc $!"
|
||||
echo "Startet $!: $command"
|
||||
|
||||
## Andre ting som skal kopieres her...
|
||||
|
||||
|
||||
echo
|
||||
echo "Rsync er i gang."
|
||||
|
||||
# Vent til rsync er ferdig.
|
||||
echo "Venter til rsync er ferdig: $venteproc"
|
||||
for i in $venteproc ; do
|
||||
wait $i
|
||||
feilkode=$?
|
||||
if [ $feilkode -eq 0 ]; then
|
||||
echo "$i: OK"
|
||||
else
|
||||
echo "$i: Rsync returnerte feil (${feilkode})."
|
||||
fi
|
||||
done
|
||||
|
||||
echo
|
||||
echo "Rsync er ferdig."
|
||||
|
||||
# Gjør hjemmemappene lesbare bare for brukeren.
|
||||
find /backupz/homepvv/export/home/pvv -maxdepth 2 -mindepth 2 -exec chmod 700 {} \;
|
||||
# Touch home slik at timestamp på snapshot blir når backup var ferdig.
|
||||
touch /backupz/homepvv/export/home
|
||||
|
||||
# Ta et zfs snapshot
|
||||
echo "Tar ZFS-snapshot..."
|
||||
|
||||
zfs snapshot -r backupz@${snapshot} && \
|
||||
echo "ZFS-snapshot ferdig." || echo "ZFS-snapshot FEILET!"
|
||||
echo
|
||||
echo Ledig plass: $(zfs list -H -o avail backupz)
|
||||
echo
|
||||
|
||||
# TODO: Slett enkelte gamle snapshots?
|
||||
|
||||
echo "Backup ferdig: $(date)"
|
||||
rm $lockfile
|
||||
Reference in New Issue
Block a user