ストレージプール、ボリューム、バケットについて

Incus はデータを(イメージやインスタンスのように)コンテントタイプに応じて別のストレージボリュームに分けてストレージプールに保管します。 ストレージプールはデータを保管するためのディスクであり、ストレージボリュームは特定の目的に使用されるディスク上の別々のパーティションであると考えることも出来るでしょう。

ストレージボリュームに加えて、ストレージバケットというものもあります。これは Amazon S3 プロトコルを使用します。 ストレージボリュームと同様に、ストレージバケットはストレージプールの一部です。

ストレージプール

初期化時に、 Incus は最初のストレージプールを作成するためのプロンプトを表示します。 必要であれば、後からストレージプールを追加できます(ストレージプールを作成する 参照)。

それぞれのストレージプールはストレージドライバーを使用します。 次のストレージドライバーが利用できます。

さらなる情報については以下の how-to ガイドを参照してください:

データストレージのロケーション

Incus のデータをどこに保管するかは設定と選択したストレージドライバーによって異なります。 使用されるストレージドライバーによって、 Incus はファイルシステムをホストと共有することもできますし、データを別にしておくこともできます。

ストレージロケーション

Directory

Btrfs

LVM (すべて)

ZFS

Ceph (すべて)

ホストと共有

-

-

専用のディスク/パーティション

-

-

ループディスク

-

-

リモートストレージ

-

-

-

ホストと共有

ファイルシステムをホストと共有するのは Incus を実行する上で通常もっとも空間効率が良い方法です。 ほとんどの場合、もっとも管理が楽な方法でもあります。

この選択肢は dir ドライバー、 btrfs ドライバー(ホストが Btrfs で Incus に専用のサブボリュームを使用する場合)、 zfs ドライバー(ホストが ZFS で zpool 上で Incus に専用のデータセットを使用する場合)でサポートされます。

専用のディスクかパーティションか

メインのディスク上で Incus に空のパーティションを使用するか、ホストから完全に独立したストレージを保管する完全な専用のディスクを使用します。

この選択肢は btrfs ドライバー、 lvm ドライバー、 zfs ドライバーでサポートされます。

ループディスク

Incus ではメインドライブ上にループファイルを作成して選択したストレージドライバーでそれを使用できます。 この方法はディスクやパーティションを使用する方法と機能的には似ていますが、大きな 1 つのファイルをメインドライブとして使用する点が異なります。 これはそれぞれの書き込みがストレージドライバーとメインドライブのファイルシステムを通過することを意味し、パフォーマンスは低くなります。

ループファイルは /var/lib/incus/disks/ に作られます。

ループファイルは通常縮小できません。 最大で指定した限界まで拡大しますが、インスタンスやイメージを削除してもファイルが縮小することはありません。 しかしサイズを増やすことはできます。 ストレージプールをリサイズする を参照してください。

リモートストレージ

cephcephfscephobject ドライバーはデータを完全に独立な Ceph ストレージクラスタに保管します。これは別途セットアップが必要です。 lvmcluster ドライバーは共有のブロックデバイスが全てのクラスターメンバーに共有されていてlvmlockdを事前にセットアップしておく必要があります。

デフォルトストレージプール

Incus にはデフォルトストレージプールという概念はありません。

ストレージボリュームを作成する時は、使用するストレージプールを指定する必要があります。

インスタンスの作成時に Incus が自動的にストレージボリュームを作成する際は、インスタンスに設定されたストレージプールを使用します。 この設定は以下のいずれかの方法でできます。

プロファイルでは使用するストレージプールはルートディスクデバイスのプールで定義されます:

  root:
    type: disk
    path: /
    pool: default

デフォルトプロファイルではこのプールは (訳注: Incus の) 初期化時に作られたストレージプールに設定されています。

ストレージボリューム

インスタンスを作成する際、 Incus は必要なストレージボリュームを自動的に作成します。 追加のストレージボリュームを作成することもできます。

さらなる情報については以下の how-to ガイドを参照してください:

ストレージボリュームタイプ

ストレージボリュームは以下の種別があります:

container/virtual-machine

Incus はインスタンスを起動する際にこのどちらかのストレージボリュームを自動的に作成します。 それはインスタンスのルートディスクとして使用され、インスタンスが削除される際に破棄されます。

このストレージボリュームはインスタンス起動時に使用されたプロファイル(あるいはプロファイルが指定されない場合はデフォルトプロファイル)に指定されたストレージプール内に作成されます。 起動のコマンドに --storage フラグを渡してストレージプールを明示的に指定することもできます。

image

Incus はイメージから 1 つあるいは複数のインスタンスを起動するためにイメージを解凍する際にこれらのストレージボリュームを自動的に作成します。 インスタンスが作成された後は削除できます。 手動で削除しない場合、インスタンス起動の 10 日後に自動的に削除されます。

イメージのストレージボリュームはインスタンスのストレージボリュームと同じストレージプール内に作成されます。それは最適化されたイメージのストレージをサポートする ストレージドライバー を使用するストレージプールだけです。

custom

インスタンスから分離して保管したいデータを保持する 1 つあるいは複数のカスタムストレージボリュームを追加できます。 カスタムストレージボリュームはインスタンス間で共有でき、インスタンスが削除されても残ります。

バックアップやイメージを保管するためにカスタムストレージボリュームを使用することもできます。

カスタムボリュームの作成時は使用するストレージプールを指定する必要があります。

コンテントタイプ

それぞれのストレージボリュームは以下のコンテントタイプのどれかを使用します:

filesystem

このコンテントタイプはコンテナとコンテナイメージに使用されます。 これはカスタムストレージボリュームのデフォルトのコンテントタイプです。

コンテントタイプが filesystem のカスタムストレージボリュームはコンテナと仮想マシンの両方にアタッチでき、インスタンス間で共有できます。

block

このコンテントタイプは仮想マシンと仮想マシンイメージで使用されます。 コンテントタイプ block のカスタムストレージボリュームは --type=block フラグを使って作成できます。

コンテントタイプが block のカスタムストレージボリュームは仮想マシンのみにアタッチできます。 これらはインスタンス間では共有すべきではありません。同時アクセスはデータ破壊を引き起こすからです。

iso

このコンテントタイプはカスタム ISO ボリュームで使用されます。 コンテントタイプ iso のカスタムストレージボリュームは incus import コマンドを使って ISO ファイルをインポートすることでのみ作成できます。

コンテントタイプ iso のカスタムストレージボリュームは仮想マシンにのみアタッチできます。 これらは読み取り専用なので同時に複数の仮想マシンにアタッチできます。

ストレージバケット

ストレージバケットは S3 プロトコルを使用してオブジェクトストレージの機能を提供します。

これはカスタムストレージボリュームと同様の方法で使用されます。 しかし、ストレージボリュームとは異なり、ストレージバケットはインスタンスに紐付けされません。 代わりに、アプリケーションはストレージバケットにその URL を使って直接アクセスできます。

それぞれのストレージバケットには 1 つまたは複数のアクセスキーが割り当てられ、アプリケーションはアクセスの際にこれを使う必要があります。

ストレージバケットはローカルのストレージ(dir, btrfs, lvm あるいは zfs プールの場合)あるいはリモートストレージ(cephobject プールの場合)上に配置できます。

ローカルストレージドライバーでストレージバケットを有効にし、 S3 プロトコル経由でアプリケーションがバケットにアクセスできるようにするには、core.storage_buckets_address サーバー設定を調整する必要があります。

さらなる情報については以下の how-to ガイドを参照してください: