rsyncを使用したファイルとディレクトリのコピー
- 概要
rsyncツールを使用すると、ファイルをローカルまたはリモートでコピーできます。rsyncは一方向性であり、一方向にのみファイルをコピーできます。
- 目的
この記事では、rsyncツールの概要と、ローカルおよびリモートでファイルをコピーするための基本的な使用方法を説明します。
- 所要時間
rsyncツールの基本的な使用方法を理解するには、最大20分かかります。
- 目標
rsyncの基礎的な理解を深め、ファイル転送に使用する方法を習得します。
- 要件
ファイルのコピー元とコピー先のアクセス権限。
1 rsyncの概念 #
rsyncツールを使用すると、ローカルおよびリモートでファイルを転送およびコピーできます。rsyncは一方向性です。ファイルを一方向にコピーし、データの同期は行いません。rsyncは、ファイル内の全コンテンツを転送するのではなく、ファイル内の変更点のみを移動させることで、コピーされるデータ量を最小限に抑えます。そのため、低速ネットワーク接続でのデータ転送をサポートします。
rsyncを使用して大きなファイルをコピーする場合、変更の検出には特定の処理能力が要求されます。そのため、コピー元とコピー先両方のマシンにRAMなどのリソースが十分あることを確認してください。
rsyncは、わずかな変更しかない大量のデータを定期的に転送する必要がある場合に使用します。これは、バックアップを扱う際に便利です。また、rsyncは、Webサーバのディレクトリツリー全体を格納するステージングサーバをDMZ内のWebサーバにミラーリングする場合にも便利です。
この記事には、rsyncを使用してローカルおよびリモートでファイルをコピーする例が含まれています。このドキュメントでは、rsyncサーバの設定方法と使用方法についても説明します。
2 rsyncの基本的な使用方法 #
アクセス権限と書き込み権限のあるマシンであればどのマシンでも、rsyncを使用できます。
次の例に示すように、ファイルをコピー元からコピー先にコピーします。
>rsync [OPTION] SOURCE [SOURCE]... DESTINATION
複数のSOURCEエントリを指定でき、SOURCEとDESTINATIONプレースホルダにはパス、URL、またはその両方を指定できます。
以下に、ファイルコピーの使用例をいくつか示します。
>rsync -av /directory1/ /destination/上記の例では、ディレクトリの後の末尾のスラッシュは、ディレクトリそのものではなく、ディレクトリの内容を示しています。この場合、
/directory1の内容のみが/destinationにコピーされます。>rsync -av /directory1 /destination/上の例では、ディレクトリ
/directory1が/destinationにコピーされ、結果は/destination/directory1/になります。>rsync -av example1.txt example2.txt /destination/directory/上記の例では、
example1.txtとexample2.txtのファイルをコピー先のディレクトリにコピーしています。
よく使用されるOPTIONSを以下に示します。
-V詳細な出力テキストを表示します。
-aアーカイブモード。ファイルを再帰的にコピーし、タイムスタンプ、ユーザ/グループの所有権、ファイルパーミッション、およびシンボリックリンクを保持します。
-z転送データを圧縮します。
-nあるいは、--dry-run変更を加えずに試運転を行います。
-rディレクトリを再帰的にコピーします。
--progress転送中の進捗状況を表示します。
-bデータ同期中にバックアップを取ります。
-h出力の数値を人間が読める形式で表示します。
-eリモート転送の場合、SSHプロトコルを使用するようにrsyncに指示します。
-q or --quietrsyncコマンドとオプションの出力を抑制します。
--versionrsyncのバージョン番号を出力して終了します。
- ファイルを圧縮してローカルにコピーする
>rsync -avz example1.txt example2.txt /destination/-aアーカイブモード-v詳細-z転送中にデータを圧縮- ディレクトリを圧縮してコピーする
>rsync -avz /sourcedirectory/ /destinationdirectory//sourcedirectory/の内容を圧縮して転送します。- 圧縮機能付きリモートファイル転送
>rsync -avz example1.txt user@remote_host:/remote/destination/データを圧縮しながら、
example1.txtをSSH経由でリモートマシンに転送します。- 圧縮機能付きリモートディレクトリ転送
>rsync -avz /sourcedirectory/ user@remote_host:/remote/destination/データを圧縮しながら、
/sourcedirectory/をSSH経由でリモートマシンに転送します。
3 rsyncを使用したファイルとディレクトリのローカルでのコピー #
コピー先への書き込み権限があれば、rsyncを使用して同じマシン内でファイルをコピーできます。
ファイルbackup.tar.xzを/var/backup/にコピーするには、コマンドrsync -avz backup.tar.xz /var/backup/を使用します。
ファイルbackup.tar.xzが/var/backup/にコピーされ、絶対パスは/var/backup/backup.tar.xzになります。
4 rsyncを使用したファイルとディレクトリのリモートでのコピー #
rsyncを使用して、あるマシンからリモートマシンにファイルをコピーできます。コピー元とコピー先の両方のマシンにrsyncがあり、SSH経由でリモートマシンに接続していることを確認してください。
1つのファイルをマシン上のディレクトリからリモートマシン上の/var/backupディレクトリにコピーするには、次のコマンドを使用します。
>rsync -avz example1.txt user@remote_host:/var/backup/
/var/backup/ディレクトリの後に末尾のスラッシュを必ず追加してください。スラッシュを挿入しない場合、ファイルexample1.txtは、ディレクトリ/var/backup/の中ではなく、/var/backupファイルにコピーされます。
絶対パス/var/backup/example1.txtでコピーされたファイルを確認します。
ディレクトリsource/とその内容をディレクトリ/var/backup/にコピーするには、次のコマンドを実行します。
>rsync -avz /source/ user@remote_host:/var/backup/
絶対パス/var/backup/source/でコピーされたディレクトリを確認します。
5 rsyncサーバの設定と使用 #
rsyncサーバは、ファイルの同期、自動バックアップ、および集中ストレージを可能にします。rsyncは、デフォルトポート873で着信接続をリスンするデーモンrsyncdとして実行できます。このデーモンはcopying targetsを受信できます。
rsyncデーモンの設定ファイルは、メインファイルと、バックアップターゲットを格納する特定のモジュールに分割されます。こうすることで、後で他のターゲットを簡単に追加できます。グローバル値は/etc/rsyncd.d/*.incファイルに保存できます。一方、モジュールは/etc/rsyncd.d/*.confに配置します。
次に、バックアップターゲットを持つrsyncサーバを作成する方法を説明します。このターゲットを使用してバックアップを保存できます。rsyncサーバを作成するには、以下の手順を実行します。
ローカルマシンで、すべてのバックアップファイルを保存するディレクトリ
/var/backupを作成します。>mkdir /var/backup所有権を指定します。
この例では、グループ
usersのユーザtuxがディレクトリを所有しています。>chown tux.users /var/backuprsyncdデーモンを設定します。ディレクトリ
/etc/rsyncd.d/を作成します。>mkdir /etc/rsyncd.d/メイン設定ファイル
/etc/rsyncd.confを作成し、以下の行を追加します。log file = /var/log/rsync.log1 pid file = /var/lock/rsync.lock2 merge /etc/rsyncd.d3 include /etc/rsyncd.d4
次の行を使用して、ファイル
/etc/rsyncd.d/backup.conf内にモジュールまたはバックアップターゲットを作成します。backup.conf: backup module [backup] 1 uid = tux 2 gid = users 3 path = /var/backup 4 auth users = tux 5 secrets file = /etc/rsyncd.secrets 6 comment = Our backup target 7
上記の例では、以下のようになります。
[backup]はバックアップターゲットです。バックアップターゲットには任意の名前を使用できます。ターゲットには用途に応じた名前を付け、*.confファイルと同じ名前を使用できます。uid = tuxはファイル転送の実行時に使用されるユーザ名またはグループ名を指定します。gid = usersはバックアップを保存するパスを定義します(手順1から)。path = /var/backupはバックアップを保存するパスを定義します(手順1から)。auth users = tuxは許可されているユーザのカンマ区切りリストを指定します。最も単純な形式では、このモジュールへの接続を許可されているユーザ名が含まれます。この例では、ユーザtuxのみが許可されています。secrets file = /etc/rsyncd.secretsはユーザ名とプレーンパスワードが記述された行が含まれるファイルのパスを指定します。次の内容で
/etc/rsyncd.secretsファイルを作成し、PASSPHRASEを置き換えます。# user:passwd tux:PASSPHRASE
rootのみがこのファイルを読み込めるようにします。
chmod 0600 /etc/rsyncd.secrets
次のコマンドを使用して、
rsyncdデーモンを起動して有効にします。>systemctl enable rsyncd>systemctl start rsyncdリモートマシンで、
rsyncサーバへのアクセスをテストします。>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を使用することもできます。競合が発生した場合は、手動で解決する必要があります。
6 rsyncを使用したファイルとディレクトリ削除と更新 #
コピー先への書き込み権限があれば、rsyncを使用して同じマシン内でファイルをコピーおよび同期できます。コピー後にファイルまたはディレクトリを削除することもできます。
ファイルexample1.txtとexample2.txtを/source/directory/から/destination/directory/にコピーするには、次のコマンドを実行します。
>rsync -av --update /source/directory/ /destination/directory/
rsyncコマンドは、/destination/directory/のファイルexample1.txtとexample2.txtがコピー元ファイルより古い場合、それらを更新します。コピー先のバージョンが新しい場合、ファイルは上書きされません。また、/source/directory/にあるその他の新しいファイルやディレクトリはすべて、/destination/にコピーされます。
既存のファイルをコピーし、コピー先のディレクトリに存在しないファイルを削除するには、次のコマンドを実行します。
>rsync -av --delete /source/directory/ /destination/directory/
このシナリオでは、コピー元とコピー先の両方のディレクトリにexample1.txtとexample2.txtが含まれています。/destination/directoryには、余分なファイルexample3.txtが含まれています。
rsyncコマンドは、ファイルexample1.txtとexample2.txtを/source/directory/から/destination/directory/にコピーまたは更新します。このコマンドはまた、/source/directory/に存在しないため、/destination/directory/からファイルexample3.txtを削除します。また、/destination/directory/のディレクトリ構造も、/source/directory/に一致するようにクリーンアップされます。
7 rsyncのトラブルシューティング #
ファイルまたはフォルダのコピーは、いくつかの理由により失敗する可能性があります。ファイルコピーを実行するために必要な権限とリソースがあることを確認してください。
考えられるトラブルシューティング方法を以下に示します。
rsyncが最新バージョンであることを確認します。ファイルまたはディレクトリをリモートで転送するには、転送元と転送先のマシンの両方にrsyncがインストールされていることを確認します。
必要なrsyncアクセス権限があることを確認します。
リモートでファイルをコピーする場合は、正しいホスト名を指定していることを確認します。
デーモンモードでrsyncを使用している場合は、rsyncサービスが実行されていることを確認します。
8 法的事項 #
Copyright© 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNU Free Documentation License」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。