30.4. VDO の管理
30.4.1. VDO の起動または停止
特定の VDO ボリューム、またはすべての VDO ボリューム、および関連する UDS インデックスを開始するには、ストレージ管理ユーティリティーは以下のいずれかのコマンドを呼び出す必要があります。
#
vdo start --name=my_vdo#
vdo start --all
VDO systemd ユニットは、vdo パッケージのインストール時にインストールされ、デフォルトで有効になっています。本ユニットは、システムの起動時に vdo start --all コマンドを自動的に実行して、アクティブな VDO ボリューム を すべて起動します。詳細は、「システム起動時に VDO ボリュームを自動的に起動する」 を参照してください。
特定の VDO ボリューム、またはすべての VDO ボリューム、および関連する UDS インデックスを停止するには、以下のいずれかのコマンドを使用します。
#
vdo stop --name=my_vdo#
vdo stop --all
VDO ボリュームの停止にかかる時間は、ストレージデバイスの速度と、ボリュームへの書き込みが必要なデータ量により異なります。
- ボリュームは、UDS インデックスの 1GiB ごとに、約 1 GiB のデータを常に書き込みます。
- スパースの UDS インデックスを使用すると、ボリュームはブロックマップキャッシュのサイズと、スラブごとに最大 8MiB のデータ量を書き込みます。
シャットダウンが正常に行われずに再起動した場合、VDO は再構築を実行してメタデータの整合性を検証し、必要に応じて修復します。再構築は自動で行われ、ユーザーの介入は必要ありません。再ビルドプロセスの詳細は、「シャットダウンが適切に行われない場合の VDO ボリュームの復旧」 を参照してください。
VDO は、書き込みモードによって異なる書き込みを再構築する可能性があります。
- 同期モードでは、シャットダウンの前に VDO により確認されたすべての書き込みが再構築されます。
- 非同期モードでは、最後に確認されたフラッシュ要求の前に確認されたすべての書き込みが再構築されます。
いずれのモードでも、承認されていない書き込み、またはフラッシュが続いていない書き込みのいずれかが行われた場合は、再構築されることがあります。
VDO 書き込みモードの詳細は、「VDO 書き込みモードの選択」 を参照してください。
30.4.2. VDO 書き込みモードの選択
VDO は、
sync
、async
、および auto
の 3 つの書き込みモードに対応します。
- VDO が
sync
モードの場合、上記のレイヤーは write コマンドが永続ストレージにデータを書き込むことを想定します。したがって、このモードは、ファイルシステムやアプリケーションには必要ありません。FLUSH リクエストまたは FUA (強制ユニットアクセス) リクエストを発行すると、データは、重要な点で持続します。VDO は、書き込みコマンドの完了時にデータが永続ストレージに書き込まれることを保証する場合にのみsync
mode に設定する必要があります。つまり、ストレージには揮発性の書き込みキャッシュがないか、ライトスルーキャッシュが存在する必要があります。 - VDO が
async
モードの場合、書き込みコマンドが確認されると、データが永続ストレージに書き込まれる保証はありません。ファイルシステムまたはアプリケーションは、各トランザクションの重要な点でデータの永続性を保証するために、FLUSH リクエストまたは FUA リクエストを発行する必要があります。write コマンドの完了時に、基礎となるストレージが永続ストレージにデータを書き込むことを保証しない場合は、VDO をasync
モードに設定する必要があります。つまり、ストレージに揮発性のライトバックキャッシュがある場合です。デバイスが揮発性キャッシュを使用するかどうかを確認する方法は、「揮発性キャッシュの確認」 を参照してください。警告VDO が非同期
モードで実行されている場合は、ACID (Atomicity, Consistency, Isolation, Durability)に準拠していません。VDO ボリュームの上に ACID コンプライアンスを想定するアプリケーションまたはファイルシステムがある場合、async
モードにより予期しないデータ損失が発生する可能性があります。 auto
モードは、各デバイスの特性に基づいてsync
またはasync
を自動的に選択します。以下はデフォルトのオプションになります。
書き込みポリシーの動作方法のより詳細な理論的概要については、「VDO 書き込みポリシーの概要」 を参照してください。
書き込みポリシーを設定するには、
--writePolicy
を使用します。これは、「VDO ボリュームの作成」 のように VDO ボリュームを作成する場合、または changeWritePolicy サブコマンドを使用して既存の VDO ボリュームを変更する場合に指定できます。
#
vdo changeWritePolicy --writePolicy=sync|async|auto --name=vdo_name
重要
誤った書き込みポリシーを使用すると、電源障害時にデータが失われる可能性があります。
揮発性キャッシュの確認
デバイスにライトバックキャッシュがあるかどうかを確認するには、
/sys/block/block_device/device/scsi_disk/identifier/cache_type
sysfs ファイルを読み込みます。以下に例を示します。
- デバイス
sda
には、ライトバックキャッシュ が あることを示します。$
cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back - デバイス
sdb
には、ライトバックキャッシュが ない ことを示します。$
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, doesn't support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
システムログの読み取りに関する詳細は、『システム管理者のガイド』のViewing and Managing Log Filesの章を参照してください。
この例では、VDO に次の書き込みポリシーを使用します。
sda
デバイスのasync
モードsdb
デバイスの同期
モード
注記
cache_type
の値が none
または で書き込みを 行う
場合は、sync
書き込みポリシーを使用するように VDO を設定する必要があります。
30.4.3. VDO ボリュームの削除
VDO ボリュームは、次のコマンドを実行するとシステムから削除できます。
#
vdo remove --name=my_vdo
VDO ボリュームを削除する前に、ファイルシステムのマウントを解除し、ストレージを使用しているアプリケーションを停止します。vdo remove コマンドは、VDO ボリュームとそれに関連する UDS インデックス、およびそれらが存在する論理ボリュームを削除します。
30.4.3.1. 作成に失敗したボリュームの削除
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
30.4.4. UDS インデックスの設定
VDO は、UDS と呼ばれる高パフォーマンスの重複排除インデックスを使用して、格納されているときにデータの重複ブロックを検出します。重複排除ウィンドウ は、インデックスが記憶している以前に書き込まれたブロックの数です。重複排除ウィンドウのサイズは設定可能です。特定のウィンドウサイズに対して、インデックスには特定の量の RAM と特定の量のディスク容量が必要です。ウィンドウのサイズは、通常、
--indexMem=size
オプションを使用してインデックスメモリーのサイズを指定して決定されます。使用するディスク領域は、自動的に決定されます。
一般的には、Red Hat は、すべての実稼働環境に sparse の UDS インデックスを使用することを推奨します。これは、非常に効率的なインデックスデータ構造であり、重複排除ウィンドウでブロックごとに DRAM の約 10 分の 1 バイトが必要です。ディスクの場合は、ブロックごとに約 72 バイトのディスク領域が必要です。このインデックスの最小設定は、ディスクで 256 MB の DRAM と約 25 GB の領域を使用します。この設定を使用するには、
--sparseIndex=enabled --indexMem=0.25
オプションを vdo create コマンドに指定します。この設定により、2.5 TB の重複排除ウィンドウが作成されます (つまり、2.5 TB の履歴が記録されます)。ほとんどのユースケースでは、2.5 TB の重複排除ウィンドウは、サイズが 10 TB までのストレージプールを重複排除するのに適しています。
ただし、インデックスのデフォルト設定は、dense のインデックスを使用します。このインデックスは DRAM では非常に効率が悪い (10 倍) ですが、必要なディスク領域もはるかに少ない (10 倍) ため、制約された環境での評価に便利です。
一般に、VDO ボリュームの物理サイズの 4 分の 1 である重複排除ウィンドウが推奨される設定です。ただし、これは実際の要件ではありません。小さな重複排除ウィンドウ (物理ストレージの量と比較) であっても、多くのユースケースで大量の重複データを確認できます。大概のウィンドウも使用できますが、ほとんどの場合、それを行う利点はほとんどありません。
この重要なシステムパラメーターの調整に関する追加のガイドラインについては、Red Hat テクニカルアカウントマネージャーの担当者にご相談ください。
30.4.5. シャットダウンが適切に行われない場合の VDO ボリュームの復旧
ボリュームを正常にシャットダウンせずに再起動した場合、VDO はメタデータの一部を再構築して操作を継続する必要があります。これは、ボリュームの起動時に自動的に行われます。(正常にシャットダウンしたボリュームでこのプロセスを呼び出す場合は、「再構築の強制」 も併せて参照してください。)
データの復元は、デバイスの書き込みポリシーによって異なります。
- VDO が同期ストレージで実行され、書き込みポリシーが を
同期
すると、ボリュームに書き込まれたすべてのデータが完全に復元されます。 - 書き込みポリシーが
async
の場合、一部の書き込みは、VDO にFLUSH
コマンドを送信するか、FUA
フラグでタグ付けされた書き込み I/O (ユニットアクセスの実施)を行っても、書き込みが永続化されない場合に復元されないことがあります。これは、fsync
、fdatasync
、sync
、またはumount
などのデータ整合性操作を呼び出すことで、ユーザーモードから実行されます。
30.4.5.1. オンライン復旧
ほとんどの場合、クリーンでない VDO ボリュームの再構築作業のほとんどは、VDO ボリュームがオンラインに戻ってから、読み取りおよび書き込みの要求の処理中に行うことができます。最初は、書き込み要求に使用できるスペースの量が制限されている場合があります。ボリュームのメタデータがより多く回復されると、より多くの空き領域を利用できる可能性があります。さらに、VDO の回復中に書き込まれたデータは、そのデータがまだ回復されていないボリュームの一部にある場合、クラッシュ前に書き込まれたデータに対して重複排除に失敗する可能性があります。ボリュームの回復中は、データが圧縮されている可能性があります。以前に圧縮したブロックは、読み取りまたは上書きできます。
オンラインリカバリー中は、
使用中のブロックやブロックの 空きブロック
など、いくつかの統計が利用できなくなります。この統計は、再構築が完了すると利用可能になります。
30.4.5.2. 再構築の強制
VDO は、ほとんどのハードウェアエラーおよびソフトウェアエラーから回復できます。VDO ボリュームを正常に回復できない場合は、ボリュームの再起動後も持続する読み取り専用モードになります。ボリュームが読み取り専用モードの場合、データが損失または破損していないという保証はありません。このような場合、Red Hat は、読み取り専用のボリュームからデータをコピーして、バックアップからボリュームを復旧することを推奨します。( vdostats の
operating mode
属性は、VDO ボリュームが読み取り専用モードかどうかを示します。)
データ破損のリスクを許容できる場合は、VDO ボリュームのメタデータのオフライン再構築を強制することで、ボリュームをオンラインに戻して利用できるようにできます。なお、再構築したデータの整合性は保証できません。
読み取り専用 VDO ボリュームの再構築を強制するには、ボリュームが実行されている場合は、最初にボリュームを停止します。
#
vdo stop --name=my_vdo
次に、
--forceRebuild
オプションを使用してボリュームを再起動します。
#
vdo start --name=my_vdo --forceRebuild
30.4.6. システム起動時に VDO ボリュームを自動的に起動する
システムの起動時に、
vdo
systemd ユニットは、アクティブ化 された として設定されているすべての VDO デバイスを自動的に起動します。
特定のボリュームが自動的に起動しないようにするには、以下のいずれかのコマンドを実行してそのボリュームを非アクティブ化します。
- 特定のボリュームを無効にするには、以下のコマンドを実行します。
#
vdo deactivate --name=my_vdo - すべてのボリュームを無効にするには、以下のコマンドを実行します。
#
vdo deactivate --all
ボリュームをアクティブにするには、以下のいずれかのコマンドを実行します。
- 特定のボリュームを有効にするには、以下のコマンドを実行します。
#
vdo activate --name=my_vdo - すべてのボリュームを有効にするには、以下のコマンドを実行します。
#
vdo activate --all
vdo create コマンドに
--activate=disabled
オプションを追加して、自動的に起動しない VDO ボリュームを作成することもできます。
VDO ボリュームの上や下に LVM ボリュームを置くシステム (図30.5「重複排除された統合ストレージ」 など) では、サービスを適切な順序で起動することが重要です。
- LVM の下位層を最初に起動する必要があります (ほとんどのシステムでは、LVM2 パッケージのインストール時に、この層の起動が自動的に設定されます)。
- その後、
vdo
systemd ユニットを起動する必要があります。 - 最後に、現在実行している VDO ボリュームに、LVM ボリュームやその他のサービスを起動するために、追加のスクリプトを実行する必要があります。
30.4.7. 重複排除の無効化と再有効化
一部の例では、ボリュームへの読み書きを行う機能を維持しながら、VDO ボリュームに書き込まれているデータの重複排除を一時的に無効にすることが望ましい場合があります。重複排除を無効にすると、後続の書き込みが重複排除されなくなりますが、すでに重複排除されているデータはそのまま残ります。
- VDO ボリュームでの重複排除を停止するには、以下のコマンドを使用します。
#
vdo disableDeduplication --name=my_vdoこれにより、関連付けられている UDS インデックスが停止し、重複排除がアクティブでないことを VDO ボリュームに通知します。 - VDO ボリュームでの重複排除を再起動するには、以下のコマンドを使用します。
#
vdo enableDeduplication --name=my_vdoこれにより、関連する UDS インデックスが再起動し、重複排除が再度アクティブであることを VDO ボリュームに通知します。
--deduplication=disabled
オプションを vdo create コマンドに追加することで、新しい VDO ボリュームを作成するときに重複排除を無効にすることもできます。
30.4.8. 圧縮の使用
30.4.8.1. 導入部分
ブロックレベルの重複排除のほかに、VDO では、HIOPS Compression™ テクノロジーを使用したインラインブロックレベルの圧縮も提供されます。重複排除は、仮想マシン環境とバックアップアプリケーションに最適なソリューションですが、圧縮は、通常、ログファイルやデータベースなどのブロックレベルの冗長性を見せない構造化および非構造化のファイル形式に非常に適しています。
圧縮は、重複として認識されていないブロックで動作します。一意のデータが初めて検出されると、それが圧縮されます。その後の、保存しているデータのコピーは、追加の圧縮手順なしに重複排除されます。圧縮機能は、同時に多くの圧縮操作に対応できるようにする並列化されたパッケージアルゴリズムに基づいています。最初にブロックを保存し、リクエストに応答したら、圧縮時に複数のブロックを検出する最適なパックアルゴリズムが、1 つの物理ブロックに適合します。特定の物理ブロックが追加の圧縮ブロックを保持していないと判断すると、そのブロックはストレージに書き込まれます。圧縮されていないブロックは解放され、再利用されます。要求したものに応答し、圧縮およびパッケージ化の操作を実行することにより、圧縮を使用することで課せられるレイテンシーが最小限に抑えられます。
30.4.8.2. 圧縮の有効化と無効化
VDO ボリューム圧縮はデフォルトでオンになっています。
ボリュームの作成時に、
--compression=disabled
オプションを vdo create コマンドに追加することで圧縮を無効にできます。
パフォーマンスを最大化するため、または圧縮される可能性が低いデータの処理を高速化するために、必要に応じて既存の VDO ボリュームで圧縮を停止できます。
- VDO ボリュームで圧縮を停止するには、次のコマンドを使用します。
#
vdo disableCompression --name=my_vdo - 再び起動するには、以下のコマンドを使用します。
#
vdo enableCompression --name=my_vdo
30.4.9. 空き領域の管理
VDO はシンプロビジョニングのブロックストレージターゲットであるため、VDO が使用する物理領域は、ストレージのユーザーに提示されるボリュームのサイズと異なる場合があります。インテグレーターとシステム管理者は、この格差を利用してストレージコストを節約できますが、書き込まれたデータが期待される重複排除率を達成しない場合は、ストレージスペースが予期せず不足しないように注意する必要があります。
論理ブロック (仮想ストレージ) の数が物理ブロック (実際のストレージ) の数を超えると、ファイルシステムおよびアプリケーションで領域が予想外に不足する可能性があります。このため、VDO を使用するストレージシステムは、ストレージ管理者に、VDO の空きプールのサイズを監視する方法で提供する必要があります。この空きプールのサイズは、
vdostats
ユーティリティーを使用して決定できます。詳細は、「vdostats」 を参照してください。このユーティリティーのデフォルト出力には、Linux df
ユーティリティーと同様の形式で、実行中のすべての VDO ボリュームの情報が一覧表示されます。以下に例を示します。
Device 1K-blocks Used Available Use% /dev/mapper/my_vdo 211812352 105906176 105906176 50%
VDO ボリュームの物理ストレージ領域が不足しそうになると、VDO は、システムログに、以下のような警告を出力します。
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool my_vdo. Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool my_vdo is now 80.69% full. Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool my_vdo is now 85.25% full. Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool my_vdo is now 90.64% full. Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool my_vdo is now 96.07% full.
VDO の空きプールのサイズが特定のレベルを下回った場合、ストレージ管理者はデータの削除 (削除されたデータが重複しない限り領域を確保)、物理ストレージの追加、または LUN の削除を行うことで対応できます。
重要
VDO ボリュームで物理領域を監視し、領域不足を回避します。物理ブロックが不足すると、VDO ボリュームに最近書き込まれたデータや、未承認のデータが失われることがあります。
ファイルシステムの領域の回収
ファイルシステムが、
DISCARD
、TRIM
、または UNMAP
コマンドを使用してブロックが解放されていることを伝えない限り、VDO は領域を回収できません。DISCARD
、TRIM
、または UNMAP
を使用しないファイルシステムの場合、バイナリーゼロで設定されるファイルを保存し、そのファイルを削除することで、空き領域を手動で再利用できます。
ファイルシステムは、通常、次の 2 つの方法のいずれかで
DISCARD
要求を発行するように設定できます。
- リアルタイム廃棄 (オンライン廃棄またはインライン廃棄)
- リアルタイム破棄を有効にすると、ユーザーがファイルを削除して領域を解放するたびに、ファイルシステムはブロック層に
REQ_DISCARD
要求を送信します。VDO はこの要求を受け取り、ブロックが共有されていないことを前提として、空きプールに領域を戻します。オンライン破棄に対応するファイルシステムの場合、マウント時にdiscard
オプションを設定することで有効にできます。 - バッチ破棄
- バッチ破棄は、ユーザーが開始する操作であり、ファイルシステムが未使用のブロックをブロックレイヤー (VDO) に通知します。これは、ファイルシステムに
FITRIM
と呼ばれるioctl
要求を送信することで実現されます。fstrim
ユーティリティー(cron
など)を使用して、このioctl
をファイルシステムに送信できます。
discard
機能の詳細は、「未使用ブロックの破棄」 を参照してください。
ファイルシステムがない場合の領域の確保
ストレージがファイルシステムなしでブロックストレージのターゲットとして使用されている場合は、空き領域を管理することもできます。たとえば、単一の VDO ボリュームは、その上に論理ボリュームマネージャー (LVM) をインストールすることにより、複数のサブボリュームに分割できます。ボリュームのプロビジョニングを解除する前に、blkdiscard コマンドを使用して、その論理ボリュームで以前に使用された領域を解放できます。LVM は
REQ_DISCARD
コマンドに対応し、領域を解放するために適切な論理ブロックアドレスで VDO に要求を転送します。他のボリュームマネージャーを使用している場合は、REQ_DISCARD
もサポートする必要があります。もしくは、SCSI デバイスの場合は UNMAP
、または ATA デバイスの場合は TRIM
をサポートする必要もあります。
ファイバーチャネルまたはイーサネットネットワーク上の領域の確保
VDO ボリューム (またはボリュームの一部) は、LIO または SCST などの SCSI ターゲットフレームワークを使用して、ファイバーチャネルストレージファブリックまたはイーサネットネットワークのホストにプロビジョニングすることもできます。SCSI イニシエーターは
UNMAP
コマンドを使用して、シンプロビジョニングされたストレージターゲット上の領域を解放できますが、SCSI ターゲットフレームワークは、このコマンドのサポートをアドバタイズするように設定する必要があります。通常、これはこのボリュームで シンプロビジョニング を有効にすることで行われます。UNMAP
への対応は、Linux ベースの SCSI イニシエーターで確認できます。
#
sg_vpd --page=0xb0 /dev/device
出力で、"Maximum unmap LBA count" の値がゼロより大きいことを確認します。
30.4.10. 論理ボリュームのサイズの拡大
管理アプリケーションは、vdo growLogical サブコマンドを使用して、VDO ボリュームの論理サイズを増やすことができます。ボリュームが大きくなったら、管理者は VDO ボリュームの上にあるすべてのデバイスまたはファイルシステムに新しいサイズを通知する必要があります。ボリュームは次のように増やすことができます。
#
vdo growLogical --name=my_vdo --vdoLogicalSize=new_logical_size
このコマンドを使用すると、ストレージ管理者は最初に、領域が不足しないように、論理サイズが十分に小さい VDO ボリュームを作成できます。しばらくすると、実際のデータ削減率を評価でき、これが十分な場合には、VDO ボリュームの論理サイズを拡張して、削減して得られた領域を活用することができます。
30.4.11. 物理ボリュームのサイズの拡大
VDO ボリュームで利用可能な物理ストレージの量を増やすには、以下のコマンドを実行します。
- 基になるデバイスのサイズを大きくします。正確な手順は、デバイスの種類によって異なります。たとえば、MBR パーティションのサイズを変更するには、「fdisk でのパーティションのサイズ変更」 の説明に従って
fdisk
ユーティリティーを使用します。 growPhysical
を使用して、新しい物理ストレージ領域を VDO ボリュームに追加します。#
vdo growPhysical --name=my_vdo
このコマンドでは、VDO ボリュームを縮小できません。
30.4.12. Ansible を使用した VDO の自動化
Ansible ツールを使用することで、VDO デプロイメントと管理を自動化できます。詳細は、以下を参照してください。
- Ansible ドキュメント: https://docs.ansible.com/
- VDO Ansible モジュールのドキュメント https://docs.ansible.com/ansible/latest/modules/vdo_module.html