2010年代にはLVMスナップショットベースのバックアップとか流行らない (もしくはログ構造化ファイルシステムへの期待)

感想文です。タイトルはテンプレから。

たとえばうちの環境(普段 20-80 IOPS くらいの負荷がかかっている HDD) で、blockdiff (参照: Kazuho@Cybozu Labs: blockdiff を使ったお手軽ホットバックアップ環境の構築 (Linux, MySQL, etc.)) を実行すると、バックアップ速度は 10MB/sec. くらいになる。これはフルバックアップでも増分バックアップでも同じで、ボトルネックは HDD のシーケンシャルリード速度。他の I/O があるから、それぐらいの速度になってしまう *1

換言とすると、100GB のボリュームをバックアップするのに約3時間かかる。必要な時間が3時間ならデイリーバックアップで運用できるけど、これが 1TB のボリュームとかになると、ウィークリーバックアップしか選択肢がなくなる。

ただ、

  • ウィークリーバックアップだと頻度が低い。もっと高頻度でバックアップしたい
  • 負荷が高い昼間は、LVM スナップショットがない状態で運用できるとうれしい

という2点もあるので、TB クラスのストレージだと LVM スナップショットベースのバックアップは苦しいのかなぁ、と思っている。

この問題に対応できるのはログ構造化ファイルシステムで、例えば zfs はスナップショットベースの増分バックアップ機能を備えている。ファイルシステムが、前回のバックアップ以降 HDD のどこに変更がかかったか覚えているので、インクリメンタルバックアップの際に発生する読み込み量はストレージのサイズではなく、変更の発生した量に依存することになる。従って、ストレージのサイズに関係なく、高頻度のバックアップが可能*2

Linux のログ構造化ファイルシステムにどういうものがあるかは良く知らないけど、Nilfs には差分バックアップ機能はなさそうだった*3

もうひとつの可能性は、LVM ベースで同様の、差分だけを HDD からバックアップするような仕組みを作れるか、という点。前回のバックアップ時のスナップショットを取っておいて、最新のスナップショットと差分を取るようにすれば、きっとできるはず。ただ、

  • おそらく、スナップショット間の差分を読み出すためのドライバは自作しなければいけない
  • 常にスナップショット機能がオンだと書き込みパフォーマンスが落ちるので、あまりうれしくない

という2点がある。なので、できれば、高パフォーマンスで安定した、増分バックアップの取れるログ構造化ファイルシステムLinux にもほしいなぁ、なんて思ってる。

*1:逆に、X25-M のような並列アクセスに強い SSD を使っている場合は他の処理が動いていても関係ない感じ

*2:このへん XtraBackup は zfs ぽいやり方してるのかなーとか思ってるけど未確認

*3:ML で議論された形跡はある。参考: https://www.nilfs.org/pipermail/users/2009-March/001742.html