Subversion版本库大小和备份文件的区别

一个5.2 GB的Subversion版本库大小为339个版本。

当我使用Perl脚本运行备份时,文件大小的最终结果是28 GB。

我可以知道,这是可能的。 我很困惑。

备份脚本如下。

#!/usr/bin/perl my $svn_repo = "/subversion/REPONAME"; my $bkup_dir = "/mnt/Subversion/SVN-Backups/REPO_DIR/"; my $bkup_file = "REPONAME_backup-"; my $bkup_svr = "my.backup.com"; my $bkup_svr_login = "backup"; $bkup_file = $bkup_file . `date +%Y%m%d-%H%M`; chomp $bkup_file; my $youngest = `svnlook youngest $svn_repo`; chomp $youngest; my $dump_command = "svnadmin -q dump $svn_repo > $bkup_dir/$bkup_file"; print "\nDumping Subversion repo $svn_repo to $bkup_file...\n"; print `$dump_command`; print "Backing up through revision $youngest... \n"; print "\nCompressing dump file...\n"; print `gzip -9 $bkup_dir/$bkup_file\n`; chomp $bkup_file; my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz"; print "\nCreated $zipped_file\n"; 

Subversion使用复杂的压缩。 但是,您使用最大的压缩率来备份您的备份,并且您的备份文件仍然比存储库大得多。 如果您的存储库包含许多相同的文件,这可以通过表示共享来解释:

“虽然从一开始,分离存储就已经成为Subversiondevise的一部分,但是多年来还是有了进一步的改进,使用Subversion 1.4或更高版本创build的Subversion版本库受益于压缩文件内容的全文表示。 Subversion 1.6或更高版本进一步享受了表示共享所带来的磁盘空间节约,这种function允许多个文件或文件修订具有相同的文件内容来引用该数据的单个共享实例,而不是每个实例具有其自己独特的副本。 来源和更多细节

要进一步缩小备份文件,您可以切换algorithm。 bzip2矿LZMA的压缩率较好,但比gzip慢。

你可以通过使用svn export将版本库svn export到testing目录来testing。 如果按照您在备份脚本中所做的方式压缩该导出,则生成的文件大小应该大致相同。

这就是为什么我使用svadmin hotcopy而不是svnadmin转储进行备份。 hotcopy的缺点是你不能在版本1.8之前进行增量。 但是hotcopy至less会给你和subversion repostiory一样的压缩。