Pocket

rsyncとSSHを使ったリモートバックアップ

  • add this entry to hatena bookmark

業務にて、rsyncを使ったリモートバックアップを久しぶりに導入する事になったので、設定内容を記載しています。

今回の要件

今回の要件は以下になります。

  1. インターネットを経由したサーバー間でリモートバックアップを行う。
  2. インターネットを経由するので、通信経路はsshを用いる。
  3. バックアップ対象ファイルは、数十GBある。
  4. ローカルホスト上には、複数のアカウントがあり、バックアップ対象ファイルはアカウント毎に存在する。リモートホストには同一のアカウント情報を配備し、ローカルホスト上のファイルオーナーやパーミッションを反映させた上で保存する。
  5. このバックアップ自体は、恒久的なバックアップではなく、サーバー移行を実現する為にファイルを別サーバに移行する事が目的となる。

これらの要件を満たす為に、rsyncを使ったバックアップを設計し導入する事になります。

方針

以下の方針にて、導入を行いました。

  1. 今回のバックアップ要件を導入するホストは、Linux系とFreeBSD系が混在していたが、同一のrsyncバージョンを導入する事によって、OSの差異を吸収する。
  2. バックアップ対象のファイルやディレクトリの、オーナーやパーミッションをそのまま反映させる必要があるので、rsyncコマンドの実行はrootアカウントで行う。
  3. 今回の目的がサーバ移行であり、恒久的なバックアップの仕組みを導入する事ではないので、サーバー間の接続は都度パスフレーズを入力する。

rsyncとsshの関係(暗号化された通信網でのファイル転送)

rsyncコマンドに「-e ssh」オプションを付けて、rsyncコマンドをローカルホスト上で実行する事によって、以下の流れになります。

  1. ローカルホスト上で、rsyncが起動する
  2. ssh経由でリモートホストにログインする(以降の通信は暗号化されたssh通信上で実現)
  3. リモートホスト上でrsyncが起動し、ローカルホスト上のrsyncと通信する

一つのコマンドライン(rsync)で、sshを使った通信を使えるのは便利です。

なお、リモートホストに対してssh接続を行うユーザーはrootになる為、通常は無効にしておくべき「rootによるsshログイン」をリモートホスト上で有効にする必要があります。/etc/ssh/sshd_config の「PermitRootLogin」が該当します。

アカウント情報について

今回の環境では、複数(数百~数千)のアカウントがローカルホスト上に存在しました。

バックアップを行う上で、リモートホスト上でも元のファイルオーナーやパーミッションを反映させる必要がある為、rsyncを行う前に、アカウント情報(/etc/passwd, /etc/shadow, /etc/group)をリモートホストに反映させておきました。

rsyncでは、オーナー権限を反映させる際には、アカウント名称やグループ名称を用いるのではなく、uidとgidを用いる事になります。

よって、アカウント情報をリモートホストに反映する前にrsyncを実行してもローカルホストに存在したuidとgidがリモートホスト上で反映されると思います。その後にアカウント情報をリモートホストで反映させれば問題はないわけですが、rsyncを使って数回の同期作業を行う為、作業する人が分かりやすいようにシンプルにアカウント情報を先行で反映させました。

導入環境とコマンド

以下の環境がリモートバックアップを導入する環境となります。

ローカルホスト名 localhost rsyncコマンドをローカルホストで発行するのでローカルホスト名は未使用
バックアップ対象 /home このディレクトリ配下のディレクトリやファイルを、オーナーやパーミッションを維持してリモートホストにバックアップ
リモートホスト名 remote.example.jp バックアップを保存するリモートホスト名(実際は存在しない便宜上の名称)
バックアップ先 /home リモートホスト上のディレクトリであり、バックアップが保存される場所

ローカルホスト上のrootアカウントで実行するrsyncコマンドは以下になります。

# rsync -av -e ssh --bwlimit=5 /home/ remote.example.jp:/home

このrsyncコマンドを実行すると、リモートホストのrootアカウントのパスフレーズ入力が求められますので、正しい値を入力します。その後、rsyncによるバックアップが開始されます。

なお、上記載のrsyncコマンドのオプション説明は以下になります。

-a アーカイブモードであり、使いやすいオプションです。-rlptgoDと同じ意味になります。(後述)
-v verboseモードであり、実行結果の情報を表示するオプションです。必ず付けるくらいで良いです。
-e sshでリモートホストに接続する場合、「-e ssh」と指定します。
–bwlimit I/O帯域を指定した値(KBytes per sec)で制限します。WAN帯域を占有しないように適度な値を設定します。

なお、「-a」オプションでは上記載のとおり「-rlptgoD」オプションと同等になります。これらのオプションの説明は以下になります。

-r recurse into directories
-l copy symlinks as symlinks
-p preserve permissions
-t preserve modification times
-g preserve group
-o preserve owner (super-user only)
-D same as –devices –specials

-D で出てきたオプションは以下です。

–devices preserve device files (super-user only)
–specials preserve special files

※ preserve — 維持する。保存する。

補足:インストール

rsyncがOSに入っていない場合、以下のコマンドでインストールをします。

# rpm -qa | grep rsync
#
# yum install rsync
# which rsync
/usr/bin/rsync
#
Pocket

コメントを残す

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


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。