3.8. Virtual Data Optimizer を使用したシンプロビジョニングの管理

VDO ボリュームの物理領域の使用率が 100% に近づいている場合、その状況に対処するために、シンプロビジョニングされた VDO ボリュームを設定し、今後の物理領域の拡張に備えることができます。たとえば、lvcreate 操作で -l 100%FREE を 使用する代わりに、'95%FREE' を使用して、必要に応じて後で回復できるように予約スペースを確保します。この手順では、以下の問題を解決する方法を説明します。

  • ボリュームの領域が不足している
  • ファイルシステムが読み取り専用モードになる
  • ボリュームにより ENOSPC が報告される
注記

VDO ボリュームの物理領域の高使用率に対処する最善の方法は、未使用のファイルを削除し、オンライン廃棄または fstrim を使用して、その未使用ファイルが使用しているブロックを破棄することです。VDO ボリュームの物理領域は、8192 スラブまでしか拡張できません。これは、デフォルトのスラブサイズが 2 GB の VDO ボリュームの場合は 16 TB、最大スラブサイズが 32 GB の VDO ボリュームの場合は 256 TB に相当します。

以下のすべての手順で、myvgmyvdo を、それぞれボリュームグループ名および VDO 名に置き換えます。

前提条件

  1. VDO ソフトウェアをインストールしている。詳細は、VDO のインストール を参照してください。
  2. 空きストレージ容量を持つ LVM ボリュームグループがシステムに存在する。
  3. lvcreate --type vdo --name myvdo myvg -L logical-size-of-pool --virtualsize virtual-size-of-vdo コマンドを使用した、シンプロビジョニングされた VDO ボリューム。詳細は、LVM-VDO ボリュームの作成 を参照してください。

手順

  1. シンプロビジョニングの VDO ボリュームに最適な論理サイズを判断します。

    # vdostats myvg-vpool0-vpool
    
    Device               1K-blocks Used     Available  Use% Space saving%
    myvg-vpool0-vpool   104856576  29664088 75192488   28%   69%

    領域の節約率を計算するには、以下の式を使用します。

    Savings ratio = 1 / (1 - Space saving%)

    この例では、次のようになります。

    • 約 80 GB のデータセットでは、約 3.22:1 の領域削減率が得られます。
    • データセットのサイズにこの比率を乗算すると、潜在的な論理サイズが得られます。同じ領域節約率でより多くのデータが VDO ボリュームに書き込まれる場合、これは 256 GB になります。
    • この数を 200 GB まで下げると、同じ領域節約率の場合、空き物理領域に安全なマージンを確保できる論理サイズになります。
  2. VDO ボリュームの空き物理領域を監視します。

    # vdostats myvg-vpool0-vpool

    このコマンドを定期的に実行すると、VDO ボリュームの使用済み物理領域と空き物理領域を監視できます。

  3. オプション: 利用可能な /usr/share/doc/vdo/examples/monitor/monitor_check_vdostats_physicalSpace.pl スクリプトを使用して、VDO ボリュームの物理領域の使用状況に関する警告を表示します。

    # /usr/share/doc/vdo/examples/monitor/monitor_check_vdostats_physicalSpace.pl myvg-vpool0-vpool
  4. VDO ボリュームを作成すると、dmeventd 監視サービスが VDO ボリュームの物理領域の使用状況を監視します。これは、VDO ボリュームの作成時または起動時にデフォルトで有効になります。

    VDO ボリュームの監視中に、journalctl コマンドを使用して、ログ内の dmeventd の出力を表示します。

    lvm[8331]: Monitoring VDO pool myvg-vpool0-vpool.
    ...
    
    lvm[8331]: WARNING: VDO pool myvg-vpool0-vpool is now 84.63% full.
    lvm[8331]: WARNING: VDO pool myvg-vpool0-vpool is now 91.01% full.
    lvm[8331]: WARNING: VDO pool myvg-vpool0-vpool is now 97.34% full.
  5. 利用可能な物理領域がほとんどない VDO ボリュームを修復します。VDO ボリュームに物理領域を追加できても、ボリュームを拡張する前に領域がいっぱいになった場合は、そのボリュームへの I/O を一時的に停止する必要があるかもしれません。

    ボリュームへの I/O を一時的に停止するには、以下の手順を実行します。VDO ボリューム myvdo には、/users/homeDir パスにマウントされたファイルシステムが含まれています。

    1. ファイルシステムをフリーズします。

      # xfs_freeze -f /users/homeDir
      
      # vgextend myvg /dev/vdc2
      
      # lvextend -l new_size myvg/vpool0-name
      
      # xfs_freeze -u /users/homeDir
    2. ファイルシステムをアンマウントします。

      # umount /users/homeDir
      
      # vgextend myvg /dev/vdc2
      
      # lvextend -l new_size myvg/vpool0-name
      
      # mount -o discard /dev/myvg/myvdo /users/homeDir
      注記

      キャッシュされたデータを含むファイルシステムをアンマウントまたはフリーズすると、キャッシュされたデータの書き込みが発生します。これにより、VDO ボリュームの物理領域がいっぱいになる可能性があります。VDO ボリュームの空き物理領域の監視しきい値を設定する場合は、ファイルシステムのデータキャッシュの最大量を考慮してください。

  6. ファイルシステムが使用しなくなったブロックは、fstrim ユーティリティーを使用してクリーンアップできます。VDO ボリュームにマウントしたファイルシステムに対して fstrim を実行すると、そのボリュームの空き物理領域が増える可能性があります。fstrim ユーティリティーは、VDO ボリュームに破棄を送信します。これは、以前使用したブロックへの参照を削除するのに使用されます。これらのブロックのいずれかが単一参照されている場合は、物理領域が使用可能になります。

    1. VDO の統計情報を確認して、現在の空き領域の量を確認します。

      # vdostats --human-readable myvg-vpool0-vpool
      
       Device             Size  Used  Available Use%  Space saving%
      myvg-vpool0-vpool  100.0G 95.0G 5.0G      95%   73%
    2. 未使用のブロックを破棄します。

      # fstrim /users/homeDir
    3. VDO ボリュームの空き物理領域を表示します。

      # vdostats --human-readable myvg-vpool0-vpool
      
      
       Device             Size    Used   Available Use%  Space saving%
      myvg-vpool0-vpool  100.0G   30.0G  70.0G     30%    43%

      この例では、ファイルシステムで fstrim を実行した後、VDO ボリュームで使用する物理領域 65 G が破棄によって回収されました。

      注記

      重複排除と圧縮のレベルが低いボリュームを破棄すると、重複排除と圧縮のレベルが高いボリュームを破棄するよりも、物理領域を回収できます。重複排除と圧縮のレベルが高いボリュームでは、単に未使用のブロックを破棄する場合よりも、物理領域を確保するためにより詳細なクリーンアップが必要になる可能性があります。