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:
- Weekly full repository dumps
- Daily incremental hotcopies
- 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