SCSI UNMAPのサポート

Oracle Cloud Infrastructure Block Volumeでは、SCSI UNMAPコマンドをブート・ボリュームとブロック・ボリュームの両方に送信して未使用の領域を再利用するようにアプリケーションを構成できます。これにより、バックアップ・サイズが大幅に削減され、バックアップのリストアおよびボリュームのクローン作成時間が短縮されます。SCSI UNMAPコマンドは、未使用領域を再利用するためにSSDドライブに送信できるTRIMコマンドに似ています。

SCSI UNMAPコマンドを送信して、アプリケーションまたはファイル・システムによって削除または使用されなくなったブロックを破棄して解放するようにストレージ・サブシステムに指示します。このコマンドを送信しない場合、ストレージ・サブシステムはブロックが使用されなくなったことを認識せず、すべてのバックアップにこれらのブロックを含め、新しいボリュームへのクローンを作成します。ストレージ・サブシステムがブロックのUNMAPコマンドを受信すると、対応するブロックは破棄されて解放されるため、今後のバックアップおよびクローンから除外されます。

ブロック・ボリュームのUNMAP機能は、SCSI UNMAPコマンドを使用して実装されます。UNMAPは、ISCSIおよび準仮想化ボリューム・アタッチメント・タイプの両方でサポートされています。

UNMAPは非決定的なコマンドであり、このコマンドを使用するときに、要求されたすべてのブロックがただちに破棄されるという保証はありません。デバイス上のブロックの破棄にかかる時間は、次の要因によって異なります。

  • ファイル・システム上の未使用ブロック数。未使用のブロックが多いデバイスのUNMAPは、完了するまでに時間がかかります。

  • ブロック・ボリューム用に構成されたパフォーマンス・レベル(VPU/GB設定)。

  • ファイル・システムの場合は、ゲスト・ファイル・システムの実装によって異なり、ファイル・システムからファイル・システムによって異なります。

2023年6月14日より前にアタッチされたボリュームのUNMAPの有効化

すべての新規アタッチメントについて、UNMAPはブート・ボリュームとブロック・ボリュームの両方に対してデフォルトで有効になっています。2023年6月14日より前にアタッチされたボリュームの場合、次のコマンドを使用してUNMAPがすでに有効かどうかを確認し、有効でない場合は推奨アクションを実行して有効にします。

UNMAPがすでに有効になっているかどうかの確認

Linux

lsblk -Dコマンドを使用して、ボリュームに対してUNMAPが有効になっているかどうかを確認します。UNMAPが有効な場合、出力のDISC-GRAN列およびDISC-MAX列の値は0以外になります。出力のDISC-GRAN列およびDISC-MAX列の値がゼロの場合、UNMAP機能は有効になりません。UNMAPを有効にする方法については、 を参照してください。

次のスクリーンショットは、UNMAPが有効になっているボリュームに対するlsblk -Dコマンドの出力例を示しています。

TRIMが有効になっていることを確認するlsblk出力

Windows

SCSI UNMAPはデフォルトで有効になっています。

UNMAPの有効化

ボリュームのUNMAP機能を有効にするには、ボリュームのアタッチメント・タイプに応じて次のいずれかのアクションを実行します。これらのアクションは、すべてのオペレーティングシステムに適用されます。

  • iSCSIアタッチメント: iSCSIコマンドを使用してログアウトし、再度ログインします。

  • 準仮想化アタッチメント: インスタンスをデタッチしてからボリュームに再アタッチします。

ファイル・システムでのUNMAPの使用

ファイル・システムによって削除済または未使用のブロックを破棄するようにUNMAPコマンドを発行するようにファイル・システムを構成できます。これにより、ボリューム・バックアップのサイズが削減されます。

Linux

UNMAPを手動で発行するコマンド

fstrimコマンドを実行して、UNMAPコマンドをバックエンドに発行し、ファイル・システムによって削除または未使用のブロックを破棄して解放します。

UNMAPを定期的に発行するコマンド

systemctl timerを有効にして、ファイルシステムのUNMAPコマンドfstrimを定期的に実行できます。タイマーは、週に1回、すべてのマウント・ポイントに対してfstrimコマンドを自動的に実行します。

タイマーを有効にするには:

sudo systemctl enable fstrim.timer

タイマーのステータスを確認するには:

sudo systemctl status fstrim.timer

オンライン・ブロック破棄を有効にするコマンド

ファイル・システムのマウント・オプションを指定して、ブロックが削除された場合や使用されなくなった場合に、廃棄コマンドをただちに発行できます。これにより、ファイルが削除されるか、ファイル・サイズが削減されると、UNMAPコマンドがバックエンド・ストレージ・システムに即時に送信されます。UNMAPを有効にすることでバックエンド・デバイスにパフォーマンスへの影響がなくても、ファイル・システムでパフォーマンスの問題が発生することがわかっているため、このオプションには注意が必要です。

オンライン・ブロック破棄を指定するマウント・コマンド:

mount –o discard <device_path> <mount_point>

/etc/fstabファイルを更新して、マウント・オプションにdiscardを追加できます。次に例を示します:

UUID="94c5aade-8bb1-4d55-ad0c-388bb8aa716a" /data1 xfs defaults,noatime,discard 0 2

Windows

インスタンスのコマンド・ウィンドウから、次のコマンドを実行してUNMAPを有効にします(まだ有効になっていない場合)。

fsutil behavior set DisableDeleteNotify  0

パフォーマンスへの影響なし

UNMAPコマンドを使用した場合、ボリュームのパフォーマンスには影響しません。保証されたIOPSおよびスループットは影響を受けません。ただし、UNMAPコマンドの処理にかかる時間は、ボリュームに対して構成されたパフォーマンス・レベルによって異なります。

たとえば、「より低いコスト」パフォーマンス・レベル用に構成されたボリュームで実行する場合、fstrimは、「バランス」「より高いパフォーマンス」または「超High Performance」レベル用に構成されたボリュームと比較して、完了に時間がかかります。