Red Hat Training

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

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 は領域を回収できません。DISCARDTRIM、または UNMAP を使用しない ファイルシステムの場合は、バイナリーゼロで構成されるファイルを保存してそのファイルを削除して、空き領域を手動で回収できます。
ファイルシステムは通常、次のいずれかの方法で DISCARD 要求を発行するように設定できます。
リアルタイム破棄(オンライン破棄またはインライン破棄)
リアルタイム破棄を有効にすると、ファイルシステムが REQ _DISCARD 要求をブロックレイヤーに送信し、ユーザーがファイルおよび空き領域を削除するたびに、ブロックレイヤーに REQ_DISCARD リクエストを送信します。VDO は、これらの要求を受け取り、ブロックを共有していないと仮定して、空きプールに領域を返します。
オンライン破棄をサポートするファイルシステムの場合は、マウント時に discard オプションを設定することで有効にできます。
バッチ破棄
バッチ破棄は、ユーザーが開始した操作で、ファイルシステムが未使用のブロックのブロックレイヤー(VDO)に通知するようになります。これは、ファイルシステムを FI TRIM という 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」の値がゼロよりも大きいことを確認します。