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