2016年2月6日土曜日

btrfs send/receive は rsync よりどのくらい速いのか?

Cinnamon デスクトップ環境のみをインストールした Debian のイメージ (3.7GB, ファイル数114842) を用意し、それを同じマシンの別のハードディスクに同期する時間を計測した。使用した Linux カーネルは 4.3 である。

ベンチマーク結果は次の通り:

同期方法 初回(全コピー) 2回目以降(差分コピー)
ext4 + rsync 1m23.188s 0m3.543s
btrfs send/receive 0m53.661s 0m0.679s

見ての通り、 btrfs send/receive が rsync に比べて圧倒的に高速であった。

差分コピーにおいて、 btrfs send/receive は全ファイル数が増えてもかかる時間はほとんど変わらないのに対し、 rsync は全ファイルの更新時刻をスキャンするためそれに比例した時間がかかる。したがって、同期するファイルシステムが大きくなるにつれ、 btrfs send/receive と rsync の差は拡大する。巨大なファイルシステムのバックアップに btrfs send/receive は非常に適している。一方、 btrfs send/receive はオーバーヘッドは少なくなく、ファイル数が20000以下の場合は rsync のほうが btrfs send/receive より速い。

ただし、 btrfs send/receive は2016年2月現在、実験的機能とされており、既知の問題も多く存在する。rsync は遅いとはいえ、速度より信頼性が求められるバックアップ用途としては十分実用に耐えるものである。でも次期マシンでは rsnapshot (rsync を使ったバックアップツール)から btrbk (btrfs send/receive を使ったバックアップツール)に移行してみてもいいかなと思わせる結果となった。