MAGAZINE

キャリテク!マガジン

コラム

転ばぬ先のバックアップ (7) 外部ホストへファイルをバックアップしよう - rsync編 1

こんにちは。株式会社パイプラインの濱田です。前回前々回とsftpコマンドでリモートホストのファイルをバックアップしましたが、以下の要件を満たそうとする場合、sftpコマンドでのバックアップは不向きであると言わざるを得ません。

  • ディレクトリ単位で複数のファイルやディレクトリを再帰的にバックアップしたい
  • すべてのファイルをネットワーク越しに転送せず、更新されたファイルのみを転送するようにしたい
  • リモートホスト側で削除されたファイルはローカルホスト側でいつまでも保持したくない

このような要件を満たすバックアップを行うには、rsyncでのバックアップが最適でしょう。今回よりrsyncによるバックアップを取り上げます。

今回の実行環境 前提条件とrsync インストール

今回の実行環境は CentOS Linux release 7.9.2009 (Core) ですが、他のLinuxディストリビューションでも応用可能です。ただし、rsyncコマンドのインストール方法やコマンドのパスは異なることがありますので、適宜読み替えてください。ホストの構成は以下の通りです。

www.pipelinejp.comバックアップ対象ホスト(以下「www」と表記)。今回は /etc 以下をバックアップしたい。
back.pipelinejp.comバックアップ実行ホスト(以下「backup」と表記)。本ホストを発信契機として wwwをバックアップする。

www、backupともに一般ユーザー nullpopopo を作成し、backupからwwwへ公開鍵認証のSSH接続ができている、 ${HOME}/.ssh/known_hosts ファイルにwwwのホストキーが登録されていることが前提条件となります。この時点でbackup側の秘密鍵ファイル ${HOME}/.ssh/id_rsa が作成され、www側の${HOME}/.ssh/authorized_keys にはbackup側の秘密鍵と対になる公開鍵エントリが記述されているはずです。

rsyncコマンドはrsyncパッケージからインストールします。su - でrootユーザーに昇格した後、以下コマンドを実行してインストールします。(コマンド行は折り返されて複数行になっている場合もありますが、実際には1行です)

[root@backup ~]#yum install rsync

バックアップ事前準備

backup側のホームディレクトリにバックアップ用ディレクトリを作成します。バックアップ対象ホストが増えたときのために、BACKUPディレクトリ以下にバックアップ対象ホストごとのディレクトリを作成するとよいでしょう。(コマンド行は折り返されて複数行になっている場合もありますが、実際には1行です)

[nullpopopo@backup ~]$mkdir -p ${HOME}/BACKUP/www.pipelinejp.com

また、ディレクトリの誤削除を防止する観点から、ホスト名のディレクトリについて、オーナーをrootユーザーにします。(コマンド行は折り返されて複数行になっている場合もありますが、実際には1行です)

[nullpopopo@backup ~]$su -
[root@backup ~]#chown root. /home/nullpopopo/BACKUP/www.pipelinejp.com

次に、www backupともにsudoersファイルを作成し、nullpopopoユーザーがsudoコマンド経由でrsyncコマンドを利用できるようにします。プロンプトはwww表記ですが、2台のホストでrootユーザーが実行します。(コマンド行は折り返されて複数行になっている場合もありますが、実際には1行です)

[root@www ~]#echo -e "nullpopopo ALL=(ALL) NOPASSWD : /usr/bin/rsync" | tee /etc/sudoers.d/nullpopopo

sudoersファイル作成後は両ホストとのrootユーザーからexitして一般ユーザーに戻ります。

バックアップ取得

それでは、rsyncによるバックアップを実行してみましょう。以下例示では、wwwのIPアドレスを10.0.2.4と表記していますが、実環境にあわせて適宜読み替えてください。 (コマンド行は折り返されて複数行になっている場合もありますが、実際には1行です)

[nullpopopo@backup ~]$sudo rsync -auv --rsync-path='sudo rsync' --delete -e "ssh -i ${HOME}/.ssh/id_rsa" nullpopopo@10.0.2.4:/etc /home/nullpopopo/BACKUP/www.pipelinejp.com/

それではバックアップできたかを確認してみましょう。backupでlsコマンドを実行してみましょう。 (コマンド行は折り返されて複数行になっている場合もありますが、実際には1行です)

[nullpopopo@backup ~]$ ls -l /home/nullpopopo/BACKUP/www.pipelinejp.com/

上記コマンド実行後、${HOME}/BACKUP/ホスト名 のディレクトリ以下に etc ディレクトリが存在していればバックアップはひとまず成功です。コマンドの手動実行で首尾よくバックアップ取得ができましたので、以下の内容をcrontabに登録して2分おきにバックアップを取得することにします。

0-58/2 * * * * sudo rsync -auv --rsync-path='sudo rsync' --delete -e "ssh -i
${HOME}/.ssh/id_rsa" nullpopopo@10.0.2.4:/etc
/home/nullpopopo/BACKUP/www.pipelinejp.com/

さて、今回はrsyncによるバックアップ取得設定を行いましたが、ディレクトリ単位での再帰的なバックアップや更新されたファイルのみの差分転送の実際については、次回あらためて解説いたします。

まずはエンジニアデビューしたい、という方は、3ヶ月間学びながらお給料が貰えるKCCSキャリアテック キャリテク!の門を叩いてみてはいかがでしょう。
https://www.kcct.co.jp/careetec/

関連記事

facebook シェアシェア
LINE シェアシェア