Inkremmentell backup till disk
Ett sätt att ta inkrementell backup är att hårdlänka alla filer som
inte har ändrat sig till den förra backuppen. Då behövs lika mycket
utrymme för backuppen som för alla filerna i det som skall backuppas
plus utrymme för alla ändringar.
Först måste en första fullständig backup tas och länken current pekas dit.
# TID=`date -Iseconds`
# cd /backup
# rsync -avx --exclude=/backup / $TID
# ln -s $TID current
#
För varje gång som det sedan ska tas en inkrementell backup så
skapas hårda länkar till alla filer från den backup current pekar på
till den nya inkrementella backupen.
Sedan kopieras alla ändringar dit med rsync.
# TID=`date -Iseconds`
# cd /backup
# cp -dRflp current $TID
# rsync -avx --exclude=/backup / $TID
# rm -f current
# ln -s $TID current
#
Nedan följer ett exempel på hur man kan stoppa in det hela i ett
script som kan köras varje gång det är lämpligt att ta
backup. Scriptet är gjort för att ta backup för ett gäng datorer över
ssh till olika kataloger, men om man bara kör lokalt så kan man
förstås ta bort det där med att köra rsync över ssh.
#!/bin/bash
if test "$#" != "3" ; then
echo Användning: datornamn orginal-katalog backup-katalog
echo Exempel: coloc123.domain.com /etc /disk1/backup-inkrementell
exit
fi
DATOR=$1
SRC=$2
DEST=$3
#TID=`date +%Y-%m-%d_%H.%M.%S`
TID=`date -Iseconds`
BACKN=snapp-${DATOR}-`echo ${SRC}|sed 's/\//_/g'`-$TID
CURR=current-${DATOR}-`echo ${SRC}|sed 's/\//_/g'`
if test ! -w "$DEST" ; then
echo $DEST saknas eller är ej skrivbar
exit 5
fi
pushd $DEST >/dev/null
if test ! -L $CURR ; then
echo Varning, current saknas, gör en ny fullständig kopiering
else
CURRDIR=`readlink $CURR`
cp -dRflp $CURRDIR $BACKN
fi
popd >/dev/null
rsync -a -v -x -e 'ssh -o StrictHostKeyChecking=no' --timeout=600 --delete root@${DATOR}:${SRC} ${DEST}/
${BACKN} || exit 5
pushd $DEST >/dev/null
rm -f ${CURR}
ln -s ${BACKN} ${CURR}
popd >/dev/null