rsyncコマンドでデータの同期を行う

   2015/12/02

サーバを運用していると、ファイルやディレクトリのバックアップや同期をとりたいシチュエーションが多々出てきます。

そんなときはrsyncコマンドを使ってみましょう。

rsyncコマンドとは

rsyncコマンドは、データの同期を行うソフトウェアです。Linux系のOSであれば標準でインストールされていることがほとんどです。

rsyncコマンドを使うことで、同一サーバ内またはサーバ間のデータ同期をとることが可能になります。

基本的なコマンドとオプション

コマンド

基本的なコマンドは次の通りです。

rsync [オプション] コピー元 コピー先

オプション

オプションは次の通りです。

-a : パーミッションやグループなどを保持したまま同期ができます
-v : 処理中の経過ファイル名を表示します
-e [シェル名] :リモートシェルを実行します。
-n : 実際の同期はせずに、実行時の動作を表示します。事項前のテストに利用します
-r : コピー元のディレクトリを、再帰的に同期します
-u : 追加されたファイルだけをコピーします。
-z : データを圧縮します
–delete : コピー元で削除されたファイルを、コピー先でも削除します。
–exclude=PATTERN : パターン一致するファイルを除外します
–exclude-from=FILE : ファイルに記述されたパターンと一致するファイルを除外します
–include=PATTERN : パターン一致するファイルを除外しません
–include=-from=FILE : ファイルに記述されたパターンと一致するファイルを除外しません

rsyncコマンドの使い方

サーバ内のファイルを、同一サーバの別ディレクトリへバックアップする方法

rsync -av /tmp/from/ /tmp/to/

-aオプションで属性を保持し、-rでfromディレクトリの中身を再帰的に、toディレクトリへバックアップします。
2回目以降は、タイムスタンプを比較し、更新されているもののみ同期されます。

下記のようにfromの後のスラッシュをなくすと、fromディレクトリごとtoディレクトリへバックアップします。

rsync -av /tmp/from /tmp/to/

些細な違いですが、注意が必要です。

一部ファイルを除外したい場合

ファイルを除外したい場合は、–excludeオプションを利用します。

ファイルを除外したい場合

rsync -av --exclude='exclude.txt' /tmp/from/ /tmp/to/

特定ディレクトリを除外したい場合

rsync -av --exclude='dir1' /tmp/from/ /tmp/to/

特定ディレクトリ配下のファイルを全て除外したい場合

rsync -av --exclude='dir1/*' /tmp/from/ /tmp/to/

特定ディレクトリ配下のファイルの一部を除外したい場合

rsync -av --include='include.txt' --exclude='dir1/*' /tmp/from/ /tmp/to/

excludeの手前にincludeオプションを記載する必要があります。前後を反対にすると、除外対象になってしまいます。

複数パターンのファイルを除外したい場合

rsync -av --exclude='include.txt' --exclude='exclude.txt' /tmp/from/ /tmp/to/
rsync -av --exclude-from='exclude_list' /tmp/from/ /tmp/to/

–excludeオプションを複数指定するか、exclude_listファイルへ対象を箇条書きにすることで除外できます。

2回目のバックアップなどで、削除されたファイルも同期したい場合

rsync -av --delete /tmp/from /tmp/to/

コピー元とコピー先を間違えると悲惨なことになるので注意しましょう。

実際にバックアップする前にテスト確認する方法

少し複雑なオプションを入れた場合は、-nオプションを追加して、テスト実行をしてみましょう。

rsync -avn --include='include.txt' --exclude='dir1/*' /tmp/from/ /tmp/to/

-nオプションを付けることで実際の同期は行わず、対象ファイルの確認が可能です。

リモートサーバにバックアップする場合

rsync -av /tmp/from user@remote.host:/tmp/to/

ポート番号を指定してリモートサーバにバックアップする場合

rsync -av -e 'ssh -p 8022' /tmp/from user@remote_host:/tmp/to/

リモートサーバからローカル環境にバックアップする場合

rsync -av user@remote.host:/tmp/from /tmp/to/

まとめ

rsyncコマンドを利用することで、データのバックアップが用意にできるようになります。

rsyncコマンドの特徴をまとめると次の通りです。

  • rsync [option] from to
  • 2回目以降は差分バックアップ
  • リモートサーバへ(から)バックアップが可能
  • 削除ファイルも同期したい場合は、–deleteオプション
  • 特定ファイルの除外も可能

 

 

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。