FreeBSD/rsync
rsyncは、ファイルやディレクトリの同期、バックアップ、転送を効率的に行うためのツールです。特に、大量のデータをネットワーク越しに転送する場合に有効で、差分コピーを行うことで、転送時間を最小限に抑えることができます。
インストール
[編集]FreeBSDでは、rsyncは標準のパッケージとして提供されています。以下の手順でインストールできます。
- パッケージのインストール
doas pkg install rsync
- ソースからのインストール
portsからインストールすることもできます。以下の手順でインストールします。doas make -C /usr/ports/net/rsync/ install clean
- インストール後、
rsyncコマンドが利用できるようになります。
基本的な使い方
[編集]rsyncの基本的な構文は以下の通りです。
rsync [オプション] ソース ディスティネーション
- ソース: 同期元のファイルやディレクトリのパス
- ディスティネーション: 同期先のファイルやディレクトリのパス
主なオプション
[編集]-a: アーカイブモード。再帰的にディレクトリをコピーし、シンボリックリンクやファイルの権限、タイムスタンプなどを保持します。-v: 詳細表示モード。処理の進行状況を表示します。-z: 転送中にデータを圧縮します。ネットワーク越しの転送時に有効です。-r: ディレクトリの再帰的コピー。-u: 既存のファイルがソースより新しい場合、同期を行いません。-e: リモート接続時に使用するシェルを指定します(例:ssh)。--delete: ディスティネーションに存在し、ソースに存在しないファイルを削除します。-H: ハードリンクを保持します。-Hオプションを使うことで、ソースと同じハードリンクをディスティネーションでも維持することができます。
ローカルディレクトリ間の同期
[編集]ローカルディレクトリ間でファイルを同期する基本的な例です。
rsync -avH /path/to/source/ /path/to/destination/
上記のコマンドは、/path/to/source/の内容を/path/to/destination/にアーカイブモードでコピーします。
リモートホストとの同期
[編集]リモートホストとの間でデータを同期する場合、rsyncはsshを使って安全にファイルを転送できます。
rsync -avHz -e ssh /local/path user@remote_host:/remote/path
ここで、-e sshはsshを使ってリモートホストへ接続することを意味します。remote_hostは接続先のホスト名またはIPアドレス、/remote/pathはリモートホスト上のディスティネーションのパスです。
バックアップの例
[編集]rsyncはバックアップ用途にもよく使用されます。例えば、ローカルディレクトリのバックアップをリモートホストに取る場合は次のようにします。
rsync -avHz /local/data/ user@backup_host:/backup/data/
これにより、/local/data/の内容がリモートのbackup_hostにある/backup/data/にバックアップされます。
追加の便利なオプション
[編集]--progress: 転送の進行状況を詳細に表示します。--exclude: 特定のファイルやディレクトリを同期から除外します。例:rsync -avH --exclude '*.log' /data/ /backup/
- 上記の例では、
.logファイルを除外して同期します。
--dry-run: 実際には何も行わず、コマンドが行う操作のシミュレーションを行います。これにより、実際にデータを同期する前に結果を確認できます。
要注意ポイント
[編集]rsyncを使用する際の要注意ポイントを以下にまとめました。これらの点を理解しておくことで、トラブルを避け、効率的に運用できます。
ファイルの上書きと削除
[編集]--deleteオプション: このオプションを使用すると、ソースに存在しないファイルがディスティネーションから削除されます。バックアップや同期の際、誤って重要なファイルが削除されるリスクがあるため、慎重に使用する必要があります。使用前に--dry-runオプションでシミュレーションを行うと安全です。- 上書き注意: デフォルトでは、ディスティネーションに同名のファイルがあった場合、
rsyncはそれを上書きします。意図しない上書きを避けたい場合は、-u(更新されたファイルのみをコピー)オプションを使用するか、--ignore-existingオプションを使って新しいファイルだけをコピーするようにできます。
シンボリックリンクの取り扱い
[編集]-l(シンボリックリンクのコピー)と-L(シンボリックリンクを展開してコピー)の違いに注意が必要です。-lはシンボリックリンク自体をコピーし、-Lはリンク先のファイルやディレクトリをコピーします。リンクをそのまま扱いたい場合は-lを選び、リンク先をコピーしたい場合は-Lを使用します。
-H オプション(ハードリンクの維持)
[編集]-Hオプションはハードリンクを維持するためのものですが、パフォーマンスに影響を与える可能性があります。大規模なデータを同期する際は、特に注意が必要です。ハードリンクが多い場合、rsyncはメタデータを適切に管理し、正しく同期するために時間を要することがあります。
-C オプション(無視パターン)
[編集]-Cは標準的な無視パターンを使用しますが、必ずしもすべてのケースで望ましい結果が得られるわけではありません。特定のファイルを除外したい場合は、--excludeオプションを使って明示的に除外パターンを指定することが推奨されます。特にカスタムパターンを使用したい場合は、-Cよりも--excludeを使う方が柔軟です。
ディレクトリの末尾スラッシュ
[編集]末尾のスラッシュの有無で挙動が異なります。ソースパスに末尾スラッシュがある場合、その中身がディスティネーションにコピーされますが、スラッシュがない場合、ディレクトリ自体がコピーされます。これを誤解しないようにしましょう。
/path/to/source/→ ディレクトリ内の内容がコピーされる/path/to/source→ ディレクトリ自体がコピーされる
ネットワーク越しの使用
[編集]- ネットワークのパフォーマンス:
rsyncはファイル単位で差分を転送するため、初回の転送には時間がかかることがあります。しかし、その後の転送は差分のみを送信するため、高速化が期待できます。ネットワークが不安定な場合、-zオプションでデータを圧縮して転送することで、帯域幅を節約できます。 - SSH経由での使用: リモートホストと通信する場合、
rsyncは通常sshを使用します。sshの設定ミスやセキュリティ問題には注意が必要です。適切な認証と接続の設定を確認しましょう。
--progress オプション(転送の進行状況)
[編集]大きなデータセットを転送する際、進行状況が必要な場合は、--progressオプションを使うことができますが、転送速度が遅いと大量の出力が表示されることがあるので、必要に応じて調整してください。
バックアップの確認
[編集]--dry-run オプション: 重要な同期作業を行う前に、--dry-runオプションを使ってシミュレーションを行うことを強くお勧めします。このオプションを使うことで、実際にファイルを移動したり削除したりする前に、rsyncが何を行うかを確認できます。
rsync -avH --dry-run /source/ /destination/
大規模なデータセットの転送
[編集]大量の小さなファイルを転送する場合、rsyncのパフォーマンスが低下することがあります。この場合、--inplaceオプションを使って既存のファイルを上書きすることで、ディスクI/Oを削減できます。ただし、これにはリスクも伴うため、慎重に使用する必要があります。
タイムスタンプと権限
[編集]-aオプション(アーカイブモード)を使うと、元のファイルのタイムスタンプや権限を保持することができますが、ディスティネーションのファイルシステムが異なる場合(例: ファイルシステムの違いで権限が異なる場合など)、うまくコピーできないことがあります。このような場合は、-t(タイムスタンプを保持)や-p(権限を保持)のオプションを個別に使用することで、意図した動作が可能になります。
トラブルシューティング
[編集]- 接続の問題:
rsyncがリモートホストに接続できない場合、sshの設定を確認してください。sshが正常に動作していない場合は、rsyncも失敗します。 - パーミッションの問題: ファイルやディレクトリの権限が不足していると、
rsyncはエラーを返します。必要な権限が設定されているか確認しましょう。
終わりに
[編集]rsyncは非常に強力で柔軟なツールです。ローカルでのファイル同期から、リモートバックアップ、さらには大規模なシステム間のデータ転送に至るまで、さまざまな用途に対応できます。効率的で信頼性の高いデータ転送を実現するために、ぜひ活用してください。
この章はFreeBSD環境でのrsync使用に関する基本的な知識を提供していますが、より高度な使い方についてはman rsyncを参照することをお勧めします。