Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

30.4. VDO の管理

30.4.1. VDO の開始または停止

特定の VDO ボリューム、またはすべての VDO ボリューム、および関連の UDS インデックスを起動するには、ストレージ管理ユーティリティーは、以下のコマンドのいずれかを呼び出します。
# vdo start --name=my_vdo
# vdo start --all
vdo パッケージのインストール時に、VDO systemd ユニットがインストールされ、デフォルトで有効になっています。このユニットは、システムの起動時に 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 によって承認されたすべての書き込みが再構築されます。
  • 非同期モードでは、前回の承認したフラッシュリクエストの前に承認されたすべての書き込みが再構築されます。
どちらのモードであっても、フラッシュによって承認されていない、または承認されていない一部の書き込みも再構築されることがあります。

30.4.2. VDO 書き込みモードの選択

VDO は、次の 3 つの書き込みモード、sync、async、および auto の 3 つに対応しています。
  • VDO が sync モードの場合、その上の層は、書き込みコマンドがデータを永続ストレージに書き込むことを想定します。したがって、ファイルシステムやアプリケーションには必要ありません。FLUSH リクエストまたは Force Unit Access(FUA)リクエストを発行すると、重要な点でデータが永続化されます。
    VDO は、書き込みコマンドが完了したときに、基となるストレージが、データが永続ストレージに書き込まれることを保証する場合に限り、sync モードに設定する必要があります。つまり、ストレージには揮発性の書き込みキャッシュがないか、またはライトスルーキャッシュが存在する必要があります。
  • VDO が async モードの場合は、書き込みコマンドが承認されたときに、データが永続ストレージに書き込まれる保証はありません。ファイルシステムまたはアプリケーションは、各トランザクションの重要な点でデータの永続性を保証するために、FLUSH リクエストまたは FUA リクエストを発行する必要があります。
    書き込みコマンドが完了したときに、基となるストレージが永続ストレージに書き込まれることを保証しない場合は、VDO を async モードに設定する必要があります。これは、ストレージに揮発性書き込みキャッシュがある場合です。
    警告
    VDO が async モードで実行している場合は、Atomicity、Consistency、Isolation、Durability(ACID)に準拠しません。VDO ボリュームに関する ACID コンプライアンスを想定するアプリケーションまたはファイルシステムがある場合は、async モードにより予想外のデータ損失が生じる可能性があります。
  • auto モードは、各デバイスの性質に基づいて、sync または async を自動的に選択します。これはデフォルトのオプションです。
書き込みポリシーを設定するには、--writePolicy オプションを使用します。これは、で VDO 「VDO ボリュームの作成」 サブコマンドで既存の 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
システムログの読み取りの詳細は、『システム管理者ガイド』の https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-viewing_and_managing_log_files 「ログファイルの表示と管理』 」の章を参照してください。
この例では、VDO に以下の書き込みポリシーを使用します。
  • sda デバイスの非同期モード
  • sdb デバイスの同期モード
注記
cache_type の値が none または write through の場合は、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 ボリュームの物理サイズのクアッターである重複排除ウィンドウは、推奨される構成です。ただし、これは実際の要件ではありません。小さな重複排除ウィンドウ (物理ストレージの量と比較) であっても、多くのユースケースで大量の重複データを確認できます。より大きなウィンドウを使用することもできますが、ほとんどの場合、これを実行する利点はほとんどありません。
この重要なシステムパラメーターの調整に関する追加のガイドラインについては、Red Hat テクニカルアカウントマネージャーまでご相談ください。

30.4.5. シャットダウンが適切に行われた後の VDO ボリュームの復旧

正常にシャットダウンせずにボリュームを再起動する場合は、VDO は、操作を続行するためにメタデータの一部を再構築する必要があります。これは、ボリュームの起動時に自動的に行われます。「再配信の強制」、適切にシャットダウンしたボリュームでこのプロセスを呼び出すこともできます)。
データのリカバリーは、デバイスの書き込みポリシーによって異なります。
  • VDO が同期ストレージで稼働していて、書き込みポリシーが sync に設定されていた場合は、ボリュームに書き込まれたすべてのデータが完全に復元されます。
  • 書き込みポリシーが async であった場合、VDO に FLUSH コマンドを送信することで永続的ではない、または FUA フラグが付いた書き込み I/O への書き込み I/O が行われていない場合は、一部の書き込みが復元されないことがあります。これは、fsyncfdatasyncsync、または umount などのデータ整合性操作を呼び出して、ユーザーモードから実行できます。

30.4.5.1. オンラインリカバリー

ほとんどのケースでは、VDO ボリュームがオンラインになり、読み取り/書き込み要求を提供している間に、適切ではない VDO ボリュームを再構築する作業の多くを行うことができます。最初は、書き込み要求に使用できる領域の量が制限される場合があります。ボリュームのメタデータが回復するため、より多くの空き領域が利用可能になります。さらに、VDO が復旧している間に書き込まれたデータは、そのデータが、復旧していないボリュームに含まれる場合に、クラッシュする前に書き込まれたデータに対する重複排除に失敗することがあります。ボリュームが回復している間はデータを圧縮できます。以前の圧縮ブロックは、引き続き読み取られたり、上書きしたりすることができます。
オンラインリカバリーを行う際、多くの統計 (block in use や blocks free など)は利用できません。この統計は、再構築が完了すると利用できます。

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
--activate=disabled オプションを vdo create コマンドに指定することで、自動的に起動しない VDO ボリュームを作成 できます。
LVM ボリュームを、VDO ボリュームの上に配置するシステムと、そのボリューム 図30.5「重複排除された統合ストレージ」)では、次のコマンドを実行します。
  1. LVM の下層は最初に起動する必要があります(ほとんどの場合、このレイヤーは、LVM2 パッケージのインストール時に自動的に設定されます)。
  2. 次に、vdo systemd ユニットを起動する必要があります。
  3. 最後に、現在実行している 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 を使用しないファイルシステムの場合、バイナリーゼロで構成されるファイルを保存し、そのファイルを削除することにより、空き領域を手動で回収できます。
ファイルシステムは通常、以下のいずれかの方法で DISCARD 要求を発行するように設定できます。
リアルタイム破棄(オンライン破棄またはインライン破棄)
リアルタイム破棄を有効にすると、ユーザーがファイルを削除し、スペースを解放するたびに、ファイルシステムはブロック層に REQ_DISCARD 要求を送信します。VDO は、この要求を受け取り、ブロックが共有されていないと仮定して、空きプールに領域を返します。
オンライン破棄に対応するファイルシステムの場合、マウント時に discard オプションを設定して有効にできます。
バッチ破棄
バッチ破棄は、ファイルシステムが未使用のブロックのブロックレイヤー(VDO)に通知します。これは、FITRIM という名前の ioctl 要求を送信することで実行できます
fstrim ユーティリティー (cronなど)を使用して、この ioctl をファイルシステムに送信できます。
破棄機能の詳細は 「未使用ブロックの破棄」、を参照してください

ファイルシステムを使用しない領域の回収

ファイルシステムなしでブロックストレージターゲットとして使用される場合に、空き領域を管理することも可能です。たとえば、論理ボリュームマネージャー(LVM)をその上にインストールすることで、1 つの VDO を複数のサブボリュームに分類できます。ボリュームのプロビジョニング解除前に、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 ボリュームに利用できる物理ストレージ容量を増大するには:
  1. 基礎となるデバイスのサイズを増やします。
    正確な手順は、デバイスの種類によって異なります。たとえば、MBR パーティションのサイズを変更する場合は、で説明されているように fdisk 「fdisk を使用したパーティションのサイズ変更」
  2. 新しい物理ストレージ領域を VDO growPhysical
    # vdo growPhysical --name=my_vdo
このコマンドで VDO ボリュームを縮小することはできません。

30.4.12. Ansible を使用した VDO の自動化

Ansible ツールを使用して、VDO デプロイメントおよび管理を自動化できます。詳細は以下を参照してください。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。