2.5. シャットダウンが適切に行われない場合の VDO ボリュームの復旧
シャットダウンが適切に行われない場合に VDO ボリュームを復旧して、動作を継続できます。多くのタスクは自動化されています。また、プロセスの障害により VDO ボリュームの作成に失敗した場合は、クリーンアップできます。
2.5.1. VDO 書き込みモード
VDO は、以下の書き込みモードに対応します。
sync
VDO が
sync
モードの場合、その上の層は、書き込みコマンドがデータを永続ストレージに書き込むことを想定します。したがって、このモードは、ファイルシステムやアプリケーションには必要ありません。FLUSH リクエストまたは FUA (強制ユニットアクセス) リクエストを発行すると、データは、重要な点で持続します。VDO は、書き込みコマンドが完了したときに、基となるストレージが、データが永続ストレージに書き込まれることを保証する場合に限り、
sync
モードに設定する必要があります。つまり、ストレージには揮発性の書き込みキャッシュがないか、ライトスルーキャッシュが存在する必要があります。async
VDO が
async
モードの場合は、書き込みコマンドが承認されたときに、データが永続ストレージに書き込まれることを VDO が保証しません。ファイルシステムまたはアプリケーションは、各トランザクションの重要な点でデータの永続性を保証するために、FLUSH リクエストまたは FUA リクエストを発行する必要があります。書き込みコマンドが完了したときに、基となるストレージが永続ストレージに対するデータの書き込みを保証しない場合は、VDO を
async
モードに設定する必要があります。これは、ストレージに揮発性のあるライトバックキャッシュがある場合です。async-unsafe
このモードには、
async
と同じプロパティーがありますが、ACID (Atomicity, Consistency, Isolation, Durability) に準拠していません。async
と比較して、async-unsafe
のパフォーマンスは向上します。警告VDO ボリュームに関する ACID コンプライアンスを想定するアプリケーションまたはファイルシステムが稼働する場合は、
async-unsafe
モードにより予想外のデータ損失が生じる可能性があります。auto
-
auto
モードは、各デバイスの性質に基づいて、sync
またはasync
を自動的に選択します。以下はデフォルトのオプションになります。
2.5.2. VDO ボリュームの復旧
シャットダウンが適切に行われなかった場合に VDO ボリュームを再起動すると、VDO は以下の操作を実行します。
- ボリューム上のメタデータの一貫性を検証する
- メタデータの一部を再構築して、必要に応じて修復する
再構築は自動で行われ、ユーザーの介入は必要ありません。
VDO は、アクティブな書き込みモードに依存する各種書き込みを再構築します。
sync
-
VDO が同期ストレージで稼働していて、書き込みポリシーが
sync
に設定されていた場合は、ボリュームに書き込まれたすべてのデータが完全に復元されます。 async
-
書き込みポリシーが
async
であった場合、一部の書き込みは永続性が保たれないと復元されないことがあります。これは、VDO にFLUSH
コマンド、または FUA (強制ユニットアクセス) フラグでタグ付けされた書き込み I/O を送信することで行われます。これは、fsync
、fdatasync
、sync
、umount
などのデータ整合性の操作を呼び出すことで、ユーザーモードから実行できます。
どちらのモードであっても、フラッシュによって承認されていない、あるいは確認されていない一部の書き込みも再構築されることがあります。
自動復元および手動復元
VDO ボリュームが 復旧
操作モードになると、VDO は、オンラインに戻ってから、適切ではない VDO ボリュームを自動的に再構築します。これは オンラインリカバリー と呼ばれます。
VDO が正常に VDO ボリュームを復元できない場合は、ボリュームの再起動後も持続する 読み取り専用
モードにボリュームを置きます。再構築が強制されるため、問題を手動で修正する必要があります。
関連情報
- 自動リカバリーおよび手動リカバリー、ならびに VDO 操作モードの詳細は、「VDO 操作モード」 を参照してください。
2.5.3. VDO 操作モード
ここでは、VDO ボリュームが正常に動作しているか、エラーからの復旧であることを示すモードを説明します。
vdostats --verbose device
コマンドを使用すると、VDO ボリュームの現在の操作モードを表示できます。出力内の Operating mode 属性を参照してください。
normal
-
これがデフォルトの操作モードです。以下のいずれかのステータスにより別のモードが強制されない限りに、VDO ボリュームは常に
normal
モードになります。新規作成された VDO ボリュームはnormal
モードで起動します。 recovering
シャットダウンの前に、VDO ボリュームがすべてのメタデータを保存しない場合は、次に起動した時に自動的に
recovering
モードになります。このモードになる一般的な理由は、突然の停電や、基となるストレージデバイスの問題です。recovering
モードでは、VDO は、デバイスのデータの物理ブロックごとに参照カウントを修正します。通常、リカバリーにはかなり時間がかかります。その時間は、VDO ボリュームの大きさ、基となるストレージデバイスの速度、VDO が同時に処理するリクエスト数により異なります。VDO ボリュームは、通常は以下の例外で動作します。- 最初に、ボリュームに対する書き込み要求に利用できる領域の量が制限される場合があります。復旧するメタデータの数が多いと、より多くの空き領域が利用可能になります。
- VDO ボリュームの復旧中に書き込まれたデータは、そのデータが、復旧していないボリュームに含まれる場合に、クラッシュする前に書き込まれたデータに対する重複排除に失敗することがあります。VDO は、ボリュームの復旧中にデータを圧縮できます。圧縮したブロックの読み取りや上書きは可能です。
- オンラインリカバリーを行う際、一部の統計 (blocks in use や blocks free など) は利用できません。この統計は、再構築が完了すると利用できます。
- 継続中の復旧作業により、読み取りと書き込みの応答時間が通常よりも遅いことがあります。
recovering
モードでは、VDO ボリュームを問題なくシャットダウンできます。シャットダウンする前に復元が完了しないと、デバイスは、次回起動時に再度recovering
モードになります。VDO ボリュームは自動的に
recovering
モードを終了し、すべての参照カウントが修正されると、normal
モードに移行します。管理者アクションは必要ありません。詳細は、「VDO ボリュームのオンラインリカバリー」 を参照してください。read-only
VDO ボリュームが致命的な内部エラーに遭遇すると、
read-only
モードになります。read-only
モードになるイベントには、メタデータの破損や、バッキングストレージデバイスが読み取り専用になるなどが挙げられます。このモードはエラー状態です。read-only
モードでは、データ読み取りは正常に機能しますが、データの書き込みは常に失敗します。管理者が問題を修正するまで、VDO ボリュームはread-only
モードのままになります。VDO ボリュームを
read-only
モードで問題なくシャットダウンできます。通常、モードは、VDO ボリュームが再起動した後も持続します。まれに、VDO ボリュームはバッキングストレージデバイスにread-only
状態を記録することができません。このような場合、VDO は代わりに復旧を試みます。ボリュームが読み取り専用モードの場合、ボリュームのデータが損失または破損していないという保証はありません。このような場合、Red Hat は、読み取り専用のボリュームからデータをコピーして、バックアップからボリュームを復旧することを推奨します。
データ破損のリスクを許容できる場合は、VDO ボリュームのメタデータのオフライン再構築を強制することで、ボリュームをオンラインに戻して利用できるようにできます。再構築されたデータの整合性は保証できません。詳細は、「VDO ボリュームメタデータのオフライン再構築の強制」 を参照してください。
2.5.4. VDO ボリュームのオンラインリカバリー
この手順では、シャットダウンが正常に行われなかったときに、VDO ボリュームでオンラインリカバリーを実行して、メタデータを復旧します。
手順
VDO ボリュームを起動していない場合は、起動します。
# vdo start --name=my-vdo
その他に何か行う必要はありません。復元は、バックグラウンドで実行します。
- blocks in use、blocks free などのボリューム統計を使用する場合は、利用可能になるまで待ちます。
2.5.5. VDO ボリュームメタデータのオフライン再構築の強制
この手順では、シャットダウンが正常に行われなかった場合に、VDO ボリュームメタデータの強制的なオフライン再構築を実行して、復旧します。
この手順では、ボリュームでデータが失われることがあります。
前提条件
- VDO ボリュームが起動している。
手順
ボリュームが読み取り専用モードかどうかを確認します。コマンド出力で operating mode 属性を確認します。
# vdo status --name=my-vdo
ボリュームが読み取り専用モードではない場合は、オフラインの再構築を強制する必要はありません。「VDO ボリュームのオンラインリカバリー」 に従って、オンラインリカバリーを実行します。
ボリュームが稼働している場合は停止します。
# vdo stop --name=my-vdo
--forceRebuild
オプションを指定して、ボリュームを再起動します。# vdo start --name=my-vdo --forceRebuild
2.5.6. 作成に失敗した VDO ボリュームの削除
この手順では、中間状態で VDO ボリュームをクリーンアップします。ボリュームの作成時に障害が発生した場合、ボリュームは中間状態になります。たとえば、以下のような場合に発生する可能性があります。
- システムのクラッシュ
- 停電
-
管理者が、実行中の
vdo create
コマンドに割り込み
手順
クリーンアップを行う場合は、
--force
オプションを使用して、作成に失敗したボリュームを削除します。# vdo remove --force --name=my-vdo
ボリュームの作成に失敗して、管理者がシステム設定を変更して競合を発生させたため、
--force
オプションが必要となります。--force
オプションを指定しないと、vdo remove
コマンドが失敗して、以下のメッセージが表示されます。[...] A previous operation failed. Recovery from the failure either failed or was interrupted. Add '--force' to 'remove' to perform the following cleanup. Steps to clean up VDO my-vdo: umount -f /dev/mapper/my-vdo udevadm settle dmsetup remove my-vdo vdo: ERROR - VDO volume my-vdo previous operation (create) is incomplete