2.4. VDO 書き込みモードの選択
基となるブロックデバイスでの要件に応じて、VDO ボリュームに書き込みモードを設定できます。デフォルトでは、VDO は書き込みモードを自動的に選択します。
2.4.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.4.2. VDO 書き込みモードの内部処理
VDO の書き込みモードは sync
と async
です。以下では、これらのモードの操作について説明します。
kvdo
モジュールが同期 (synch
) モードで動作している場合は、以下を行います。
- リクエストのデータを一時的に、割り当てられたブロックに書き込み、リクエストを承認します。
- 承認が完了すると、ブロックデータの MurmurHash-3 署名を計算してブロックの重複排除が試行されます。これは、VDO インデックスに送信されます。
-
VDO インデックスに同じ署名とともにブロックのエントリーが含まれる場合、
kvdo
は示されたブロックを読み込み、同一であるかを検証するために 2 つのブロックのバイト対バイトの比較を行います。 -
同一であることが確認されると、
kvdo
はブロックマップを更新して、論理ブロックが、一致する物理ブロックを指定し、割り当てられた物理ブロックをリリースします。 -
VDO インデックスに、書き込まれているブロックの署名のエントリーを含まない場合や、示されたブロックが同じデータを含まない場合は、
kvdo
はブロックマップを更新して、一時的な物理ブロックを永続的にします。
kvdo
が非同期 (async
) モードで動作している場合は、以下のコマンドを実行します。
- データを書き込む代わりに、リクエストをすぐに承認します。
- 上記の説明と同じように、ブロックの重複排除試行が行われます。
-
ブロックが重複していることになると、
kvdo
はブロックマップを更新し、割り当てられたブロックを解放します。解放しない場合は、リクエストのデータが、割り当てられたブロックに書き込み、ブロックマップを更新して物理ブロックを永続的にします。
2.4.3. VDO ボリュームにおける書き込みモードの確認
この手順では、選択した VDO ボリュームに対するアクティブな書き込みモードをリスト表示します。
手順
以下のコマンドを使用して、VDO ボリュームが使用する書き込みモードを表示します。
# vdo status --name=my-vdo
出力されるファイルには、以下が記載されます。
-
設定した書き込みポリシー -
sync
、async
、またはauto
から選択されるオプションです。 -
書き込みポリシー - VDO が適用される特定の書き込みモードで、
sync
またはasync
になります。
-
設定した書き込みポリシー -
2.4.4. 揮発性キャッシュの確認
この手順では、ブロックデバイスに揮発性キャッシュがあるかどうかを確認します。情報を使用して、VDO 書き込みモードである sync
と async
のいずれかを選択できます。
手順
デバイスにライトバックキャッシュがあるかどうかを判断する場合は、以下のいずれか方法を使用します。
sysfs
ファイルの/sys/block/block-device/device/scsi_disk/identifier/cache_type
を読み込みます。以下に例を示します。$ cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back
$ cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' None
また、カーネルブートログでは、上記のデバイスに書き込みキャッシュがあるかどうかを調べることができます。
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, does not support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
上の例では、以下のようになります。
-
デバイス
sda
には、ライトバックキャッシュがある ことが示されています。async
モードを使用します。 -
デバイス
sdb
には、ライトバックキャッシュが ない ことが示されています。sync
モードを使用します。
cache_type
の値がNone
またはwrite through
である場合は、sync
書き込みモードを使用するように VDO を設定する必要があります。-
デバイス
2.4.5. VDO 書き込みモードの設定
この手順では、既存のボリュームの場合、またはボリュームの新規作成時に、VDO ボリュームに書き込みモードを設定します。
誤った書き込みモードを使用すると、停電、システムクラッシュ、またはディスクとの接続が予期せず失われた時に、データが失われることがあります。
前提条件
- デバイスに対してどの書き込みモードが正しいかを確認している。「揮発性キャッシュの確認」を参照してください。
手順
既存の VDO ボリュームまたは新規ボリュームの作成時に、書き込みモードを設定できます。
既存の VDO ボリュームを変更するには、以下のコマンドを使用します。
# vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-name
-
VDO ボリュームの作成時に書き込みモードを指定するには、
--writePolicy=sync|async|async-unsafe|auto
オプションをvdo create
コマンドに追加します。