Subversionのリポジトリを、別のサーバーに移動したのでメモ

概要

svnリポジトリをserver1からserver2に移動した。
両方に同じバージョンのSuversionがインストール済み。
ちなみに、別のサーバーといっても、バックアップから作った別サーバーなので、UIDやGIDも含めて構成はほぼ同じです。

リポジトリ
/var/svn/repos
[user@server1 svn]$ pwd
/var/svn
[user@server1 svn]$ ls -l repos/
合計 24
-rw-rw-r-- 1 svnuser svnuser  229  410 13:25 README.txt
drwxrwxr-x 2 svnuser svnuser 4096  410 13:25 conf
drwxrwsr-x 6 svnuser svnuser 4096  61 19:39 db
-r--rw-r-- 1 svnuser svnuser    2  410 13:25 format
drwxrwxr-x 2 svnuser svnuser 4096  410 13:25 hooks
drwxrwxr-x 2 svnuser svnuser 4096  410 13:25 locks

dbにsgidが付いている。

現行のリポジトリを確認する

[user@server1 svn]$ svnadmin verify /var/svn/repos

問題が無かったので、リポジトリの移動を進める。
この時の、リビジョン番号を覚えておきます。

ホットコピーを取る

[user@server1 svn]$ sudo su svnuser
user@server1 Password:
[svnuser@server1 svn]$ svnadmin hotcopy /var/svn/repos/ /tmp/backup

svnadmin hotcopyは権限はそのままにしてくれますが、所有者はsvnadmin hotcopyの実行者になります。
一応、所有者を合わせるためにsvnuserになってからsvnadmin hotcopyをしました。
svnuserは/var/svnへの書き込み権限が無かったので、/tmp/backupにしました。

権限を保持したままtarで固める

[svnuser@server1 svn]$ tar czfv /tmp/backuprepos.tar.gz -p /tmp/backup

-pオプションで、権限を保持したまま圧縮する事ができます。

別サーバーにリポジトリとして設置する

backuprepos.tar.gzを、ftpやscpなどで、server2に移動します。

[user@server2 tmp]$ sudo su svnuser
user@server2 Password:
[svnuser@server2 tmp]$ pwd
/tmp
[svnuser@server2 tmp]$ tar xzfv backuprepos.tar.gz -p
[user@server2 tmp]$ ls tmp/backup/ -l
合計 24
-rw-rw-r-- 1 svnuser svnuser  229  61 20:58 README.txt
drwxrwxr-x 2 svnuser svnuser 4096  61 20:58 conf
drwxrwsr-x 6 svnuser svnuser 4096  61 20:58 db
-r--r--r-- 1 svnuser svnuser    2  61 20:58 format
drwxrwxr-x 2 svnuser svnuser 4096  61 20:58 hooks
drwxrwxr-x 2 svnuser svnuser 4096  61 20:58 locks

これでserver2の/tmp/tmp/backupにserver1の/var/svn/reposのコピーが出来ました。
権限を保持したまま取り出すために、解凍時も-pオプションを付ける必要があります。
ちなみに、svnuserになってから解凍してるのは、解凍したユーザが所有者となってしまうからです。
圧縮時に--same-ownerをつければ良かったのかもしれません。

[svnuser@server2 tmp]$ pwd
/tmp/tmp/backup
[svnuser@server2 tmp]$ sudo mv backup /var/svn/repos

server1と同じように/var/svn/reposに移動して完了です。

検証する

[user@server2 svn]$ ls /var/svn/repos/ -l
合計 24
-rw-rw-r-- 1 svnuser svnuser  229  61 20:58 README.txt
drwxrwxr-x 2 svnuser svnuser 4096  61 20:58 conf
drwxrwsr-x 6 svnuser svnuser 4096  61 20:58 db
-r--r--r-- 1 svnuser svnuser    2  61 20:58 format
drwxrwxr-x 2 svnuser svnuser 4096  61 20:58 hooks
drwxrwxr-x 2 svnuser svnuser 4096  61 20:58 locks
[user@server2 tmp]$ cd /var/svn/

dbにsgidがちゃんとあります。

[user@server2 svn]$ svnadmin verify /var/svn/repos/

svnadmin verifyで問題が出てこない事を確認。
一応、最初にserver1で実行したsvnadmin verifyと、リビジョン番号が同じ事を確認。