Rsnapshot(Rsyncベース)-Linux用のローカル/リモートファイルシステムバックアップユーティリティ


rsnapshotは、Perl言語で記述されたオープンソースのローカル/リモートファイルシステムバックアップユーティリティであり、RsyncおよびSSHプログラムの能力を利用して、Linux/Unixファイルシステムのスケジュールされた増分バックアップを作成しますが、1つの完全バックアップと相違点のスペースのみを占有します。これらのバックアップをローカルドライブから別のハードドライブ、外付けUSBスティック、NFSマウントドライブに保存するか、ネットワーク経由でSSH経由で別のマシンに保存します。

この記事では、rsnapshotをインストール、セットアップ、および使用して、時間単位、日単位、週単位、月単位の増分ローカルバックアップ、およびリモートバックアップを作成する方法について説明します。この記事のすべての手順を実行するには、rootユーザーである必要があります。

ステップ1:LinuxにRsnapshotバックアップをインストールする

Red HatおよびDebianベースのディストリビューションを使用している場合、YumおよびAPTを使用したrsnapshotのインストールは若干異なる場合があります。

まず、EPELと呼ばれるサードパーティのリポジトリをインストールして有効にする必要があります。以下のリンクに従って、RHEL/CentOSシステムにインストールして有効にしてください。 Fedoraユーザーは、特別なリポジトリ構成を必要としません。

  1. Install and Enable EPEL Repository in RHEL/CentOS 6/5/4

セットアップが完了したら、図のようにコマンドラインからrsnapshotをインストールします。

# yum install rsnapshot

デフォルトでは、rsnapshotはUbuntuのリポジトリに含まれているため、図のようにapt-getコマンドを使用してインストールできます。

# apt-get install rsnapshot

ステップ2:SSHパスワードなしのログインを設定する

リモートLinuxサーバーをバックアップするために、rsnapshotバックアップサーバーはパスワードなしでSSH経由で接続できるようになります。これを実現するには、rsnapshotサーバーで認証するためのSSH公開鍵と秘密鍵を作成する必要があります。以下のリンクをたどって、rsnapshotバックアップサーバーで公開鍵と秘密鍵を生成してください。

  1. Create SSH Passwordless Login Using SSH Keygen

ステップ3:Rsnapshotを構成する

次に、いくつかのパラメーターを編集して、rsnapshot構成ファイルに追加する必要があります。 viまたはnanoエディターでrsnapshot.confファイルを開きます。

# vi /etc/rsnapshot.conf

次に、すべてのバックアップを保存するバックアップディレクトリを作成します。私の場合、バックアップディレクトリの場所は「/ data/backup /」です。次のパラメータを検索して編集し、バックアップの場所を設定します。

snapshot_root			 /data/backup/

また、「cmd_ssh」行のコメントを解除して、SSH経由でリモートバックアップを作成できるようにします。行のコメントを解除するには、次の行の前にある「#」を削除して、rsnapshotがデータをバックアップサーバーに安全に転送できるようにします。

cmd_ssh			/usr/bin/ssh

次に、rsnapshotはスナップショットを取得する頻度がわからなかったため、保持する古いバックアップの数を決定する必要があります。保存するデータの量、保持する間隔の追加、およびそれぞれの数を指定する必要があります。

デフォルト設定で十分ですが、それでも「月次」間隔を有効にして、より長期間のバックアップを実行できるようにしてください。このセクションを編集して、以下の設定のように表示してください。

#########################################
#           BACKUP INTERVALS            #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc.      #
#########################################

interval        hourly  6
interval        daily   7
interval        weekly  4
interval        monthly 3

編集する必要があるもう1つのことは、「ssh_args」変数です。デフォルトのSSHポート(22)を別のものに変更した場合は、リモートバックアップサーバーのそのポート番号を指定する必要があります。

ssh_args		-p 7851

最後に、バックアップするローカルおよびリモートのバックアップディレクトリを追加します。

ディレクトリを同じマシンにローカルでバックアップすることにした場合、バックアップエントリは次のようになります。たとえば、/ tecmintディレクトリと/ etcディレクトリのバックアップを取っています。

backup		/tecmint/		localhost/
backup		/etc/			localhost/

リモートサーバーディレクトリをバックアップする場合は、サーバーの場所とバックアップするディレクトリをrsnapshotに指示する必要があります。ここでは、rsnapshotサーバーの「/ data/backup」ディレクトリの下にあるリモートサーバーの「/ home」ディレクトリのバックアップを作成しています。

backup		 [email protected]:/home/ 		/data/backup/

また読む:

  1. How to Backup/Sync Directories Using Rsync (Remote Sync) Tool
  2. How to Transfer Files/Folders Using SCP Command

ここでは、すべてを除外してから、バックアップするものだけを具体的に定義します。これを行うには、除外ファイルを作成する必要があります。

# vi /data/backup/tecmint.exclude

まず、バックアップするディレクトリのリストを取得し、追加(– *)して他のすべてを除外します。これは、ファイルにリストしたものだけをバックアップします。私の除外ファイルは次のようになります。

+ /boot
+ /data
+ /tecmint
+ /etc
+ /home
+ /opt
+ /root
+ /usr
- /usr/*
- /var/cache
+ /var
- /*

ファイル除外オプションの使用は、rsync再帰を使用するため、非常に注意が必要な場合があります。したがって、上記の例はあなたが探しているものではないかもしれません。次に、除外ファイルをrsnapshot.confファイルに追加します。

exclude_file    /data/backup/tecmint.exclude

最後に、初期構成はほぼ完了です。先に進む前に、「/ etc /rsnapshot.conf」構成ファイルを保存してください。説明するオプションはたくさんありますが、ここに私のサンプル構成ファイルがあります。

config_version  1.2
snapshot_root   /data/backup/
cmd_cp  /bin/cp
cmd_rm  /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du  /usr/bin/du
interval        hourly  6
interval        daily   7
interval        weekly  4
interval        monthly 3
ssh_args	-p 25000
verbose 	2
loglevel        4
logfile /var/log/rsnapshot/
exclude_file    /data/backup/tecmint.exclude
rsync_long_args --delete        --numeric-ids   --delete-excluded
lockfile        /var/run/rsnapshot.pid
backup		/tecmint/		localhost/
backup		/etc/			localhost/
backup		[email protected]:/home/ 		/data/backup/

上記のすべてのオプションと引数の説明は次のとおりです。

  1. config_version 1.2 = Configuration file version
  2. snapshot_root = Backup Destination to store snapshots
  3. cmd_cp = Path to copy command
  4. cmd_rm = Path to remove command
  5. cmd_rsync = Path to rsync
  6. cmd_ssh = Path to SSH
  7. cmd_logger = Path to shell command interface to syslog
  8. cmd_du = Path to disk usage command
  9. interval hourly = How many hourly backups to keep.
  10. interval daily = How many daily backups to keep.
  11. interval weekly = How many weekly backups to keep.
  12. interval monthly = How many monthly backups to keep.
  13. ssh_args = Optional SSH arguments, such as a different port (-p )
  14. verbose = Self-explanatory
  15. loglevel = Self-explanatory
  16. logfile = Path to logfile
  17. exclude_file = Path to the exclude file (will be explained in more detail)
  18. rsync_long_args = Long arguments to pass to rsync
  19. lockfile = Self-explanatory
  20. backup = Full path to what to be backed up followed by relative path of placement.

手順4:Rsnapshotの構成を確認する

すべての構成が完了したら、すべてが期待どおりに機能することを確認します。次のコマンドを実行して、構成の構文が正しいことを確認します。

# rsnapshot configtest

Syntax OK

すべてが正しく構成されている場合は、「構文OK」メッセージが表示されます。エラーメッセージが表示された場合は、rsnapshotを実行する前にそれらのエラーを修正する必要があることを意味します。

次に、スナップショットの1つでテストを実行して、正しい結果が生成されていることを確認します。 「hourly」パラメーターを使用して、-t(test)引数を使用してテストを実行します。この以下のコマンドは、実際には実行せずに、実行することの詳細なリストを表示します。

# rsnapshot -t hourly
echo 2028 > /var/run/rsnapshot.pid 
mkdir -m 0700 -p /data/backup/ 
mkdir -m 0755 -p /data/backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \
    /backup/hourly.0/localhost/ 
mkdir -m 0755 -p /backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
    /backup/hourly.0/localhost/ 
mkdir -m 0755 -p /data/backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /usr/local /data/backup/hourly.0/localhost/ 
touch /data/backup/hourly.0/

注:上記のコマンドは、rsnapshotに「毎時」のバックアップを作成するように指示します。実際に実行したときに実行するコマンドを実際に出力します。

ステップ5:Rsnapshotを手動で実行する

結果を確認したら、「-t」オプションを削除して、コマンドを実際に実行できます。

# rsnapshot hourly

上記のコマンドは、rsnapshot.confファイルに追加したすべての構成でバックアップスクリプトを実行し、「バックアップ」ディレクトリを作成してから、その下にファイルを整理するディレクトリ構造を作成します。上記のコマンドを実行した後、バックアップディレクトリに移動して結果を確認し、図のようにls-lコマンドを使用してディレクトリ構造を一覧表示できます。

# cd /data/backup
# ls -l

total 4
drwxr-xr-x 3 root root 4096 Oct 28 09:11 hourly.0

ステップ6:プロセスの自動化

プロセスを自動化するには、rsnapshotがCronから特定の間隔で実行されるようにスケジュールする必要があります。デフォルトでは、rsnapshotには「/etc/cron.d/rsnapshot」の下にcronファイルが付属しています。存在しない場合は、作成して次の行を追加します。

デフォルトではルールはコメント化されているため、これらの値を有効にするには、スケジューリングセクションの前から「#」を削除する必要があります。

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.

0     */4    * * *    root    /usr/bin/rsnapshot hourly
30     3     * * *    root    /usr/bin/rsnapshot daily
0      3     * * 1    root    /usr/bin/rsnapshot weekly
30     2     1 * *    root    /usr/bin/rsnapshot monthly

上記のcronルールが何をするのかを正確に説明しましょう:

  1. Runs every 4 hours and creates an hourly directory under /backup directory.
  2. Runs daily at 3:30am and create a daily directory under /backup directory.
  3. Runs weekly on every Monday at 3:00am and create a weekly directory under /backup directory.
  4. Runs every monthly at 2:30am and create a monthly directory under /backup directory.

cronルールがどのように機能するかをよりよく理解するには、説明している記事を読むことをお勧めします。

  1. 11 Cron Scheduling Examples

ステップ7:Rsnapshotレポート

rsnapshotは、データのバックアップ中に何が発生したかに関するすべての詳細を記載した電子メールアラートを送信する気の利いた小さなレポートPerlスクリプトを提供します。このスクリプトを設定するには、「/ usr/local/bin」の下のどこかにスクリプトをコピーして、実行可能にする必要があります。

# cp /usr/share/doc/rsnapshot-1.3.1/utils/rsnapreport.pl /usr/local/bin
# chmod +x /usr/local/bin/rsnapreport.pl

次に、「rsnapshot.conf」ファイルの「–stats」パラメータをrsyncの長い引数セクションに追加します。

vi /etc/rsnapshot.conf
rsync_long_args --stats	--delete        --numeric-ids   --delete-excluded

ここで、前に追加したcrontabルールを編集し、rsnapreport.plスクリプトを呼び出して、指定した電子メールアドレスにレポートを渡します。

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.

0     */4    * * *    root    /usr/bin/rsnapshot hourly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Hourly Backup" [email protected]
30     3     * * *    root    /usr/bin/rsnapshot daily 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Daily Backup" [email protected]
0      3     * * 1    root    /usr/bin/rsnapshot weekly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Weekly Backup" [email protected]
30     2     1 * *    root    /usr/bin/rsnapshot monthly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Montly Backup" [email protected]

上記のエントリを正しく追加すると、以下のようなレポートが自分の電子メールアドレスに送信されます。

SOURCE           TOTAL FILES	FILES TRANS	TOTAL MB    MB TRANS   LIST GEN TIME  FILE XFER TIME
--------------------------------------------------------------------------------------------------------
localhost/          185734	   11853   	 2889.45    6179.18    40.661 second   0.000 seconds

参照リンク

  1. rsnapshot homepage

今のところ以上です。インストール中に問題が発生した場合は、コメントをお送りください。それから、オープンソースの世界に関するより興味深い記事については、TecMintに注目してください。