Ubuntu+PerlでWebシステム開発 環境構築

  • Ubuntu20
  • Ubuntu18
  • Ubuntu16

cronとrsyncを使ったファイルバックアップ自動化

cronとrsyncを使ったファイルバックアップ自動化する方法を解説します。

バックアップサーバーにバックアップディレクトリを作成

バックアップサーバーにバックアップディレクトリを作成しましょう。「/datadrive」はすでに存在するとします。

mkdir -p /datadrive/backup

ファイルバックアップにはrsyncを使う

ファイルのバックアップにはrsyncを使います。

sudo rsync -e "ssh -p22" -av --delete /datadrive/ myapp@133.242.230.50:/datadrive/backup/datadrive/
sudo rsync -e "ssh -p22" -av --delete /etc_letsencrypt/ myapp@133.242.230.50:/datadrive/backup/etc_letsencrypt/

rsyncは、ディレクトリを再帰的にコピーでき、ファイルの差分だけをコピーしてくれるので、ファイルの更新は差分のチェックと差分のコピーの時間だけになります。

「--delete」オプションを指定しておくと、削除したファイルも検知してくれて、ミラーリングを行うことができます。

ファイルは本番機からバックアップ機に向かって転送する

ファイルは、本番機からバックアップ機に向かって転送します。セキュリティの理由で、本番機へのrootログインはSSHでは禁止されていると思われるからです。

バックアップしたいファイルの中には、root権限が必要なものもあります。

ですので、本番機側で、rsyncコマンドを実行して、バックアップ機に転送します。

秘密鍵と公開鍵のペアを作成し公開鍵をバックアップサーバーに登録する

本番機で、ssh-keygenコマンドを使って、秘密鍵と公開鍵のペアを作成し公開鍵をバックアップサーバーに登録しましょう。

rootのディレクトリに秘密鍵と公開鍵のペアを生成します。

sudo mkdir -p /root/.ssh
sudo chmod 700 /root/.ssh

# ファイル名は「/root/.ssh/id_rsa_backup」
sudo ssh-keygen -t rsa

公開鍵を表示します。

sudo cat /root/.ssh/id_rsa_backup.pub

表示された公開鍵をコピーしておきます。

バックアップサーバーで作業します。

mkdir -p ~/.ssh
chmod 700 ~/.ssh
cd ~/.ssh

公開鍵を登録します。「authorized_keys」ファイルを開いて、コピーした公開鍵を一番下に、張り付けます。

vi ~/.ssh/authorized_keys

これで、SSH公開鍵認証で、rsyncができるようになります。

sudo rsync -e "ssh -p22 -i /root/.ssh/id_rsa_backup" -av --delete /datadrive/ myapp@133.242.230.50:/datadrive/backup/datadrive/
sudo rsync -e "ssh -p22 -i /root/.ssh/id_rsa_backup" -av --delete /etc_letsencrypt/ myapp@133.242.230.50:/datadrive/backup/etc_letsencrypt/

バックアップ用のディレクトリも作成しておきましょう。

ファイルバックアップをrootのcrontabに登録する

実行するコマンドは本番機のrootのcrontabに登録しましょう。

rootのcrontabを以下のようにして開くことができます。

sudo crontab -e

crontabの中に、以下のようにバックアップのコマンドを記述します。sudoはcrontabには書かないので、注意してください。

時間は任意です。夜間の処理が少ない時間帯が良いと思います。

MAILはrsyncに失敗した場合に通知するメールアドレスです。詳細を表示する「-v」オプションは外しておきましょう。

MAILTO=kimoto.yuki@gmail.com

30 03 * * * rsync -e "ssh -p22 -i /root/.ssh/id_rsa_backup" -a --delete /datadrive/ myapp@133.242.230.50:/datadrive/backup/datadrive/
30 03 * * * rsync -e "ssh -p22 -i /root/.ssh/id_rsa_backup" -a --delete /etc_letsencrypt/ myapp@133.242.230.50:/datadrive/backup/etc_letsencrypt/

rsyncコマンドは「mkdir -p」のように複数階層のディレクトリを作れないことに注意しましょう。