Ключевые слова:python, backup, subversion, svn, (найти похожие документы)
From: Владимир Русинов <vladimir@greenmice.info.>
Date: Mon, 23 Oct 2010 17:02:14 +0000 (UTC)
Subject: Инкрементальный бекап SVN
Оригинал: http://greenmice.info/ru/node/117
SVN - наиболее распространенный и популярный вид vcs. Очень многие
проекты используют именно его, и потеря данных оттуда хоть и не
смертельна (наверняка у разработчиков есть все необходимое в рабочих
копиях), но очень неприятна. Поэтому все же стоит озаботиться ведением
бекапов.
Однако бесмысленно каждый день делать полные дампы репозитоиев, тем
более svn позволяет легко делать инкрементальный бекап. Для себя я это
решил двумя скриптами.
Первый: полный бекап - выполняется в моем случае раз в неделю.
#!/bin/sh
BACKUP_DIR=/home/backup/svn/
SVN_DIR=/var/svn # directory where repos located
DATE=`date +%Y_%m_%d-%H_%M`
#---------------------
cd $SVN_DIR
for repo in *; do
# skip non-dirs
if [ -d $repo ]; then
# preparing
mkdir -p "$BACKUP_DIR/$repo/weekly/"
NEWREV=`svn log -r head file://"$SVN_DIR/$repo"/ | egrep "r[0-9]+" | cut -d "r" -f 2 | cut -d " " -f 1`
FILENAME="$repo-$DATE-$NEWREV.dump"
FILEPATH="$BACKUP_DIR/$repo/weekly"
# crearing dump
svnadmin dump -q -r 0:$NEWREV "$SVN_DIR/$repo" > "$FILEPATH/$FILENAME"
echo -n $NEWREV > "$BACKUP_DIR/$repo/svnrev"
# compressing
bzip2 "$FILEPATH/$FILENAME"
# cleaning
rm -f "$BACKUP_DIR/$repo/inc/"* 2> /dev/null
find "$BACKUP_DIR/$repo/weekly/" -not -name "$FILENAME"* -and -type f | xargs rm -f
fi
done
Второй - выполняется каждый день и сохраняет только те ревизии, которые
были сделаны с момента последнего бекапа:
#!/bin/sh
BACKUP_DIR=/home/backup/svn/
SVN_DIR=/var/svn
DATE=`date +%Y_%m_%d`
##------------------------
cd $SVN_DIR
for repo in *; do
if [ -d "$repo" ]; then
OLDREV=`cat $BACKUP_DIR/$repo/svnrev`
NEWREV=`svn log -r head file://"$SVN_DIR/$repo"/ | egrep "r[0-9]+" | cut -d "r" -f 2 | cut -d " " -f 1`
if [ $OLDREV != $NEWREV ]; then
OLDREV=$(($OLDREV+1))
mkdir -p "$BACKUP_DIR/$repo/inc/"
svnadmin dump -q -r $OLDREV:$NEWREV --incremental "$SVN_DIR/$repo" > "$BACKUP_DIR/$repo/inc/$repo-$OLDREV-$NEWREV.dump" || continue
bzip2 "$BACKUP_DIR/$repo/inc/$repo-$OLDREV-$NEWREV.dump" || continue
echo -n $NEWREV > "$BACKUP_DIR/$repo/svnrev"
fi
fi
done
Восстанавливать: сначала svnadmin load полного бекапа, потом - svnadmin
load всех инкрементальных.