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

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

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

ストレージプール#

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

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

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

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

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

ストレージロケーション

Directory

Btrfs

LVM

ZFS

Ceph (全て)

ホストと共有

-

-

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

-

-

ループディスク

-

-

リモートストレージ

-

-

-

-

ホストと共有#

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

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

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

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

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

ループディスク#

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

ループファイルは snap を使用している場合は /var/snap/lxd/common/lxd/disks/、それ以外の場合は /var/lib/lxd/disks/ に作られます。

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

リモートストレージ#

ceph, cephfs, cephobject ドライバはデータを完全に独立な Ceph ストレージクラスターに保管します。これは別途セットアップが必要です。

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

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

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

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

  • 直接インスタンスに指定: lxc launch <image> <instance_name> --storage <storage_pool>

  • プロファイル経由: lxc profile device add <profile_name> root disk path=/ pool=<storage_pool> and lxc launch <image> <instance_name> --profile <profile_name>

  • デフォルトプロファイル経由

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

  root:
    type: disk
    path: /
    pool: default

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

ストレージボリューム#

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

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

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

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

container/vm

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

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

image

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

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

custom

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

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

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

コンテントタイプ#

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

filesystem

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

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

block

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

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

ストレージバケット#

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

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

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

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

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

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