[Linux] rsyncで進捗を確認する

概要

rsync を実施する際に進捗を確認したい。

やり方

要約
  • 時間経過で変わる可能性のある進捗でもいいなら rsync -a --info=progress2
  • 時間が多少かかっても確実な進捗が欲しいなら rsync -a --info=progress2  --no-inc-recursive

方法1(進捗は適宜でもいいですよ派)

rsync では進捗状況を確認するオプションに ver.3.10 から対応 した。 そのオプションは --info=progress2 である。
rsync -a --info=progress2 /what/to/backup /where/to/backup
このオプションを行うと確かに進捗状況が表示されるようになるのだが、大きな階層構造を持つディレクトリをコピーしようとすると、 進捗状況が刻々と下限修正されてしまい、表示の意味がなくなってしまう。

方法2(最初からしっかりした進捗出してくれないと意味ないよ派)

進捗表示がずれてしまう問題の原因

原因は、 rsync がver.3.0.0から導入したrecursive algorithmというアルゴリズム。 recursive algorithmは転送中にリアルタイムにディレクトリ構造を把握していく非同期な処理であり、 非同期なので最初にきっかりと結果が分かるわけではなく裏でこそこそとディレクトリ構造を把握して進捗状況を正確なものへと更新していく。 もちろん、非同期であるから転送開始自体は速やかに行われるという利点があるのだけど、進捗状況をちゃんと確認したい人間にとっては厄介かも。

そこで --no-inc-recursive ですよ

そこで利用するのが --no-inc-recursive オプション。
rsync -a --info=progress2 --no-inc-recursive /what/to/backup /where/to/backup
このオプションをつけると、recursive algorithmをオフにすることができる。 このアルゴリズムをオフにすると、 rsync はまず最初にコピー元ディレクトリの情報把握を最初に完璧に行うようになる。 そしてそれが終わったあとにコピーを実施。 つまり、ディレクトリの全ファイル数とファイルサイズを確認してから転送が行われるために進捗状況が最初から正確な値を示している状態になる。
ただし、このオプションを指定すると進捗表示のための計算が最初に入る。 転送する対象が大きいあるいは深いディレクトリであればあるほどに転送が始まるまでの時間が結構かかる、という問題点はある。

※ 本記事は移転予定のサイトにほぼ同一の内容の記事があります(rsyncで進捗を確認する方法)。将来的にはこちらは削除される予定です。

コメント

このブログの人気の投稿

gnuplot: グラフの色を変更する

gnuplotで縦線を引きたい