Help us understand the problem. What is going on with this article?

rsyncを使ってネットワーク経由でバックアップ

rsyncでバックアップcronを設定しました。
今後、Linuxサーバを立ち上げるたびに設定すると思うので、備忘録として残しておきます。

rsyncとは

UNIXシステムにおいて、ディレクトリの同期やバックアップを行うためのコマンドです。ネットワーク経由でバックアップできるため、別のPCにバックアップを集約することができます。
バックアップ先に、rsyncdが動作している必要があります。
私はSynology製のNASを立ち上げていて、rsyncサービスに対応しているため、それを使おうと思います。

以降の説明では、バックアップ先ホスト名を「synology.test.com」、バックアップ元ホスト名を「origin.test.com」としています。

バックアップ先にsshでログインできるようにする

バックアップ処理をcron化するためには、以下の条件を満たしておく必要があります。

・バックアップ先が公開鍵でsshログインを受け付けること
・公開鍵でパスフレーズなしでバックアップ先にsshログインできること
・設定情報でバックアップ先にsshログインできること

バックアップ先が公開鍵でsshログインを受け付けること

バックアップ先での設定です。

以下を参考にさせていただきました。
 Synology DiskStation で SSH 接続を公開鍵認証方式にする

(まだ設定していない場合、)sshdの設定を変更し、公開鍵でsshログインできるようにsshdを設定しておく必要があります。

/etc/ssh/sshd_config において、以下の部分のコメントをはずします。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

sshdを再起動します。(以下はSynology特有です)

> synoservicectl --reload sshd

公開鍵でパスフレーズなしでバックアップ先にsshログインできること

バックアップ元での作業です。

cron化したときに、毎回公開鍵のパスフレーズが聞かれてしまうとcron化できないので、パスフレーズなしの公開鍵ペアを作成します。

> cd ~/.ssh
> ssh-keygen -t rsa -f id_rsa_synology

このとき、パスフレーズが聞かれますが、何も指定せず、Enterのみを入力してください。
これで、id_rsa_synologyとid_rsa_synolog.pubの2つのファイル(公開鍵ペア)ができました。ファイルのパーミッションが、それぞれ、600、644となっていることを確認してください。.sshフォルダ自体は700です。

次に、id_rsa_synology.pubの内容をそのまま、バックアップ先の以下のファイルに追記します。

 ~/.ssh/authrized_keys

それでは、SSHで公開鍵ログインできることを確認しておきます。パスワード無しでログインできるかと思います。

> ssh -i ~/.ssh/id_rsa_synology synology.test.com

設定情報でバックアップ先にsshログインできること

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

sshのconfigファイルを使うと、ログイン時に利用する公開鍵ファイルやポート番号などの接続情報を定義しておくことができます。
以下を参考にさせていただきました。
 .ssh/configファイルでSSH接続を管理する

~/.ssh/configに以下を追記します。

Host synology_backup
        HostName synology.test.com
        User hogehoge
        IdentityFile /home/XXXXX/.ssh/id_rsa_synology

今度は、以下でログインできるようになります。

> ssh synology_backup

バックアップ先にバックアップフォルダを作成する

バックアップ先での作業です。

バックアップファイルが保存されるフォルダを作成します。
バックアップ先へのログインユーザは、バックアップ元で ~/.ssh/configに指定したユーザ(hogehoge)とします。

> mkdir ~/rsync_data

フォルダ名は自由です。

バックアップスクリプトを作成する

バックアップ元での作業です。

バックアップを実行するシェルスクリプトを作成します。

rsyncコマンドのパラメータは、以下を参考にさせていただきました。
 https://hackers-high.com/linux/rsync-backup-part2/

~/projects/cron/do_backup.sh
#!/bin/bash

NOW=`date +%Y%m%d-%H%M%S`
LOCALHOST_NAME='origin'
LOCAL_DIR='/home/XXXXX/projects'
TARGET_HOST='synology_backup'
TARGET_DIR="/var/services/homes/hogehoge/rsync_data/${LOCALHOST_NAME}"
TARGET_BACKUP="../${LOCALHOST_NAME}_backup/${NOW}"

rsync -az --delete --backup --backup-dir='"'${TARGET_BACKUP}'"' ${LOCAL_DIR} ${TARGET_HOST}:${TARGET_DIR}

変数化していますので、バックアップしたいフォルダ、バックアップ先のフォルダ等を変更してください。

LOCALHOST_NAME:バックアップ先にこのファルダ名で作成されます。複数のバックアップ元から作成されたときに重複しないようにするためです。
LOCAL_DIR:バックアップしたいバックアップ元のフォルダです。
TARGET_HOST:~/.ssh/configに指定した名前です。
TARGET_DIR:バックアップ先のフォルダ名です。
TARGET_BACKUP:これもバックアップ先のフォルダ名なのですが、これはファイルの削除履歴を保持するためのフォルダになります。

一度実行してみましょう。

> sh ~/projects/cron/do_backup.sh

バックアップ先のフォルダにバックアップされましたでしょうか?
成功していたら、以下のように、実行権限を与えておきましょう。

> chmod u+x ~/projects/cron/do_backup.sh

cron化する

バックアップ元での作業です。

それでは定期実行するために、cron化していきましょう。
以下を実行し、

> crontab -e

最後の行に追記します。

0 2 * * * /home/XXXXX/projects/cron/do_backup.sh

上記は、毎日2時にシェルスクリプトを実行するようにしています。
これで完成です。

以上

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away