rdiff-backup は、バックアップに新しいファイルを追加するときに非常に遅くなります

rdiff-backup は、バックアップに新しいファイルを追加するときに非常に遅くなります

データのバックアップには、rdiff-backupUbuntu 20.10 の (2.0.5) を使用しています。データ量はわずか 127 GB ですが、80,000 個のファイルと 17,000 個のフォルダー (主にソース コード リポジトリ、写真) があります。

私が発見した問題は、rdiff-backup が新しいファイルを追加するときに非常に遅いように見えることです。それを実証するために bash スクリプトを作成しました (以下を参照)。

スクリプトが行うことは次のとおりです。

  • 1000個の空のファイルを生成する
  • 初期バックアップを実行する
  • さらに1000個の空のファイルを生成する
  • もう一度バックアップする

最初のバックアップには約 1 秒かかりますが、2 回目のバックアップには 7 秒かかります (詳細な結果は下記を参照)。これは大したことないように思えますが、実際のデータでは、新しいファイルがほとんどないのに数時間かかってしまいます。

私を困惑させるのは、「実際の」時間だけが爆発的に増加しているように見えることです。rdiff-backup は他のプロセスとスタックしているのでしょうか?

この例は、内部 ext4 SATA SSD で実行します。

脚本:

#!/bin/bash
mkdir src
mkdir dest

files=1000

printf "Creating some dummy files.\n"
for (( i=1; i<=$files; i++ ))
do
    touch "src/$i.txt"
done

printf "First run."
time rdiff-backup src/ dest/
printf "\n"
sleep 1

printf "Second run, nothing changed."
time rdiff-backup src/ dest/
printf "\n"
sleep 1

printf "Creating some more dummy files.\n"
for (( i=$files+1; i<=$files*2; i++ ))
do
    touch "src/$i.txt"
done

printf "Third run, adding new files to backup."
time rdiff-backup src/ dest/
printf "\n"
sleep 1

printf "Forth run, nothing changed."
time rdiff-backup src/ dest/

出力:

Creating some dummy files.
First run.
real    0m1,076s
user    0m0,869s
sys     0m0,157s

Second run, nothing changed.
real    0m0,511s
user    0m0,419s
sys     0m0,037s

Creating some more dummy files.
Third run, adding new files to backup.
real    0m7,460s       <--- 7 times longer!
user    0m1,374s
sys     0m0,310s

Forth run, nothing changed.
real    0m0,747s    
user    0m0,645s
sys     0m0,053s

関連情報