Subversionのリポジトリを、別のサーバーに移動したのでメモ
概要
svnリポジトリをserver1からserver2に移動した。
両方に同じバージョンのSuversionがインストール済み。
ちなみに、別のサーバーといっても、バックアップから作った別サーバーなので、UIDやGIDも含めて構成はほぼ同じです。
[user@server1 svn]$ pwd /var/svn [user@server1 svn]$ ls -l repos/ 合計 24 -rw-rw-r-- 1 svnuser svnuser 229 4月 10 13:25 README.txt drwxrwxr-x 2 svnuser svnuser 4096 4月 10 13:25 conf drwxrwsr-x 6 svnuser svnuser 4096 6月 1 19:39 db -r--rw-r-- 1 svnuser svnuser 2 4月 10 13:25 format drwxrwxr-x 2 svnuser svnuser 4096 4月 10 13:25 hooks drwxrwxr-x 2 svnuser svnuser 4096 4月 10 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 6月 1 20:58 README.txt drwxrwxr-x 2 svnuser svnuser 4096 6月 1 20:58 conf drwxrwsr-x 6 svnuser svnuser 4096 6月 1 20:58 db -r--r--r-- 1 svnuser svnuser 2 6月 1 20:58 format drwxrwxr-x 2 svnuser svnuser 4096 6月 1 20:58 hooks drwxrwxr-x 2 svnuser svnuser 4096 6月 1 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 6月 1 20:58 README.txt drwxrwxr-x 2 svnuser svnuser 4096 6月 1 20:58 conf drwxrwsr-x 6 svnuser svnuser 4096 6月 1 20:58 db -r--r--r-- 1 svnuser svnuser 2 6月 1 20:58 format drwxrwxr-x 2 svnuser svnuser 4096 6月 1 20:58 hooks drwxrwxr-x 2 svnuser svnuser 4096 6月 1 20:58 locks [user@server2 tmp]$ cd /var/svn/
dbにsgidがちゃんとあります。
[user@server2 svn]$ svnadmin verify /var/svn/repos/
svnadmin verifyで問題が出てこない事を確認。
一応、最初にserver1で実行したsvnadmin verifyと、リビジョン番号が同じ事を確認。