rsyncでファイルバックアップ

rsyncについて少し勉強したので備忘。

rsyncコマンドを使ってファイルをバックアップする手法を説明します。

rsyncは内部でSSH接続してリモート側でサーバモードのrsyncを起動してファイルのやり取りを行います。
なので、src/dst両方にrsyncがインストールされている必要があります。

また、SSH接続を行うので、rootログインはNGとか、パスワードなし認証はNGとか、そう言ったしがらみもあると思うのですが、なるべくセキュリティにも配慮して、且つcronなどによる定期的なバックアップする手法を考えてみます。


そう言ったわけで、今回の目標は以下のとおりです。

  • cronで定期的に実行できる
  • 対象のディレクトリにあるファイルは全てバックアップできる
  • バックアップサーバ側にログを保管できる
  • ある程度のセキュリティを担保する

まず、cronで実行できるようにするには、SSHでパスワードを求められないようにする必要があります。
次に、対象ディレクトリのすべてのファイルとなると、root権限で実行できる必要があります。
まずは、これらの二点をクリアするための設定を行います。

 

まずは、バックアップ用のユーザを作成します。
src側、dst側、両方で作成してください。
※今回の手順ではsrc:ターゲットサーバ、dst:バックアップサーバです。

 

続いて、src側でrsync_userのSSH鍵ペアを作成し、dst側へ公開鍵を送付します。
SSH鍵はパスフレーズなしで作成します。

 

次に、dst側でrsync_userにsudo権限を付与と、authorized_keysファイルを編集します。
rsync_userはsudo時にrsyncコマンドしか使えないようにします。
authorized_keysファイルを使用して、パスフレーズ無しのSSH鍵に対し制限をかけます。
SSH時の制限については後に再度編集します。
ついでにバックアップ先ディレクトリも作成します。

 

これで、おおよその準備は完了です。(まだ少しあります)

rsyncコマンドを実際に実行してみます。

オプションの内訳は以下のとおりです。
不要なものは除外してください。

-a アーカイブモード ファイルの属性等を維持する。
-vv 詳細情報 dst側実行コマンドを表示する。
-z 圧縮転送
-S スパースファイルを維持
–delete 削除されたファイルをdst側でも削除
-e ‘ssh -l ・・・’ rsync_userでパスフレーズなしSSH接続 必須
–rsync-path=’sudo rsync’ dst側でroot権限にパスワード無しで昇格 必須
–log-file=・・・ ログファイルのパス
–timeout=60 タイムアウトの設定
–bwlimit=12500 通信速度制限(kbyte) 100Mbpsに速度制限。
src側への負荷を軽減する目的で設定する。
dstat等でCPU負荷等を計測して必要に応じて設定。
–link-dest=・・・ 増分バックアップの比較対象ディレクトリ /backup/data/yyyymmdd/
でファイルをバックアップする前提で前日のバックアップを指定。
dstパスからの相対パスで指定します。
src dst リモート側はコロン(:)でホストとパスを区切る 必須

 

このコマンドを実行した際に表示されるメッセージの内、サーバ側で実行されるコマンドをコピーする。
以下の場合、”sudo rsync”を含む以降の部分。

コマンドは全体をダブルクォートで括るようにします。
途中にダブルクォートを含む文字列がある場合は、バックスラッシュでエスケープします。
また、vvオプションは出力内容が過多なので、vにしておきます。(任意)

これで、このSSH鍵を使用したパスフレーズなしの接続ではrsyncコマンドしか実行されなくなります。

 

再度、rsyncコマンドを実行して成功すればOKです。

こちらも、vvをvにすることをお忘れなく。

バックアップをリストアする際は、srcとdstを逆にして、–link-destを削除すればOKだと思います。
リストアはオペレーションで実行するのであれば、パスフレーズを無しにする設定は不要でしょう。

Pocket

, ,

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)