rsyncで大容量のファイルコピーを行う
USB HDD間で大容量のファイルコピーを行う必要が出てきたので、調べてみた。
rsyncでファイルコピーを行うには、次のようにすればよい。
コピー元のパスについて、最後にスラッシュをつけない場合はディレクトリごと、つける場合はディレクトリの中身ごとのコピーとなる。
また、SSH経由でリモートサーバにアクセスする場合は、user@server:/path/to/src
のように指定する。
$ rsync -avhP /path/to/src /path/to/dst
オプションの意味は下記の通り。
$ rsync --version rsync version 3.0.9 protocol version 30 $ man rsync -v, --verbose increase verbosity -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) -h, --human-readable output numbers in a human-readable format --partial keep partially transferred files --progress show progress during transfer -P same as --partial --progress
-a
は再帰的コピーとパーミッションの保存を行う。-v
は詳細な出力を吐く。-h
はバイト数をMB、GB表示にする。-P
は進捗の表示と、中断された際に未完了ファイルを残す。また、-W
オプションで差分転送アルゴリズムをオフにできるが、コピー元・コピー先がローカルの場合はデフォルトでオフになっている。
--progress
オプションでは、次のように進捗が表示される。
1238099 100% 146.38kB/s 0:00:08 (xfer#5, to-check=169/396)
括弧内の出力から、この時点で5番目の転送が終わり、合計396ファイルのうち169ファイルの処理が残っていることがわかる(つまり、396-169-5個のファイルは差分がなかったためスキップされている)。
コピーを途中で中断した場合も、上のコマンドを繰り返し実行することで続きから再開できる。
なお、--delete
オプションを付けることで、転送元に存在しないファイルを転送先から削除、-z
オプションを付けることで圧縮して転送を行うことができる。