Ответить на комментарий
Инкрементальный бекап svn
Опубликовано vladimir в Пнд, 05/25/2009 - 00:23SVN - наиболее распространенный и популярный вид 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 всех инкрементальных.
