documentation.suse.com / rsyncを使用したファイルとディレクトリのコピー
SUSE Linux Enterprise Server 16.0

rsyncを使用したファイルとディレクトリのコピー

発行日: 04/11/2025
概要

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エントリを指定でき、SOURCEDESTINATIONプレースホルダにはパス、URL、またはその両方を指定できます。

以下に、ファイルコピーの使用例をいくつか示します。

  • > rsync -av /directory1/ /destination/

    上記の例では、ディレクトリの後の末尾のスラッシュは、ディレクトリそのものではなく、ディレクトリの内容を示しています。この場合、/directory1の内容のみが/destinationにコピーされます。

  • > rsync -av /directory1 /destination/

    上の例では、ディレクトリ/directory1/destinationにコピーされ、結果は/destination/directory1/になります。

  • > rsync -av example1.txt example2.txt /destination/directory/

    上記の例では、example1.txtexample2.txtのファイルをコピー先のディレクトリにコピーしています。

よく使用されるOPTIONSを以下に示します。

  • -V

    詳細な出力テキストを表示します。

  • -a

    アーカイブモード。ファイルを再帰的にコピーし、タイムスタンプ、ユーザ/グループの所有権、ファイルパーミッション、およびシンボリックリンクを保持します。

  • -z

    転送データを圧縮します。

  • -nあるいは、--dry-run

    変更を加えずに試運転を行います。

  • -r

    ディレクトリを再帰的にコピーします。

  • --progress

    転送中の進捗状況を表示します。

  • -b

    データ同期中にバックアップを取ります。

  • -h

    出力の数値を人間が読める形式で表示します。

  • -e

    リモート転送の場合、SSHプロトコルを使用するようにrsyncに指示します。

  • -q or --quiet

    rsyncコマンドとオプションの出力を抑制します。

  • --version

    rsyncのバージョン番号を出力して終了します。

ファイルを圧縮してローカルにコピーする
> 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を受信できます。

手順 1: rsyncサーバの設定

rsyncデーモンの設定ファイルは、メインファイルと、バックアップターゲットを格納する特定のモジュールに分割されます。こうすることで、後で他のターゲットを簡単に追加できます。グローバル値は/etc/rsyncd.d/*.incファイルに保存できます。一方、モジュールは/etc/rsyncd.d/*.confに配置します。

次に、バックアップターゲットを持つrsyncサーバを作成する方法を説明します。このターゲットを使用してバックアップを保存できます。rsyncサーバを作成するには、以下の手順を実行します。

  1. ローカルマシンで、すべてのバックアップファイルを保存するディレクトリ/var/backupを作成します。

    > mkdir /var/backup
  2. 所有権を指定します。

    この例では、グループusersのユーザtuxがディレクトリを所有しています。

    > chown tux.users /var/backup
  3. rsyncdデーモンを設定します。

    1. ディレクトリ/etc/rsyncd.d/を作成します。

      > mkdir /etc/rsyncd.d/
    2. メイン設定ファイル/etc/rsyncd.confを作成し、以下の行を追加します。

      log file = /var/log/rsync.log1
      pid file = /var/lock/rsync.lock2
      merge /etc/rsyncd.d3
      include /etc/rsyncd.d4

      1

      /var/log/rsync.logはrsyncがログを書き込む場所です。

      2

      /var/lock/rsync.lockは、実行中のrsyncデーモンインスタンスのPIDを含むファイルです。

      3

      グローバル値を/etc/rsyncd.d/*.incファイルからメイン設定ファイルにマージします。

      4

      モジュール(またはターゲット)を/etc/rsyncd.d/*.confファイルからロードします。これらのファイルにはグローバル値への参照を含めないでください。

  4. 次の行を使用して、ファイル/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

    上記の例では、以下のようになります。

    1

    [backup]はバックアップターゲットです。バックアップターゲットには任意の名前を使用できます。ターゲットには用途に応じた名前を付け、*.confファイルと同じ名前を使用できます。

    2

    uid = tuxはファイル転送の実行時に使用されるユーザ名またはグループ名を指定します。

    3

    gid = usersはバックアップを保存するパスを定義します(手順1から)。

    4

    path = /var/backupはバックアップを保存するパスを定義します(手順1から)。

    5

    auth users = tuxは許可されているユーザのカンマ区切りリストを指定します。最も単純な形式では、このモジュールへの接続を許可されているユーザ名が含まれます。この例では、ユーザtuxのみが許可されています。

    6

    secrets file = /etc/rsyncd.secretsはユーザ名とプレーンパスワードが記述された行が含まれるファイルのパスを指定します。

  5. 次の内容で/etc/rsyncd.secretsファイルを作成し、PASSPHRASEを置き換えます。

    # user:passwd
    tux:PASSPHRASE
  6. rootのみがこのファイルを読み込めるようにします。

    chmod 0600 /etc/rsyncd.secrets
  7. 次のコマンドを使用して、rsyncdデーモンを起動して有効にします。

    > systemctl enable rsyncd
    > systemctl start rsyncd
  8. リモートマシンで、rsyncサーバへのアクセスをテストします。

    > rsync jupiter::

    以下のような応答が表示されます。

    backup Our backup target

    上記の応答が表示されない場合は、設定ファイル、ファイアウォール、およびネットワーク設定を確認してください。

    上記の手順でrsyncサーバが作成されたので、このサーバを使用してバックアップを保存できます。この例では、すべての接続を示すログファイルも作成されます。このファイルは/var/log/rsyncd.logに格納されます。これは転送のデバッグに役立ちます。

  9. バックアップターゲットの内容を一覧にするには、ローカルマシンで次のコマンドを使用します。

    > rsync -avz jupiter::backup

    このコマンドを入力すると、サーバのディレクトリ/var/backupにあるファイルがすべて一覧表示されます。このリクエストはログファイル/var/log/rsyncd.logにも記録されます。

  10. 現在のディレクトリをrsyncバックアップサーバにコピーするには、ソースディレクトリを指定します。ソースディレクトリが現在のディレクトリの場合は、.を使用します。

    > rsync -avz . jupiter::backup

    デフォルトでは、rsyncは実行時にファイルとディレクトリを削除しません。削除を有効にするには、追加オプション--deleteを記述する必要があります。新しい方のファイルが削除されないように、代わりにオプション--updateを使用することもできます。競合が発生した場合は、手動で解決する必要があります。

6 rsyncを使用したファイルとディレクトリ削除と更新

コピー先への書き込み権限があれば、rsyncを使用して同じマシン内でファイルをコピーおよび同期できます。コピー後にファイルまたはディレクトリを削除することもできます。

ファイルexample1.txtexample2.txt/source/directory/から/destination/directory/にコピーするには、次のコマンドを実行します。

> rsync -av --update /source/directory/ /destination/directory/

rsyncコマンドは、/destination/directory/のファイルexample1.txtexample2.txtがコピー元ファイルより古い場合、それらを更新します。コピー先のバージョンが新しい場合、ファイルは上書きされません。また、/source/directory/にあるその他の新しいファイルやディレクトリはすべて、/destination/にコピーされます。

既存のファイルをコピーし、コピー先のディレクトリに存在しないファイルを削除するには、次のコマンドを実行します。

> rsync -av --delete /source/directory/ /destination/directory/

このシナリオでは、コピー元とコピー先の両方のディレクトリにexample1.txtexample2.txtが含まれています。/destination/directoryには、余分なファイルexample3.txtが含まれています。

rsyncコマンドは、ファイルexample1.txtexample2.txt/source/directory/から/destination/directory/にコピーまたは更新します。このコマンドはまた、/source/directory/に存在しないため、/destination/directory/からファイルexample3.txtを削除します。また、/destination/directory/のディレクトリ構造も、/source/directory/に一致するようにクリーンアップされます。

7 rsyncのトラブルシューティング

ファイルまたはフォルダのコピーは、いくつかの理由により失敗する可能性があります。ファイルコピーを実行するために必要な権限とリソースがあることを確認してください。

考えられるトラブルシューティング方法を以下に示します。

  • rsyncが最新バージョンであることを確認します。ファイルまたはディレクトリをリモートで転送するには、転送元と転送先のマシンの両方にrsyncがインストールされていることを確認します。

  • 必要なrsyncアクセス権限があることを確認します。

  • リモートでファイルをコピーする場合は、正しいホスト名を指定していることを確認します。

  • デーモンモードでrsyncを使用している場合は、rsyncサービスが実行されていることを確認します。