Optimal Subversion Backup Strategies: svnadmin dump vs. filesystem snapshots for Linux servers


2 views

When maintaining Subversion repositories on Debian servers, administrators often debate between two primary backup approaches:

# Method 1: Repository dump
svnadmin dump /path/to/reponame > reponame.dump

# Method 2: Filesystem backup
tar -cvzf svn.backup.tar.gz /var/subversion/

svnadmin dump advantages:

  • Creates portable backup files that can be restored on any SVN server version
  • Allows selective repository restoration (specific revisions)
  • Verifies repository integrity during dump process

Filesystem backup advantages:

  • Faster execution for large repositories
  • Preserves all repository metadata and hooks
  • Simpler restoration process

For environments with few repositories, I recommend using svn-hot-backup (now maintained as svnadmin hotcopy):

#!/bin/bash
SVN_REPOS="/var/subversion"
BACKUP_DIR="/backups/svn"
DATE=$(date +%Y%m%d)

for repo in $(ls $SVN_REPOS); do
  svnadmin hotcopy $SVN_REPOS/$repo $BACKUP_DIR/${repo}_$DATE --clean-logs
done

# Optional rotation (keep last 7 backups)
find $BACKUP_DIR -name "*_*" -type d -mtime +7 -exec rm -rf {} \;

For mission-critical systems, implement a hybrid approach:

  1. Weekly full repository dumps
  2. Daily incremental hotcopies
  3. Regular verification with svnadmin verify

Example verification command:

svnadmin verify /var/subversion/myrepo --quiet

Create a reliable backup service:

# /etc/systemd/system/svn-backup.service
[Unit]
Description=Subversion Backup Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/svn-backup.sh

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/svn-backup.timer
[Unit]
Description=Daily Subversion Backup

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

When backing up Subversion repositories on Debian systems, you have two primary approaches:

# Method 1: svnadmin dump
svnadmin dump /path/to/repository > repo_full.dump

# Method 2: Filesystem snapshot
tar -cvzf svn_backup.tar.gz --exclude='locks' /var/svn/repositories/

svnadmin dump advantages:

  • Creates portable, version-independent backup files
  • Allows selective repository restoration
  • Clean output format for version control

Filesystem backup advantages:

  • Faster backup process for large repositories
  • Preserves all repository metadata
  • Simpler restore procedure

For reliable backups in production environments, consider this enhanced script:

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/svn"
REPO_PATH="/var/svn/repositories"

# Create backup directory
mkdir -p $BACKUP_DIR/$DATE

# Backup each repository
for repo in $(ls $REPO_PATH); do
  # Hot copy for safety
  svnadmin hotcopy $REPO_PATH/$repo $BACKUP_DIR/$DATE/$repo
  
  # Compress backup
  tar -czf $BACKUP_DIR/$DATE/${repo}_${DATE}.tar.gz -C $BACKUP_DIR/$DATE $repo
  
  # Cleanup
  rm -rf $BACKUP_DIR/$DATE/$repo
done

# Retention policy (keep 30 days)
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;

From svnadmin dump:

svnadmin create new_repo
svnadmin load new_repo < repo_full.dump

From filesystem backup:

tar -xzvf svn_backup.tar.gz -C /var/svn/restored_repo
chown -R www-data:www-data /var/svn/restored_repo
  • Always verify backups with svnadmin verify
  • Schedule backups during low-usage periods
  • Test restore procedures periodically
  • Consider using svnsync for live mirroring