Unisonを使った遠隔地へのバックアップ

先日は、家庭用ファイルサーバーで定期的にバックアップを行うにて同一拠点内のミラーリングの方法について書き込みしたが、今回は遠隔地のサーバーを利用してミラーリングする方法について書き込みしたい。(一応ディザスターリカバリーといえるか??)
Linxuサーバーどうしてあれば、rsyncを利用してセキュアにコピーすることができるが、Windows環境とLinux環境ではcygwinを入れなければならなかったりと大変だ。
インターネットで調べていたらUnisonとplinkによるミラーリング方法についてLinux Home Server Memoに有益な情報があったので、これを参考に行ってみた。
ただ、同じようにやってみてもplink側でserverオプションがないといわれてしまう。試行錯誤してみたところsync.batを以下のように書き換えてみたらうまくいった。

rem Create batch script to launch plink
echo @%PLINK_PATH% -ssh -P %SSH_PORT% %%4 %%5 %SSH_USER%@%SSH_HOST% unison -server > %SSH_LAUNCH_SCRIPT%
rem Run unison (which in turn will call the plink batch script just created)
%UNISON_PATH% -sshcmd %SSH_LAUNCH_SCRIPT% -rshargs “-pw %SSH_PASSWORD%” %UNISON_CMD% %UNISON_OPTIONS%

のところを

rem Create batch script to launch plink
echo @%PLINK_PATH% -ssh -P %SSH_PORT% -pw %SSH_PASSWORD% %SSH_USER%@%SSH_HOST% unison -server > %SSH_LAUNCH_SCRIPT%
rem Run unison (which in turn will call the plink batch script just created)
%UNISON_PATH% -sshcmd %SSH_LAUNCH_SCRIPT% %UNISON_CMD% %UNISON_OPTIONS%

ちなみに参考サイトでは、SSH_PASSWORD、LOCAL_ROOT、REMOTE_ROOTを直接書き換えていますが、引数で呼び出せるように設計されているので、
rsync.bat (パスワード) (コピー元サーバーパス) (コピー先サーバパス)
とすることで複数のバックアップパスを指定できる。
FastCopyと違う点といえば、完全に同期するということだ。なので、バックアップ用として利用しようとすると、コピー先サーバー上でファイルが消失すると、コピー元のファイルも消えてしまう。また、コピー元でファイルを消したとしても、コピー先からダウンロードされてしまって復活してしまう。
この問題を解決するには、-force (基準パス名)オプションを利用することで回避することができる。基準パス名はコピー元サーバーパスとなるので、
set UNISON_OPTIONS=-contactquietly -times -batch -fastcheck true -force %LOCAL_ROOT%
としておけばバックアップツールとして利用することができる。
補足になるが、Unisonはバージョンが異なるとエラーが発生してコピーできない。Linux側のバージョンが古かったためなのだが、今回は例外的にWindows側のバージョンをLinux側のバージョンと一致させて対応した。過去のWindowsバージョンファイルはここにあるので参考にしてほしい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です