概要
rsyncコマンドは、リモート環境とファイルやディレクトリを同期(sync)するコマンドである。(ローカル環境のみでも使用できる。)
変更があった分だけ更新する機能があるため、特にディレクトリ単位のバックアップに便利である。
オプション
rsyncコマンドの書式を、以下に示す。
rsync <オプション> <同期元のディレクトリのパス> <同期先のディレクトリのパス>
下表に、rsyncコマンドの主なオプションを示す。
| オプション | 説明 |
|---|---|
| -a --archive |
アーカイブモード(-rlptgoD -no-H -no-A -no-X相当)
|
| -c --checksum |
更新日とサイズではなく、チェックサムで変更の有無をチェックする。 |
| --daemon | デーモンとして動作する。(--daemon --helpでデーモン時に使用できるオプションが確認できる)
|
| -I --ignore-times |
サイズとタイムスタンプが同じファイルも処理する。 |
| --list-only | コピーする代わりにファイルのリストを作成する。 |
| -n --dry-run |
試験モード。 実際には動作せず、動作内容だけ表示する。( -vや--statsを一緒に指定する)
|
| --no-<オプション名> | 指定したオプションを無効にする。(-Hを無効にする場合は、--no-Hのように指定する)
|
| -q --quiet |
動作中のメッセージを抑制する。 |
| --stats | ファイル数や転送サイズを表示する。 |
| --size-only | 同じサイズのファイルは処理しない。 |
| -v --verbose |
動作内容を表示する。 |
| オプション | 説明 |
|---|---|
| -r --recursive |
ディレクトリを再帰的に処理する。 |
| -l --links |
シンボリックリンクをシンボリックリンクのままコピーする。 |
| -p --perms |
パーミッションを保持する。 |
| -t --times |
タイムスタンプを保持する。 |
| -g --group |
所有グループをそのまま保持する。 |
| -o --owner |
所有者をそのまま保持する。(自分以外の所有者を保持するにはroot権限が必要) |
| -D | デバイスファイルや特殊ファイルを保持する。(--devices --specials相当)
|
| --devices | デバイスファイルを保持する。(root権限が必要) |
| --specials | 特殊ファイルを保持する。 |
| オプション | 説明 |
|---|---|
| -H --hard-links |
ハードリンクを保持する。 |
| -l --links |
ACL(アクセス制御リスト)を保持する。(-pも同時に指定した扱いになる)
|
| -X --xattrs |
拡張属性を保持する。 |
| オプション | 説明 |
|---|---|
| --copy-unsafe-links | リンク先が自分の配下にないものだけを対象にする。 |
| -k --copy-dirlinks |
ディレクトリへのリンクの場合もリンク先を転送する。 |
| -K --keep-dirlinks |
ディレクトリへのリンクをたどらない。 |
| -l --links |
シンボリックリンクをシンボリックリンクのままコピーする。 |
| -L --copy-links |
シンボリックリンクを対象にする。 |
| --safe-links | リンク先が自分の配下にあるものだけを対象にする。 |
| オプション | 説明 |
|---|---|
| --chmod=CHMOD | パーミッションを指定する。 |
| -E --executability |
実行可能属性を保持する。 |
| -g --group |
所有グループをそのまま保持する。 |
| --numeric-ids | ユーザIDとグループIDを保持する。(転送先の名前に対応させない) |
| -O --omit-dir-times |
--timesオプション指定時、ディレクトリは除外する。
|
| -o --owner |
所有者をそのまま保持する。(自分以外の所有者を保持するにはroot権限が必要) |
| -p --perms |
パーミッションを保持する。 |
| -t --times |
タイムスタンプを保持する。 |
| オプション | 説明 |
|---|---|
| -T --temp-dir=<ディレクトリのパス> |
指定したディレクトリに一時ディレクトリを作成する。 |
| -z --compress |
転送中のデータを圧縮する。 |
| --compress-level=<レベル> | データの圧縮レベルを指定する。 |
| --skip-compress=<リストファイル> | リストファイルに書かれたファイルは圧縮しない。 |
| --port=<ポート番号> | ポート番号を指定する。 |
| --sockopts=<TCPオプション> | TCPオプションを指定する。 |
| -8 --8-bit-output |
8ビット以上の文字をエスケープしない。 |
| -h --human-readable |
数字を読みやすい単位で表示する。 |
| --progress | 転送の進行状況を表示する。 |
| -P | --partial --progressと同様である。
|
| --partial | 転送を中断したファイルを保持する。 |
| --partial-dir=<ディレクトリのパス> | 転送を中断したファイルを保存するディレクトリ。 |
| -4 --ipv4 |
IPv4を使用する。 |
| -6 --ipv6 |
IPv6を使用する。 |
| --timeout=<秒数> | I/Oタイムアウトの秒数。 |
| --iconv=<変換方法> | ファイル名の変換方法を指定する。 (転送元がmacOSの場合は、 --iconv=UTF-8-MAC,UTF-8のように指定する)
|
ディレクトリの同期
ディレクトリを同期する場合は、rsync -avz <同期元のディレクトリのパス>/ <同期先のディレクトリのパス>/のように指定する。
同期先のディレクトリが存在しない場合は、自動的に作成される。
-aオプションはアーカイブを意味するオプションで、サブディレクトリが存在する場合は、
"サブディレクトリも処理する(再帰処理)"、"パーミッションやファイルのタイムスタンプを保持する"、"シンボリックリンクをシンボリックリンクのままコピーする"等の動作となる。
また、ファイルのサイズとタイムスタンプが同じ場合は、更新されていないファイルとみなし、コピーから除外される。
チェックサムで比較する場合は、-cオプションを併用して、rsync -acvz ~と指定する。
-vオプションは、動作中の内容を表示するオプションである。
-zオプションは、転送データを圧縮するオプションである。
# rsyncコマンドの実行例 rsync -avz <同期元のディレクトリのパス>/ <同期先のディレクトリのパス>/
ディレクトリ指定時の注意点を、以下に示す。
同期元のディレクトリ末尾の/を省略した場合、同期先のディレクトリの中に同期元と同じ名前のディレクトリが作成される。
例えば、rsync -avz mydata/ backup-mydata/コマンドを実行する場合、mydataディレクトリ内のファイルやディレクトリがbackup-mydataディレクトリ内にコピーされる。
これに対して、rsync -avz mydata backup-mydata/コマンドを実行する場合、backup-mydata内にmydataディレクトリが作成されることになる。
なお、同期先ディレクトリの末尾の/の有無はどちらでもよい。
異なるホスト間でディレクトリを同期する
異なるホスト間でディレクトリを同期する場合、
同期元や同期先を<IPアドレスまたはホスト名>:<ディレクトリのパス>または<ユーザ名>@<IPアドレスまたはホスト名>:<ディレクトリのパス>と指定する。
ネットワークの回線速度が遅い環境で大きなファイルを転送する場合、-zオプションで転送データを圧縮するとよい。
また、大きなファイルを転送している時にエラーで失敗する場合、--partialオプションを指定することにより、rsyncコマンドの再実行時に"続き"から再開することができる。
この時、--partial-dir=<ディレクトリのパス>オプションでコピー中のファイルを保存する場所を指定することもできる。
# コマンドの実行例 (異なるホスト間でディレクトリを同期する) rsync -avz --delete --rsh="ssh" <同期先PCのディレクトリのパス> <同期元PCのユーザ名>@<同期元PCのIPアドレスまたはホスト名>:<同期元PCのディレクトリのパス> rsync -avz --delete --rsh="ssh" <同期元PCのユーザ名>@<同期元PCのIPアドレスまたはホスト名>:<同期元PCのディレクトリのパス> <同期先PCのディレクトリのパス>
rsync -avz --delete --rsh="ssh -p <ポート番号> -i <暗号鍵ファイルのパス>" \ <同期先PCのディレクトリのパス> <同期元PCのユーザ名>@<同期元PCのIPアドレスまたはホスト名>:<同期元PCのディレクトリのパス> rsync -avz --delete --rsh="ssh -p <ポート番号> -i <暗号鍵ファイルのパス>" \ <同期元PCのユーザ名>@<同期元PCのIPアドレスまたはホスト名>:<同期元PCのディレクトリのパス> <同期先PCのディレクトリのパス>
rsyncのインストール
ソースコードからインストール
ビルドに必要な依存関係のライブラリをインストールする。
sudo zypper install libopenssl-devel libacl-devel xxhash-devel liblz4-devel libzstd-devel python3 -mpip install --user commonmark # または sudo zypper install libopenssl-devel libacl-devel xxhash-devel liblz4-devel libzstd-devel python3-CommonMark python3-cmarkgfm
rsyncのGitHubからソースコードをダウンロードする。
wget https://github.com/WayneD/rsync/archive/refs/tags/vX.Y.X.tar.gz # Release版 tar xf rsync.tar.gz cd rsync # または git clone https://github.com/WayneD/rsync.git # 開発版 cd rsync
rsyncをビルドおよびインストールする。
mkdir build && cd build ../configure --prefix=<Rsyncのインストールディレクトリ> make -j $(nproc) make install
rsyncを動作させるために必要なライブラリをインストールする。
sudo zypper install openssl libxxhash