「Linuxコマンド - rsync」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
168行目: 168行目:
|}
|}
</center>
</center>
<br><br>
== ディレクトリの同期 ==
ディレクトリを同期する場合は、<code>rsync -avz <同期元のディレクトリのパス>/ <同期先のディレクトリのパス>/</code>のように指定する。<br>
同期先のディレクトリが存在しない場合は、自動的に作成される。<br>
<br>
<code>-a</code>オプションはアーカイブを意味するオプションで、サブディレクトリが存在する場合は、<br>
<u>"サブディレクトリも処理する(再帰処理)"、"パーミッションやファイルのタイムスタンプを保持する"、"シンボリックリンクをシンボリックリンクのままコピーする"</u>等の動作となる。<br>
また、ファイルのサイズとタイムスタンプが同じ場合は、更新されていないファイルとみなし、コピーから除外される。<br>
<br>
チェックサムで比較する場合は、<code>-c</code>オプションを併用して、<code>rsync -acvz ~</code>と指定する。<br>
<br>
<code>-v</code>オプションは、動作中の内容を表示するオプションである。<br>
<code>-z</code>オプションは、転送データを圧縮するオプションである。<br>
# rsyncコマンドの実行例
rsync -avz <同期元のディレクトリのパス>/ <同期先のディレクトリのパス>/
<br>
ディレクトリ指定時の注意点を、以下に示す。<br>
同期元のディレクトリ末尾の<code>/</code>を省略した場合、同期先のディレクトリの中に同期元と同じ名前のディレクトリが作成される。<br>
<br>
例えば、<code>rsync -avz mydata/ backup-mydata/</code>コマンドを実行する場合、mydataディレクトリ内のファイルやディレクトリがbackup-mydataディレクトリ内にコピーされる。<br>
<br>
これに対して、<code>rsync -avz mydata backup-mydata/</code>コマンドを実行する場合、backup-mydata内にmydataディレクトリが作成されることになる。<br>
なお、同期先ディレクトリの末尾の<code>/</code>の有無はどちらでもよい。<br>
<br><br>
== 異なるホスト間でディレクトリを同期する ==
異なるホスト間でディレクトリを同期する場合、<br>
同期元や同期先を<code><IPアドレスまたはホスト名>:<ディレクトリのパス></code>または<code><ユーザ名>@<IPアドレスまたはホスト名>:<ディレクトリのパス></code>と指定する。<br>
<br>
ネットワークの回線速度が遅い環境で大きなファイルを転送する場合、<code>-z</code>オプションで転送データを圧縮するとよい。<br>
<br>
また、大きなファイルを転送している時にエラーで失敗する場合、<code>--partial</code>オプションを指定することにより、rsyncコマンドの再実行時に"続き"から再開することができる。<br>
この時、<code>--partial-dir=<ディレクトリのパス></code>オプションでコピー中のファイルを保存する場所を指定することもできる。<br>
# コマンドの実行例 (異なるホスト間でディレクトリを同期する)
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のディレクトリのパス>
<br><br>
<br><br>



2021年10月30日 (土) 11:07時点における版

概要

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
動作内容を表示する。


-aオプション使用時に有効になるオプション
オプション 説明
-r
--recursive
ディレクトリを再帰的に処理する。
-l
--links
シンボリックリンクをシンボリックリンクのままコピーする。
-p
--perms
パーミッションを保持する。
-t
--times
タイムスタンプを保持する。
-g
--group
所有グループをそのまま保持する。
-o
--owner
所有者をそのまま保持する。(自分以外の所有者を保持するにはroot権限が必要)
-D デバイスファイルや特殊ファイルを保持する。(--devices --specials相当)
--devices デバイスファイルを保持する。(root権限が必要)
--specials 特殊ファイルを保持する。


-aオプション使用時に無効になるオプション
オプション 説明
-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


rsyncのGitHubからソースコードをダウンロードする。

wget https://github.com/WayneD/rsync/archive/refs/tags/v<x.x.x>.tar.gz  # Release版
tar xf rsync.tar.gz
cd rsync

# または

git clone https://github.com/WayneD/rsync.git rsync                     # Debug版
cd rsync


rsyncをビルドおよびインストールする。

mkdir build && cd build

../configure --prefix=$HOME/InstallSoftware/rsync --disable-lz4 --disable-zstd --disable-md2man
make -j $(nproc)
make install


rsyncを動作させるために必要なライブラリをインストールする。

 sudo zypper install openssl libxxhash