rsyncコマンドの使い方メモ【NASバックアップの権限エラー対処も解説】
はじめに
rsyncは、リモート、ローカルのシステム間でファイルを同期するためのツールです。 転送されたファイルの変更を検出し、差分だけを転送することができます。 そのため、帯域幅の節約と転送速度の向上を実現します。
rsyncは、LinuxやUnixなどのオペレーティングシステムで広く使用されており、ファイルのバックアップや同期に使用されます。 SSHを介して暗号化された接続を使用することもできるため、リモートのファイルのコピー、バックアップ、または同期を自動化することもできます。
rsyncは、一度に転送するファイルのサイズを最小限に抑えるため、差分転送アルゴリズムを使用しています。これにより、大量のデータを効率的に転送でき、ネットワーク上の帯域幅を最小限に抑えることができます。
rsyncコマンド
rsyncはスラッシュの使い方でディレクトリ配下を対象とするかディレクトリを対象とするか決まります。
/path/to/sourceの場合は、対象ディレクトリ配下のファイルが同期対象になります。/path/to/source/の場合は、対象ディレクトリ自体が同期対象となります。
| オプション | 説明 |
|---|---|
-a | アーカイブモード(権限・タイムスタンプ等を保持) |
-v | 詳細ログを表示 |
-z | 転送時にデータを圧縮する |
-n / --dry-run | 実際には実行せず確認のみ |
--delete | 転送元にないファイルを転送先から削除 |
--exclude | 特定のファイル・ディレクトリを除外 |
-e ssh | SSH経由で転送 |
-r | ディレクトリを再帰的にコピー |
-l | シンボリックリンクを保持 |
-O | ディレクトリのタイムスタンプを変更しない |
-t | タイムスタンプを保持 |
-c | チェックサムでファイルの変更を検出 |
rsyncの基本的な使い方は、以下の通りです。
コピー
ローカルのディレクトリからローカルの別ディレクトリにコピーする場合
rsync -av /path/to/source /path/to/destination
リモートサーバーのディレクトリからローカルのディレクトリにコピーする場合
rsync -av user@remote:/path/to/source /path/to/destination
ローカルのディレクトリからリモートサーバーのディレクトリにコピーする場合
rsync -av /path/to/source user@remote:/path/to/destination
-aオプションはアーカイブモードで、-vオプションは詳細なログを表示することを指定しています。
同期
rsyncは--deleteオプションを利用しない場合、差分のコピーのみを実施します。
同期する場合は、不要になったファイルの削除も実施する必要があるため、--deleteオプションを指定する必要があります。
rsync -av --delete /path/to/source /path/to/destination
テスト
rsyncは--dry-runオプションを利用すると、実際に実行せずに実行内容だけを確認することができます。
exfatでマウントしたNFSへのバックアップ
自分の環境でフォルダをNASにバックアップしようとすると-aオプションでは権限エラーが発生しました。
ファイルの所有者等の変更ができないことが理由でした。
そのため、下記のコマンドを利用することにしました。
rsync -rlOtcv --delete /path/to/source /path/to/destination
メモ
2019年4月17日にリリースされたOpenSSH 8.0でscpコマンドではなく、sftpやrsyncなどの最近のコマンドを利用することが推奨されていました。