読者です 読者をやめる 読者になる 読者になる

自宅サーバのバックアップについて悩む

現在我が家にあるサーバは、主に写真や映画の貯蔵庫として使用されている。とても大切な思い出がたくさん詰まっているので、データのバックアップは欠かしていない。しかし、現在の方法が果たして最適なのかという点については疑問が残る。最近、この問題に対する最適なソリューションについて思いを巡らせている。というわけで、素人なりに考えてみたことをいろいろメモってみる。

まず、データのバックアップの理想と現状について考えてみる。理想的には、ディスクが1本くらい吹き飛んでもダウンタイム0で復旧できるとよい。まあ必ずしも24時間動く必要はないので多少の妥協は可能だが、とにかく復旧は楽にできるとよい。現状の我が家のシステムでは、必要なファイルのみ夜間にバックアップを取得しているだけである。バックアップにはrdiff-backupを使用している。ここで、必要なファイルとは以下の通りである。

  • 画像・映像などが入っているデータディレクトリ
  • 稼働しているVMイメージまるごと(複数
  • VMのxmldump
  • mysqldump
  • インストールされているパッケージのリスト

これだけあればディスク故障が発生した場合でも復旧することは理論上可能だと思う。しかし、恐らく面倒くさい作業になるだろう。新しいディスクを購入したらdebianをインストールし直し、バックアップしてあるインストール済みパッケージリストから地道に再インストールを行い、あれこれ設定を行い、VMを戻して起動テストを行い・・・気が遠くなる・・・

そこで最近思いついたのが、RAID+スナップショットの活用である。まずRAIDについて述べる。例えばRAID1とかにしておけば、システムがまるごとミラーリングされるため、片方が吹き飛んでもダウンタイムゼロで復旧ができる。しかし、当時システムを組んだとき、私はRAIDにはしなかった。なぜなら、RAIDだけではバックアップの体をなさないからである。これは私が学生の頃勘違いしていたポイントでもあるが、RAID1やらRAID5, 6なんかは、現在の状態を保ち続けるという意味においては優れているが、過去のある時点に戻るということはできないのである。つまり、例えばついうっかりファイルを消した場合などには復旧不可能である。バックアップが必要なのは何も障害発生時だけではなく、こういったオペミスのときも考慮が必要なのである。

そんなわけで、以前はバックアップというところに重きを置いて、RAIDは組まなかったのである。HDDを2つしか持っていないので、RAID1+バックアップという運用も諦めた。しかし、最近のファイルシステムの中には、ボリュームのスナップショットを取得できるものが存在していることを知った。スナップショットを使えば、ある時点のボリュームの状態に簡単に戻ることができる。これはRAIDと極めて相性がよいのではなかろうか。RAIDを組むことで物理的な障害に耐えられるようにし、スナップショットを活用することで過去の特定の時点へのrevertも簡単に行えるというわけだ。すごい!

ただし、スナップショットは多分ボリューム単位に取得されるであろうから、例えば複数ファイルに変更を加え、そのうち1つのファイルを誤って消去した場合などに問題が残るだろう。というのも、revertしたいのは最後に誤って消したファイルだけで、その他の変更済みファイルは変更後の状態にしておきたいからである。そう考えると、現行のバックアップ方式も、あながち悪くない。

そこで考えた。恐らく、普通のバックアップとボリュームのスナップショットは両方必要である。システムがソフトウェア的にクラッシュしてカーネルパニックなんかを起こしたときは、いっそスナップショットを使ってrevertしたいし、特定ファイルだけ元に戻したいときはバックアップからの復元が便利である。そうなると、我が家における最強の構成は、RAID1に加えて、必要ファイルの定期バックアップを取得し、さらにRAID1上のボリュームは定期的にスナップショットを取得するという方法だろう。もともとHDDが2つしかないというのが我が家のネックであったが、この際もう一枚買うのもやむを得ないかもしれない。

さて、先ほどからスナップショットを取得すると言っているが、これが可能なファイルシステムにはどのようなものがあるのだろうか?私の調べたところでは、btrfsとzfsの2つが存在する。このうちzfsは様々なモダンな機能が搭載されているのに加え、RAIDZなるRAID5の欠点を補うような仕組みが存在するなど、非常に魅力的である。が、Linux上で使用するには実用に耐える性能が出ないというのが現状のようだ。(情報が間違っていたらすみません。)

そこで、現在btrfsの導入を検討している。Wikipediaを見るとまだ安定版は存在しないと書かれているが、最近ではかなり安定してきているようである。
FAQ - btrfs Wiki

残る問題は、どのように現在のシステムをbtrfsに置き換えるかであるが、どうやらext4からbtrfsに変換する方法があるようだ。
20.12 Ext2、Ext3またはExt4ファイル・システムのBtrfsファイル・システムへの変換
しかしこれを実行するのはかなり勇気がいるな・・・ついでにどうやってRAIDを組めばよいのかもよく分かっていないので、これからまだ調べる必要がありそうだ。

現状のシステムをかなりいじくりまわさないといけないため腰が重いが、HDDがクラッシュして泣くのは自分なので、そのうち頑張ってやってみようと思う。