Bash rsyncコマンド
1. rsyncコマンドの使用方法
rsyncコマンドは、ファイルのタイムスタンプやサイズをチェックすることで、コンピュータシステム間で効率的にファイルを転送・同期(シンクロナイゼーション)するために使用されます。
1.1 基本的な使い方
ディレクトリをリモートホストに同期するには、rsync -avz ソース ユーザー名@ホスト名:/パス の形式を使用します。
例:
rsync -avz /local/dir/ [email protected]:/remote/dir/
# /ローカル/ディレクトリ/ を [email protected]:/リモート/ディレクトリ/ に同期します1.2 rsyncの出力を理解する
rsyncコマンドの出力内容は、使用するオプションによって異なりますが、一般的に以下の要素が含まれます。
- ファイルリスト(File List): 転送されているファイルの一覧を表示します。
- 転送進捗(Transfer Progress): 各ファイルの転送ステータスを表示します。
- 圧縮率(Compression Ratio): 圧縮を使用した場合、その効果を示します。
- スピード(Speed): ファイルが転送されている速度。
2. rsyncオプションの概要
rsyncコマンドで使用される、一般的なオプションをいくつか紹介します。
-a- アーカイブモード-v- バーボジティ(詳細出力)を増やす-z- ファイルデータを圧縮する--delete- 余分なファイルを削除する-r- ディレクトリ内に再帰的に入り込む-u- 受信側より新しいファイルをスキップする--progress- 転送中の進捗を表示する
2.1 -a オプション(アーカイブモード)
-aオプションはアーカイブモードを有効にします。これにより、パーミッション、タイムスタンプ、シンボリックリンクなどが保持されます。これは複数のオプションを組み合わせたような便利なモードです。
例:アーカイブモード
rsync -a /local/dir/ [email protected]:/remote/dir/2.2 -v オプション(詳細出力)
-v(Verbose)オプションは詳細出力を有効にし、rsyncプロセスの詳細な情報を表示します。
例:詳細出力
rsync -av /local/dir/ [email protected]:/remote/dir/2.3 -z オプション(圧縮)
-zオプションは、転送中にファイルデータを圧縮します。これにより、ネットワーク経由の転送プロセスを高速化できます。
例:圧縮の有効化
rsync -az /local/dir/ [email protected]:/remote/dir/2.4 --delete オプション
--deleteオプションを使用すると、コピー元(ソース)に存在しないファイルをコピー先(デスティネーション)から削除します。これにより、両方のディレクトリを完全に一致させることができます。
例:余分なファイルの削除
rsync -avz --delete /local/dir/ [email protected]:/remote/dir/2.5 -r オプション(再帰的コピー)
-r(Recursive)オプションは、rsyncがディレクトリ内を再帰的に探索し、すべてのファイルとサブディレクトリをコピーすることを可能にします。
例:再帰的コピー
rsync -ar /local/dir/ [email protected]:/remote/dir/2.6 -u オプション(アップデート)
-u(Update)オプションは、受信側にあるファイルの方が新しい場合、そのファイルのコピーをスキップします。これにより、新しいファイルを古いデータで上書きすることを防ぎます。
例:新しいファイルをスキップ
rsync -avu /local/dir/ [email protected]:/remote/dir/2.7 --progress オプション
--progressオプションは転送中に進捗状況を表示し、転送ステータスに関する詳細な情報を提供します。
例:進捗の表示
rsync --progress /local/dir/ [email protected]:/remote/dir/3. 一般的なトラブルシューティング
rsyncの使用中には、"Permission Denied"(権限拒否)や "Connection Timeout"(接続タイムアウト)といった問題が発生することがあります。以下に解決のためのヒントをまとめます。
- Permission Denied: ソースとデスティネーションの両方のディレクトリに対して、正しいパーミッションを持っているか確認してください。ユーザーの権限やSSHキーのアクセス権をチェックしましょう。
- Connection Timeout: ネットワーク接続を確認し、リモートサーバーに到達可能であることを確認してください。ファイアウォールの設定やSSHのコンフィギュレーションもチェックの対象です。