Backup
「Subversion のバックアップ。」
日頃はダンプだけで間に合っていたのだが、恩師のところに Subversion 環境を構築すると、リポジトリが巨大だったため、急遽、差分バックアップで運用することにした。いいスクリプトがあれば…と検索したが、見つけられなかったため、リファレンスを見ながら Ruby で自作してみた。役立つようなら使ってくだされ。
月に 1 度だけフルバックアップして、その後は差分バックアップをする想定で作成したスクリプトだが、先にフルバックを行いさえすれば、サイクルは任意。使い方は次の通り。
FreeBSD で動作確認してるので、Ruby のパスさえ注意すれば Mac OS X と Unix 系なら問題なく動くはず。差分バックアップの方は変更がなければ何もしないので、気軽に cron で動かしておくのがいいかもしれない。まあ、両方とも cron で動かすつもりで書いているのだが…。Windows 環境で動くのかどうかは未確認だが、来週には確認することになる予定。
--- フルバックアップ用 (svnbackup_full.rb) #!/usr/local/bin/ruby require 'pathname' USAGE = <<EOS USAGE : ruby svnback_full <repository> <backup directory> EOS if ARGV.size < 2 puts USAGE exit end backup_base = Pathname.new ARGV[1] latest_file = Pathname.new backup_base.to_s + '/latest' youngest = `svnlook youngest #{ARGV[0]}`.to_i latest_file.open("w") {|file| file.print youngest } dump_name = backup_base.to_s + "/dump_0_#{youngest}.bak" `svnadmin dump #{ARGV[0]} --revision 0:#{youngest} > #{dump_name}`--- 差分バックアップ用 (svnbackup_diff.rb) #!/usr/local/bin/ruby require 'pathname' USAGE = <<EOS USAGE : ruby svnback_diff <repository> <backup directory> EOS if ARGV.size < 2 puts USAGE exit end backup_base = Pathname.new ARGV[1] latest_file = Pathname.new backup_base.to_s + '/latest' latest = latest_file.read.to_i youngest = `svnlook youngest #{ARGV[0]}`.to_i exit if latest == youngest latest_file.open("w") {|file| file.print youngest } latest += 1 dump_name = backup_base.to_s + "/dump_#{latest}_#{youngest}.bak" `svnadmin dump #{ARGV[0]} --revision #{latest}:#{youngest} --incremental > #{dump_name}`