9 rsyncによるファイルのコピー #
現在の通常のユーザは、複数のコンピュータ(家庭用および職場用のマシン、ラップトップ、スマートフォン、またはタブレット)を持っています。このため、複数のデバイス間でファイルとドキュメントを同期させることがますます重要になっています。
同期ツールの使用を開始する前に、その特徴や機能を十分に理解しておく必要があります。重要なファイルは必ずバックアップしてください。
9.1 概念の概要 #
低速なネットワーク接続で大量のデータを同期するために、rsyncは、ファイル内の変更のみを転送して信頼性を高めています。この処理は、テキストファイルのみでなくバイナリファイルも対象となります。ファイル間の差分を検出するために、rsyncはファイルをブロック単位で分割してチェックサムを計算します。
変更の検出には若干の処理能力が要求されます。そのため、両側のマシンにRAMなどのリソースが十分あることを確認してください。
rsyncが特に役立つのは、わずかな変更しかない大量のデータを定期的に転送する必要がある場合です。多くの場合、バックアップの操作がこれに該当します。また、rsyncは、Webサーバのディレクトリツリー全体を格納するステージングサーバをDMZ内のWebサーバにミラーリングする場合にも便利です。
その名前に反して、rsyncは同期ツールではありません。データを一度に一方向にのみコピーするツールです。その逆にはコピーせず、コピーすることもできません。コピー元とコピー先の両方を同期できる双方向ツールが必要な場合は、Csyncを使用してください。
9.2 基本的な構文 #
rsyncは、次の基本的な構文を持つコマンドラインツールです。
rsync [OPTION] SOURCE [SOURCE]... DEST
アクセスパーミッションと書き込みパーミッションがあれば、ローカルマシンでもリモートマシンでも使用できます。複数のSOURCEエントリを指定できます。SOURCEおよびDESTのプレースホルダには、パス、URL、またはその両方を指定できます。
rsyncで最もよく使われるオプションは次のとおりです。
-v
より詳細なテキストを出力します。
-a
アーカイブモード。ファイルを再帰的にコピーし、タイムスタンプ、ユーザ/グループの所有権、ファイルパーミッション、およびシンボリックリンクを保持します。
-z
転送データを圧縮します。
rsyncを操作する場合は、特に末尾のスラッシュに注意する必要があります。ディレクトリの後に末尾のスラッシュがある場合、そのスラッシュはディレクトリの「内容」を示します。末尾のスラッシュがない場合は、「ディレクトリそのもの」を表します。
9.3 ファイルとディレクトリのローカルでのコピー #
次の説明は、現在のユーザがディレクトリ/var/backup
に対する書き込みパーミッションを持っていることを想定しています。1つのファイルをマシン上のディレクトリから別のパスにコピーするには、次のコマンドを使用します。
tux >
rsync
-avz backup.tar.xz /var/backup/
ファイルbackup.tar.xz
が/var/backup/
にコピーされ、絶対パスは/var/backup/backup.tar.xz
になります。
/var/backup/
ディレクトリの後に「末尾のスラッシュ」を追加するのを忘れないでください。スラッシュを挿入しない場合、ファイルbackup.tar.xz
は、ディレクトリ/var/backup/
の「中ではなく」、/var/backup
(ファイル)にコピーされます。
ディレクトリをコピーする場合も、1つのファイルをコピーする場合と同様です。次の例では、ディレクトリtux/
とその内容をディレクトリ/var/backup/
にコピーします。
tux >
rsync
-avz tux /var/backup/
コピーは絶対パス/var/backup/tux/
にあります。
9.4 ファイルとディレクトリのリモートでのコピー #
両方のマシンにrsyncツールが必要です。リモートディレクトリ間でファイルをコピーするには、IPアドレスまたはドメイン名が必要です。ローカルマシンとリモートマシンの現在のユーザ名が同じ場合、ユーザ名は省略できます。
ファイルfile.tar.xz
をローカルホストからリモートホスト192.168.1.1
に同じユーザ(ローカルとリモート)でコピーするには、次のコマンドを使用します。
tux >
rsync
-avz file.tar.xz tux@192.168.1.1:
好みに応じて、次のコマンドを使用することもできます。処理結果は同じです。
tux >
rsync
-avz file.tar.xz 192.168.1.1:~tux >
rsync
-avz file.tar.xz 192.168.1.1:/home/tux
標準設定では、すべての場合に、リモートユーザのパスフレーズの入力を求めるプロンプトが表示されます。このコマンドは、file.tar.xz
をユーザtux
のホームディレクトリ(通常は/home/tux
)にコピーします。
ディレクトリをリモートでコピーする場合も、ローカルでコピーする場合と同様です。次の例では、ディレクトリtux/
とその内容をホスト192.168.1.1
のリモートディレクトリ/var/backup/
にコピーします。
tux >
rsync
-avz tux 192.168.1.1:/var/backup/
ホスト192.168.1.1
で書き込みパーミッションを持っていると想定すると、コピーは絶対パス/var/backup/tux
にあります。
9.5 rsyncサーバの設定と使用 #
rsyncは、デフォルトポート873で着信接続をリスンするデーモン(rsyncd
)として実行できます。このデーモンは「コピーターゲット」を受信できます。
次に、jupiter
上に「バックアップ」ターゲットを持つrsyncサーバを作成する方法を説明します。このターゲットを使用してバックアップを保存できます。rsyncサーバを作成するには、以下の手順を実行します。
jupiterで、すべてのバックアップファイルを保存するディレクトリを作成します。この例では、
/var/backup
を使用します。root #
mkdir
/var/backup所有権を指定します。この場合、ディレクトリはグループ
users
のユーザtux
によって所有されます。root #
chown
tux.users /var/backuprsyncdデーモンを設定します。
設定ファイルを、メインファイルと、バックアップターゲットを格納する複数の「モジュール」に分割します。こうすることで、後で他のターゲットを簡単に追加できます。グローバル値は
/etc/rsyncd.d/*.inc
ファイルに保存できます。一方、モジュールは/etc/rsyncd.d/*.conf
ファイルに配置します。ディレクトリ
/etc/rsyncd.d/
を作成します。root #
mkdir
/etc/rsyncd.d/メイン設定ファイル
/etc/rsyncd.conf
に、次の行を追加します。# rsyncd.conf main configuration file log file = /var/log/rsync.log pid file = /var/lock/rsync.lock &merge /etc/rsyncd.d 1 &include /etc/rsyncd.d 2
次の行を使用して、ファイル
/etc/rsyncd.d/backup.conf
内にモジュール(バックアップターゲット)を作成します。# backup.conf: backup module [backup] 1 uid = tux 2 gid = users 2 path = /var/backup 3 auth users = tux 4 secrets file = /etc/rsyncd.secrets 5 comment = Our backup target
次の内容で
/etc/rsyncd.secrets
ファイルを作成し、PASSPHRASEを置き換えます。# user:passwd tux:PASSPHRASE
root
のみがこのファイルを読み込めるようにします。root #
chmod
0600 /etc/rsyncd.secrets
次のコマンドを使用して、rsyncdデーモンを起動して有効にします。
root #
systemctl
enable rsyncdroot #
systemctl
start rsyncdrsyncサーバにアクセスできるかどうかをテストします。
tux >
rsync
jupiter::次のような応答が表示されます。
backup Our backup target
異なる場合は、設定ファイル、ファイアウォール設定、およびネットワーク設定を確認してください。
上記の手順でrsyncサーバが作成されたので、このサーバを使用してバックアップを保存できます。この例では、すべての接続を示すログファイルも作成されます。このファイルは/var/log/rsyncd.log
に格納されます。これは、転送をデバッグする場合に便利です。
バックアップターゲットの内容を一覧にするには、次のコマンドを使用します。
rsync -avz jupiter::backup
このコマンドを入力すると、サーバのディレクトリ/var/backup
にあるファイルがすべて一覧表示されます。このリクエストはログファイル/var/log/rsyncd.log
にも記録されます。実際の転送を開始するには、ソースディレクトリを指定します。現在のディレクトリには.
を使用してください。たとえば、次のコマンドは、現在のディレクトリをrsyncバックアップサーバにコピーします。
rsync -avz . jupiter::backup
デフォルトでは、rsyncは実行時にファイルとディレクトリを削除しません。削除を有効にするには、追加オプション--delete
を記述する必要があります。新しい方のファイルが削除されないように、代わりにオプション--update
を使用することもできます。競合が発生した場合は、手動で解決する必要があります。
9.6 詳細情報 #
- CSync
双方向ファイル同期ツール。https://www.csync.org/を参照してください。
- RSnapshot
増分バックアップを作成します。http://rsnapshot.orgを参照してください。
- Unison
CSyncに似たファイル同期ツールですが、グラフィカルインタフェースを備えています。http://www.seas.upenn.edu/~bcpierce/unison/を参照してください。
- Rear
障害復旧フレームワーク。SUSE Linux Enterprise High Availability Extensionの『Administration Guide』 (https://documentation.suse.com/sle-ha-12/)を参照してください。