RAID1とLVMのmirror機能の比較、およびLVM+RAID1のやり方について

先日すべてのRAID設定を終わらせたはずだったのだが、LVMがどうしても気になってしまい、結局LVM+ミラーリングの構成にすることにした。
まずどのようにRAID1とLVMを組み合わせるのか検索したところ、偶然LVM自体にもミラーリングの機能があることを発見。どうせLVMを使用するならそれ自体の機能が使えれば、システム構成がシンプルになるし不測の事態も起こりにくいかもしれない。できればこの機能を使用したいと思ったのだが気になったのはパフォーマンスの点である。

LVM自体のミラーリング vs LVM+RAID1のパフォーマンス比較

Josh Bryan » LVM2 Mirrors vs. MD Raid 1
上が"lvm raid1 mirror"でトップに出てくるブログ記事である。
記事中ではLVMのミラーリング機能とRAID1(LVM化していない生のパーティション)でbonnie++を使って実験しているが、readはほぼ同性能なもののwriteはLVMのミラーリングの方がraid1より二倍近く速いという結果が出ている。しかしここではこの性能差の根拠が示されていない。むしろ二つ目のコメントでは普通に実験するとLVMとRAID1でパフォーマンスはほぼ同じ(LVMの方が1,2MB/sec速い)、しかし二つのファイルを同時に読むとRAID1の方が圧倒的に速いという結果が出たという。この理由はRAID1が二つ以上のファイルを読み込むときは二つのファイルを別々のディスクから読み込むから、という根拠があるためこちらの方が信頼できる。
さらに三つめのコメントを見てみると、LVMによるミラーリングはwriteバリアがなく、急に電源が落ちた場合等に安全性を確保できないと書かれている。ここではLVMが速い理由をキャッシュが使われているためと説明しており、その辺がLVMの方がwriteが速く見える理由のようだ。
まとめると、writeはLVMの純粋ミラーの方が速いがそれはキャッシュを使用しているためであり、安全性を考慮してキャッシュを無効にするとその速度はRAID1と同等だと考えられる。一方readは一ファイルのみの場合は両者とも同程度だが、複数ファイルを読み込む場合は読み込みディスクを複数使用するRAID1の方が有利であり、しかも安全性も確保されている。
結論:RAID1の勝利

次に気になるのがLVMとRAID1をどのように組み合わせるのか、という問題である。

LVM on RAID1 or RAID1 on LVM

RAID1とLVMを組み合わせようとしたとき、とりあえず二つの組み合わせ方法が考えられる。
一つ目はRAID1で作った仮想デバイスにLVMを作る方法で、LVMのPV自体がミラーリングされる。
二つ目はLVMで作ったLV二つにRAID1を作る方法で、LVごとにミラーリングされる結果となる。*1
両者ともに一長一短である。前者の構成だと全体がシンプルに扱え、VGも一つだけである。反面ミラーリングする容量は可変的に変更できない。反対に後者の構成だとVGは二つに増えるものの、ミラーリングする容量は可変的に変更できる。(たぶん、そのはず…)
LVM2 on RAID1 mirror - Bart's Blogこちらで紹介されている方法は前者で、後者についての言及はない。
他にもいろいろ探してみたが、LVMのLV上でRAID1を組む方法についてはほとんど言及されておらず、そもそもRAID1を構成しているLVを可変的にサイズ変更できるものなのかも確証がないため、やむなくRAID1上でLVMを作成することとなった。

もっとも参考にしたページは上で、ほぼそこに書かれた通りに操作を行った。マウントしてサイズを確認し、fstabに記入してから再起動してみたが、正常に稼働しているようだ。

*1:もし後者を行う場合少し注意が必要で、二つのHDDに作ったPVを一つのVGに統合するのではなく、別々にVGを作成してRAID1しなければならない。そうしないと二つ作ったLVが二つのHDD両方に分けて書かれる可能性があるためである。そうなると極端に言えば、一つのHDDでRAID1しているのと変わらない。この辺については詳しく調査しておらず、たしかどこかでVGを一つにしても正しくミラーリングしてくれる方法がある、と読んだ気がするが詳しくは忘れた。