最近、一部のサーバーで1 TBを超えるハードドライブのLVMの使用を開始しました。これらは便利で、拡張可能で、インストールが非常に簡単です。ただし、LVMの危険性と警告に関するデータは見つかりませんでした。
LVMを使用することの欠点は何ですか?
最近、一部のサーバーで1 TBを超えるハードドライブのLVMの使用を開始しました。これらは便利で、拡張可能で、インストールが非常に簡単です。ただし、LVMの危険性と警告に関するデータは見つかりませんでした。
LVMを使用することの欠点は何ですか?
回答:
概要
LVMを使用するリスク:
最初の2つのLVMの問題を組み合わせます。書き込みキャッシュが正常に機能せず、電源が失われた場合(PSUまたはUPSに障害が発生した場合など)、バックアップからの回復が必要になる場合があります。LVMを使用する主な理由は、稼働時間の増加(ディスクの追加、ファイルシステムのサイズ変更など)ですが、LVMが実際に稼働時間を短縮しないように、書き込みキャッシュのセットアップを正しく行うことが重要です。
-2018年12月に更新:LVMスナップショットの代替としてのZFSとbtrfsの安定性を含むスナップショット資料を更新
リスクを軽減する
次の場合、LVMは引き続き正常に機能します。
詳細
LVMに関連するデータ損失が発生したことを過去にかなり調査しました。私が知っている主なLVMのリスクと問題は次のとおりです。
VMハイパーバイザー、ディスクキャッシング、または古いLinuxカーネルによるハードディスク書き込みキャッシュに対して脆弱であり、ディスク上の構造がより複雑なためデータの回復が困難になります-詳細については以下を参照してください。いくつかのディスクで完全なLVMセットアップがリカバリの機会なしに破損するのを見てきました。LVMとハードディスク書き込みキャッシュは危険な組み合わせです。
data=ordered
オプションと同等の(またはdata=journal
追加の安全性のため)barrier=1
を使用する必要があります。さらに、カーネルキャッシュが整合性に影響を与えないようにする必要があります。(または、デフォルトでバリアを有効にするext4を使用します。)これは最も単純なオプションであり、パフォーマンスを犠牲にして優れたデータ整合性を提供します。(Linux はしばらく前にデフォルトのext3オプションをより危険なものにdata=writeback
変更したため、FSのデフォルト設定に依存しないでください。)hdparm -q -W0 /dev/sdX
すべてのドライブに追加/etc/rc.local
するか、SCSI / SASの場合はsdparmを使用します。ただし、XFS FAQのこのエントリ(このトピックで非常に良い)によると、SATAドライブはドライブエラー回復後にこの設定を忘れる場合があります。したがって、SCSI / SASを使用するか、SATAを使用する必要がある場合は1分ごとに実行されるcronジョブのhdparmコマンド。パフォーマンスのために書き込みキャッシュを有効にしておく(および横になっているドライブに対処する)
より複雑ではあるがパフォーマンスの高いオプションは、SSD /ハードドライブの書き込みキャッシュを有効に保ち、カーネル2.6.33+でLVMで動作するカーネル書き込みバリアに依存することです(ログで「バリア」メッセージを探すことによるダブルチェック)。
また、RAIDセットアップ、VMハイパーバイザーセットアップ、およびファイルシステムが書き込みバリアを使用することを確認する必要があります(つまり、キーメタデータ/ジャーナル書き込みの前後に保留中の書き込みをドライブがフラッシュする必要があります)。 XFSはデフォルトでバリアを使用しますが、ext3は使用しないため、ext3 barrier=1
ではマウントオプションで使用するdata=ordered
必要data=journal
があります。
書き込みキャッシュの使用はSSDの寿命にとって重要であるため、SSDには問題があります。スーパーキャパシタを備えたSSDを使用するのが最適です(電源障害時のキャッシュフラッシュを有効にして、キャッシュをライトスルーではなくライトバックできるようにします)。
Advanced Formatドライブのセットアップ-書き込みキャッシュ、アライメント、RAID、GPT
pvcreate
PVを調整するオプションを使用することを推奨します。このLVM電子メールリストスレッドは、2011年にカーネルで行われた作業と、単一のLVで512バイトと4 KiBセクターのディスクを混在させる場合の部分ブロック書き込みの問題を示しています。ディスク上の構造がより複雑なため、データを回復するのが難しくなります。
/etc/lvm
います。これは、LV、VG、PVの基本構造の復元には役立ちますが、ファイルシステムメタデータの損失には役立ちません。ファイルシステムを正しくサイズ変更するのが難しい-LVMの利点としてファイルシステムの簡単なサイズ変更がしばしば与えられますが、LVMベースのFSのサイズを変更するには、6個以上のシェルコマンドを実行する必要がありますFSがマウントされていますが、最新のバックアップと同等のサーバーで事前にテストされたコマンド(実稼働サーバーの災害復旧クローンなど)を使用しない限り、FSを危険にさらすことはありません。
lvextend
サポートします-これが利用可能であれば、特にFSを縮小している場合、LVとファイルシステムのサイズを変更するより安全で迅速な方法であり、このセクションはほとんどスキップできます。-r
--resizefs
resize2fs
ext3、to lvextend
または)lvreduce
。細心の注意を払わずに、1 GB(10 ^ 9)と1 GiB(2 ^ 30)の違い、またはさまざまなツールがサイズを切り上げるまたは切り上げる方法により、サイズがわずかに異なる場合があります。LVサイズは、FSサイズよりも2 x LVM物理エクステント(PE)サイズより大きくする必要がありますが、ソースが信頼できないため、詳細については上記のリンクを確認してください。多くの場合、8 MiBを許可するだけで十分ですが、100 MiBや1 GiBなど、もっと安全にするために許可する方がよい場合があります。4 KiB = 4096バイトブロックを使用して、PEサイズと論理ボリューム+ FSサイズを確認するには:
KiBでPEサイズを表示:
vgdisplay --units k myVGname | grep "PE Size"
すべてのLVのサイズ:
lvs --units 4096b
(ext3)FSのサイズ、4 KiB FSのブロックサイズを想定:
tune2fs -l /dev/myVGname/myLVname | grep 'Block count'
対照的に、非LVMセットアップでは、FSのサイズ変更が非常に信頼性が高く簡単になります。Gpartedを実行し、必要なFSのサイズを変更すると、すべての処理が実行されます。サーバーでparted
は、シェルから使用できます。
スナップショットは使いにくく、遅く、バグが多い -スナップショットが事前に割り当てられたスペースを使い果たすと、自動的に削除されます。特定のLVの各スナップショットは、そのLVに対するデルタであり(以前のスナップショットに対してではなく)、書き込みアクティビティが大きいファイルシステムのスナップショットを作成するときに多くのスペースを必要とします(スナップショットは以前のものよりも大きい)。元のLVと同じサイズのスナップショットLVを作成しても安全です。スナップショットの空き領域がなくなることはありません。
スナップショットは非常に遅くなる可能性があります(これらのMySQLテストでは LVMを使用しない場合よりも3〜6倍遅いことを意味します)- さまざまなスナップショットの問題に関するこの回答を参照してください。スナップショットには多くの同期書き込みが必要なため、速度が低下するのも一因です。
スナップショットにはいくつかの重大なバグがありました。たとえば、場合によっては、ブートが非常に遅くなったり、ブートが完全に失敗したりすることがあります(カーネルが LVMスナップショットである場合、ルートFSの待機中にタイムアウトする可能性があるため[Debian initramfs-tools
アップデート2015年3月で修正] )。
スナップショットの代替 -ファイルシステムとVMハイパーバイザー
VM /クラウドスナップショット:
ファイルシステムのスナップショット:
ZFSまたはbtrfsを使用したファイルシステムレベルのスナップショットは使いやすく、ベアメタルを使用している場合は一般的にLVMよりも優れています(ただし、ZFSははるかに成熟しているようで、インストールが面倒です)。
オンラインバックアップとfsckのスナップショット
スナップショットは、割り当てられたスペースに注意する限り、バックアップの一貫したソースを提供するために使用できます(理想的には、スナップショットはバックアップされるLVと同じサイズです)。優れたrsnapshot(1.3.1以降)は、LVMスナップショットの作成/削除も管理します-LVMを使用したrsnapshotのこのHOWTOを参照してください。ただし、スナップショットに関する一般的な問題と、スナップショット自体をバックアップと見なすべきではないことに注意してください。
また、オンラインでfsckを実行するためにLVMのスナップショットを使用することができます。まだメインの非スナップショットFS使用しながら、LVのスナップショットを作成し、スナップショットをfsckが- ここで説明を -しかし、それはだ、完全に簡単ではない、それは使用するのが最善ですのでe2croncheckとしてテッドTsだけ説明します'o、ext3のメンテナー。
スナップショットの取得中にファイルシステムを一時的に「フリーズ」する必要があります。ext3やXFSなどの一部のファイルシステムは、LVMがスナップショットを作成するときにこれを自動的に行います。
結論
これらすべてにもかかわらず、私はまだいくつかのシステムでLVMを使用していますが、デスクトップのセットアップにはrawパーティションを好みます。LVMから得られる主な利点は、サーバーの稼働時間を長くする必要がある場合にFSを柔軟に移動およびサイズ変更できることです。必要ない場合は、gpartedが簡単で、データ損失のリスクが少なくなります。
LVMは、VMハイパーバイザー、ハードドライブ/ SSD書き込みキャッシュなどのために、書き込みキャッシュの設定に細心の注意を払う必要がありますが、LinuxをDBサーバーとして使用する場合も同様です。ほとんどのツール(gparted
クリティカルサイズの計算などを含む)のサポートが不足しているため、testdisk
本来よりも使いにくくなっています。
LVMを使用している場合、スナップショットには細心の注意を払ってください:可能な場合はVM /クラウドスナップショットを使用するか、ZFS / btrfsを調べてLVMを完全に回避します-スナップショットを含むLVMと比較して、ZFSまたはbtrsが十分に成熟していることがあります。
結論:上記の問題とその対処方法がわからない場合は、LVMを使用しないことをお勧めします。
私はその投稿を[+1]しました。少なくとも私にとっては、ほとんどの問題は存在すると思います。数100台のサーバーと数100 TBのデータを実行しているときにそれらを確認しました。私にとって、LinuxのLVM2は誰かが持っていた「賢いアイデア」のように感じます。これらのいくつかのように、彼らは時々「賢くない」ことが判明します。つまり、カーネルとユーザー空間(lvmtab)の状態が厳密に分離されていないため、破損の問題が発生する可能性があるため(コードが正しくない場合)
まあ、ちょうどこの分離が理由でそこにあった -違いはPV損失処理と、VGをオンラインで再アクティブ化することで示されます。つまり、PVを失ってプレイに戻す-「元のLVM」(AIX 、HP-UX)は、状態の処理が十分ではないため、LVM2ではがらくたになります。また、クォーラム損失検出(笑)または状態処理(ディスクを削除した場合、使用不可としてフラグが立てられません。ステータス列もありません)についても話してはいけません。
再:安定性 pvmove ...なぜですか
pvmoveデータ損失
私のブログでそのようなトップランキングの記事は、うーん?ちょうど今、phyiscal lvmデータがmid-pvmoveからの状態でハングしているディスクを見ます。私が思うにいくつかのmemleaksがあり、ユーザースペースからライブブロックデータをコピーするのは良いことだという一般的なアイデアはただ悲しいです。「vgreduce --missingはpvmoveを処理しないようです」というlvmリストからの良い引用 また、ブロック読み取り/書き込みエラーの後にpvmoveが続行し、実際にはターゲットデバイスにデータを書き込まないというバグもありました。WTF?
Re:スナップショット CoWは、スナップショットlv領域に新しいデータを更新し、スナップを削除した後にマージして戻すことにより、安全ではありません。これは、新しいデータを元のLVに最終的にマージバックする際にIOが急増することを意味します。さらに重要なことは、もちろん、データ破損のリスクが非常に高くなることです。壁が、元の。
利点はパフォーマンスにあり、3回ではなく1回の書き込みを実行します。高速で安全ではないアルゴリズムを選択することは、VMwareやMSなどの人々に当然期待されることです。プライマリデータとは別のディスクドライブにスナップショットバッキングストアがある限り、パフォーマンスの問題はあまりありませんでした(もちろん、さらに別のディスクにバックアップします)。
Re:障壁 LVMでそれを責めることができるかどうかはわかりません。私の知る限り、それは開発者の問題でした。しかし、少なくともカーネル2.6から2.6.33までこの問題を実際に気にしないことについては非難があります。AFAIK Xenは、仮想マシンにO_DIRECTを使用する唯一のハイパーバイザーです。それでもそれを使用してキャッシュします。Virtualboxには少なくともこのようなものを無効にする設定があり、Qemu / KVMは通常キャッシュを許可しているようです。すべてのFUSE FSにも問題があります(O_DIRECTなし)
再:サイズ LVMは表示されたサイズの「丸め」を行うと思います。または、GiBを使用します。とにかく、VG Peサイズを使用して、LVのLE番号を掛ける必要があります。これにより正しいネットサイズが得られ、その問題は常に使用上の問題です。fsck / mount(hello、ext3)の間にそのようなことに気づかないか、オンラインの「fsck -n」(hello、ext3)が動作していないファイルシステムによって悪化します
もちろん、そのような情報の良いソースを見つけることができないことを伝えています。「VRA用のLEはいくつですか?」「PVRA、VGDAなどの物理的オフセットとは」
元のLVM2と比較して、LVM2は「UNIXを理解していない人は、UNIXを再発明することをお粗末に非難する」という典型的な例です。
数ヶ月後の更新:私は今までに、テストのために「フルスナップショット」シナリオに取り組んできました。いっぱいになると、元のLVではなくスナップショットがブロックされます。私が最初にこれを投稿したとき、私はそこで間違っていました。私はいくつかのドキュメントから間違った情報を拾い上げたか、多分それを理解していた。私の設定では、私はいつもそれらがいっぱいにならないように非常に妄想的でしたので、私は決して修正されませんでした。スナップショットを拡張/縮小することも可能です。
それでも解決できなかったのは、スナップショットの経過時間を特定する方法です。そのパフォーマンスについては、「thinp」fedoraプロジェクトページに、スナップショットのテクニックが改訂されており、スナップショットごとに遅くならないようになっているというメモがあります。彼らがどのようにそれを実装しているかはわかりません。
バックアップにスナップショットを使用する予定の場合-スナップショットが存在するときにパフォーマンスが大幅に低下する場合に備えてください。詳細はこちらをご覧ください。それ以外の場合はすべて良いです。数十台のサーバーで数年にわたって本番環境でlvmを使用していますが、それを使用する主な理由は、簡単にボリュームを拡張できないアトミックスナップショットです。
ところで、1TBドライブを使用する場合は、パーティションのアライメントを覚えておいてください-このドライブには、おそらく4kBの物理セクターがあります。
アダム、
別の利点:新しい物理ボリューム(PV)を追加し、すべてのデータをそのPVに移動してから、サービスを中断することなく古いPVを削除できます。この機能は、過去5年間で少なくとも4回使用しました。
まだ明確に指摘されていなかった欠点は、LVM2にはやや急な学習曲線があることです。ほとんどの場合、抽象化では、ファイルと基礎となるメディアの間に作成されます。一連のサーバーで雑用を共有する少数の人々と仕事をする場合、チーム全体として余分な複雑さが圧倒されることがあります。IT業務に専念する大規模なチームでは、通常、このような問題は発生しません。
たとえば、私は仕事でここで広く使用し、チーム全体に、正しく起動しないシステムを回復するための基本、言語、および最低限必要なものを教えるのに時間をかけました。
特に注意すべき1つの注意:LVM2論理ボリュームから起動する場合、サーバーがクラッシュしたときに回復操作が困難になることがわかりました。Knoppixと友人は、常にそのための適切なものを持っているとは限りません。そのため、/ bootディレクトリは専用のパーティション上にあり、常に小さくネイティブであることを決定しました。
全体として、私はLVM2のファンです。
/boot
個別のことは常に良い考えです
vgchange -ay
していますが、LVMボリュームを見つけるためにマニュアルが必要なものもあります。