CentOS 6/rsync



前書き

ここではrsyncを使ってディレクトリ同期の方法でバックアップを行います。


前準備

バックアップ対象フォルダのピックアップ

対象ディレクトリをピックアップします。
ここでは、例として下記のフォルダをバックアップの対象とします。

  • /home/
  • /var/www/
  • /etc/


バックアップ先フォルダの作成

各自の運用スタイルに合わせて バックアップ先にフォルダが必要な場合は作成しておきます。
外部ストレージ(外付けHDD、ネットワークドライブ、USBメモリ等)を利用する場合はマウントしておきます。
ここれでは例としてバックアップ先は /backup とします。

# mkdir -m 0700 /backup


rsyncコマンドの作成

対象外ディレクトリを指定する場合は --exclude='~~' を使用します。
(※外部ストレージを指定する場合は /backup を書き換えが必要)

# rsync -auvz --delete /home/ /backup/home/
# rsync -auvz --delete /var/www/ /backup/var/www/
# rsync -auvz --delete /etc/ /backup/etc/


個々にコマンドを実行し検証します。


shファイル化

動作の検証を終えたら個々のコマンドを shファイル にします。

# vi /root/backup.sh
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
-
!
 
 
 
 
 
#!/bin/sh
 
rsync -auvz --delete /home/ /backup/home/
rsync -auvz --delete /var/www/ /backup/var/www/
rsync -auvz --delete /etc/ /backup/etc/
 
exit 0;


自動実行処理

定期実行処理について方法として大きく2つあります。

  • crontab -e を使ってスケジューリングして登録する。
    下記の例は 「毎日 05:02 に rootユーザーとして backup.sh を実行する」という内容になります。
    02 5 * * * root /root/backup.sh > /dev/null 2>&1
  • /etc/cron.daily/ 配下などに保存(ファイル名は rsync_backup などに変更)する。
    これらのフォルダを使って、毎時(cron.hourly)、毎日(cron.daily)、毎週(cron.weekly)、毎月(cron.monthly)という実行が可能です。
    # mv /root/backup.sh /etc/cron.daily/rsync_backup
    # chmod 0755 /etc/cron.daily/rsync_backup


実行

初回はフルバックアップ扱いになるため時間がかかりますが、2回目以降は更新(差分)ファイルだけが対象になるため負荷が軽減されます。


参考

rsyncの主なオプション

-a--archive「rlptgoD」を同時に指定した効果。
-v--verboseバックアップ中にコピーしているファイル名を表示する
-r--recursive指定したディレクトリ以下を再帰的にコピーする
-l--linksシンボリックリンクはそのままコピーする。指定しないとリンク先の実体がコピーされる
-H-hard-linksハードリンクはそのままコピーする。指定しないとリンク先の実体がコピーされる
-p--permsパーミッション属性をたもったままコピーする
-o--owner所有者属性をたもったままコピーする。指定しないと属性はコピーしたユーザーのものになる
-g--groupグループ属性をたもったままコピーする。指定しないと属性はコピーしたユーザーのものになる
-t--timesタイムスタンプをたもったままコピーする
-D--devicesデバイスファイルをたもったままコピーする
-z--compressデータを圧縮して転送する
-u--update追加されたファイルだけをコピーする
-n--dry-run実行時の動作だけを表示。主にテスト用
--existing更新されたファイルだけをコピーし、追加されたファイルは無視する
--deleteコピー元で削除されたファイルは、コピー先でも削除する。
-aオプションと同時に指定するとコピー元とコピー先を同期できる
--exclude '**'**に一致するファイルはコピーしない。
「*.bak」「*~」など特定のファイルを除外したいときに使う
--exclude-from=FILE記述されたパターンと一致するファイルを除外する
--include=PATTERNパターン一致するファイルを除外しない
--include-from=FILEファイルに記述されたパターンと一致するファイルを除外しない
--statsコピーの結果を表示する。指定しないといっさいのメッセージは表示されない
-e--rsh=コマンド暗号化してファイルを転送する。
コピー先としてネットワークでつながった別のホストを指定するときに使う
-h--helpヘルプを表示する
--versionコマンドのバージョンを表示する。




Last-modified: 2015-04-23 (木) 17:53:37 (1005d)