LVM - lvm
#
LVM はファイルシステムというよりストレージマネージメントフレームワークです。 これは物理ストレージデバイスを管理するのに使用され、複数のストレージボリュームを作成し、配下の物理ストレージデバイスを使用し仮想化できるようにします。
この過程で物理ストレージをオーバーコミットすることが可能で、全ての利用可能なストレージが同時に使用されるわけではないシナリオに対して柔軟性を提供できることに注意してください。
LVM を使用するにはマシン上に lvm2
がインストールされていることを確認してください。
用語#
LVM は複数の物理ストレージデバイスを組み合わせて ボリュームグループ にすることができます。 その後このボリュームグループから異なるタイプの 論理ボリューム を割り当てることができます。
サポートされるボリュームタイプの 1 つに thin pool があります。これは許可された最大サイズの合計は利用可能な物理ストレージより大きいような薄くプロビジョンされたボリュームを作成することでリソースをオーバーコミットすることを可能にします。 別のタイプは ボリュームスナップショット でこれは論理ボリュームの特定の状態をキャプチャーします。
LXD の lvm
ドライバ#
LXD の lvm
ドライバはイメージに論理ボリュームを、インスタンスとスナップショットにボリュームスナップショットを使用します。
LXD はボリュームグループを完全制御できると想定しています。
このため、 LXD が所有しないファイルシステムエンティティは LXD が消してしまうかもしれないので、LVM ボリュームグループ内に置くべきではありません。
しかし、既存のボリュームグループを再利用する必要がある場合 (例えば、あなたの環境ではボリュームグループが 1 つしかない場合)、lvm.vg.force_reuse
を設定することでこれは可能です。
デフォルトでは LVM ストレージプールは LVM thin pool を使用しその中に全ての LXD ストレージエンティティ (イメージ、インスタンス、カスタムボリューム) の論理ボリュームを作成します。
この挙動はプール作成時に lvm.use_thinpool
を false
に設定することで変更できます。
この場合、LXD はスナップショットでない全てのストレージエンティティに "通常の" 論理ボリュームを使用します。
これは深刻なパフォーマンスの低下とディスクの空き容量の低下を lvm
ドライバに必然的にもたらすことに注意してください (スピードとストレージ使用量の両面で dir
ドライバに近くなります)。
この理由は thin pool でない論理ボリュームがスナップショットのスナップショットをサポートしないため、ほとんどのストレージ操作が rsync
の使用にフォールバックするためです。
さらに、 thin でないスナップショットは作成時に最大のサイズのストレージを予約しなければならないため、 thin スナップショットよりもはるかに大容量のストレージを使用するからです。
このため、このオプションはどうしても必要なユースケースの場合にのみ選択すべきです。
インスタンスの入れ替わりが激しい環境 (例えば、継続的インテグレーション) では、LXD の操作が遅くなるのを回避するため /etc/lvm/lvm.conf
内のバックアップの retain_min
と retain_days
設定を調整すべきです。
設定オプション#
lvm
ドライバを使うストレージプールとこれらのプール内のストレージボリュームには以下の設定オプションが利用できます。
ストレージプール設定#
キー |
型 |
デフォルト値 |
説明 |
---|---|---|---|
|
string |
|
ボリュームが作成される thin pool |
|
string |
|
thin pool メタデータボリュームのサイズ (デフォルトは LVM が適切なサイズを計算) |
|
bool |
|
ストレージプールは論理ボリュームに thin pool を使うかどうか |
|
bool |
|
既存の空でないボリュームグループの使用を強制 |
|
string |
プールの名前 |
作成するボリュームグループ名 |
|
string |
|
ストレージエンティティーの転送に |
|
bool |
|
ストレージプールをマイグレートする際に圧縮を使用するかどうか |
|
string |
自動 (空きディスクスペースの 20%, >= 5 GiB and <= 30 GiB) |
ループベースのプールを作成する際のストレージプールのサイズ (バイト単位、接尾辞のサポートあり) |
|
string |
- |
既存のブロックデバイスかループファイルかLVMボリュームグループのパス |
Tip
これらの設定に加えて、ストレージボリューム設定のデフォルト値を設定できます。 ストレージボリュームのデフォルト値を変更する を参照してください。
ストレージボリューム設定#
キー |
型 |
条件 |
デフォルト値 |
説明 |
---|---|---|---|---|
|
string |
ブロックベースドライバ |
|
ストレージボリュームのファイルシステム: |
|
string |
ブロックベースドライバ |
|
ブロックデバイスのマウントオプション |
|
string |
LVMドライバ |
|
新しいボリューム (あるいは thin pool ボリューム) に使用するストライプ数 |
|
string |
LVMドライバ |
|
使用するストライプのサイズ (最低 4096 バイトで 512 バイトの倍数を指定) |
|
bool |
カスタムボリューム |
|
ID シフトオーバーレイを有効にする (複数の分離されたインスタンスによるアタッチを許可する) |
|
bool |
カスタムボリューム |
|
ボリュームへの ID マッピングを無効にする |
|
string |
適切なドライバ |
|
ストレージボリュームのサイズ/クォータ |
|
string |
カスタムボリューム |
|
スナップショットをいつ削除するかを制御 ( |
|
string |
カスタムボリューム |
|
スナップショットの名前を表す Pongo2 テンプレート文字列 (スケジュールされたスナップショットと名前無しのスナップショットで使用) 1 |
|
string |
カスタムボリューム |
|
Cron 表記 ( |
ストレージバケット設定#
ローカルのストレージプールドライバでストレージバケットを有効にし、 S3 プロトコル経由でアプリケーションがバケットにアクセスできるようにするにはcore.storage_buckets_address
サーバ設定を調整する必要があります。
キー |
型 |
条件 |
デフォルト値 |
説明 |
---|---|---|---|---|
|
string |
適切なドライバ |
|
ストレージバケットのサイズ/クォータ |
- 1
snapshots.pattern
オプションはスナップショット名をフォーマットする Pongo2 テンプレート文字列です。スナップショット名にタイムスタンプを追加するには、Pongo2 コンテキスト変数
creation_date
を使用します。 スナップショット名に使用できない文字を含まないようにテンプレート文字列をフォーマットするようにしてください。 例えば、snapshots.pattern
を{{ creation_date|date:'2006-01-02_15-04-05' }}
に設定し、作成日時を秒の制度まで落として、スナップショットを命名するようにします。名前の衝突を防ぐ別の方法はパターン内に
%d
プレースホルダを使うことです。 最初のスナップショットでは、プレースホルダは0
に置換されます。 後続のスナップショットでは、既存のスナップショットが考慮され、プレースホルダの位置の最大の数を見つけます。 この数が 1 増加されて新しい名前に使用されます。