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 に相当します。
以下のすべての手順で、myvg と myvdo を、それぞれボリュームグループ名および VDO 名に置き換えます。
前提条件
- VDO ソフトウェアをインストールしている。詳細は、VDO のインストール を参照してください。
- 空きストレージ容量を持つ LVM ボリュームグループがシステムに存在する。
-
lvcreate --type vdo --name myvdo myvg -L logical-size-of-pool --virtualsize virtual-size-of-vdo
コマンドを使用した、シンプロビジョニングされた VDO ボリューム。詳細は、LVM-VDO ボリュームの作成 を参照してください。
手順
シンプロビジョニングの 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 まで下げると、同じ領域節約率の場合、空き物理領域に安全なマージンを確保できる論理サイズになります。
-
約 80 GB のデータセットでは、約
VDO ボリュームの空き物理領域を監視します。
# vdostats myvg-vpool0-vpool
このコマンドを定期的に実行すると、VDO ボリュームの使用済み物理領域と空き物理領域を監視できます。
オプション: 利用可能な
/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
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.
利用可能な物理領域がほとんどない VDO ボリュームを修復します。VDO ボリュームに物理領域を追加できても、ボリュームを拡張する前に領域がいっぱいになった場合は、そのボリュームへの I/O を一時的に停止する必要があるかもしれません。
ボリュームへの I/O を一時的に停止するには、以下の手順を実行します。VDO ボリューム myvdo には、/users/homeDir パスにマウントされたファイルシステムが含まれています。
ファイルシステムをフリーズします。
# xfs_freeze -f /users/homeDir # vgextend myvg /dev/vdc2 # lvextend -l new_size myvg/vpool0-name # xfs_freeze -u /users/homeDir
ファイルシステムをアンマウントします。
# umount /users/homeDir # vgextend myvg /dev/vdc2 # lvextend -l new_size myvg/vpool0-name # mount -o discard /dev/myvg/myvdo /users/homeDir
注記キャッシュされたデータを含むファイルシステムをアンマウントまたはフリーズすると、キャッシュされたデータの書き込みが発生します。これにより、VDO ボリュームの物理領域がいっぱいになる可能性があります。VDO ボリュームの空き物理領域の監視しきい値を設定する場合は、ファイルシステムのデータキャッシュの最大量を考慮してください。
ファイルシステムが使用しなくなったブロックは、
fstrim
ユーティリティーを使用してクリーンアップできます。VDO ボリュームにマウントしたファイルシステムに対してfstrim
を実行すると、そのボリュームの空き物理領域が増える可能性があります。fstrim
ユーティリティーは、VDO ボリュームに破棄を送信します。これは、以前使用したブロックへの参照を削除するのに使用されます。これらのブロックのいずれかが単一参照されている場合は、物理領域が使用可能になります。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%
未使用のブロックを破棄します。
# fstrim /users/homeDir
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 が破棄によって回収されました。注記重複排除と圧縮のレベルが低いボリュームを破棄すると、重複排除と圧縮のレベルが高いボリュームを破棄するよりも、物理領域を回収できます。重複排除と圧縮のレベルが高いボリュームでは、単に未使用のブロックを破棄する場合よりも、物理領域を確保するためにより詳細なクリーンアップが必要になる可能性があります。