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オプションを付けることで圧縮して転送を行うことができる。

参考リンク