ストレージプールとストレージボリュームについて#

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

ストレージプール#

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

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

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

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

ストレージロケーション

Directory

Btrfs

LVM

ZFS

Ceph RBD

CephFS

ホストと共有

-

-

-

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

-

-

-

ループディスク

-

-

-

リモートストレージ

-

-

-

-

ホストと共有#

ファイルシステムをホストと共有するのは 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/ に作られます。

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

リモートストレージ#

cephcephfs ドライバーはデータを完全に独立な 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 は必要なストレージボリュームを自動的に作成します。 追加のストレージボリュームを作成することもできます。

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

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

container/vm

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

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

image

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

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

custom

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

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

コンテントタイプ#

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

filesystem

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

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

block

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

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