(exp-storage)= # ストレージプール、ボリューム、バケットについて Incus はデータを(イメージやインスタンスのように)コンテントタイプに応じて別のストレージボリュームに分けてストレージプールに保管します。 ストレージプールはデータを保管するためのディスクであり、ストレージボリュームは特定の目的に使用されるディスク上の別々のパーティションであると考えることも出来るでしょう。 ストレージボリュームに加えて、ストレージバケットというものもあります。これは [Amazon {abbr}`S3 (Simple Storage Service)`](https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html) プロトコルを使用します。 ストレージボリュームと同様に、ストレージバケットはストレージプールの一部です。 (storage-pools)= ## ストレージプール 初期化時に、 Incus は最初のストレージプールを作成するためのプロンプトを表示します。 必要であれば、後からストレージプールを追加できます({ref}`storage-create-pool` 参照)。 それぞれのストレージプールはストレージドライバーを使用します。 次のストレージドライバーが利用できます。 - [ディレクトリ - `dir`](storage-dir) - [Btrfs - `btrfs`](storage-btrfs) - [LVM - `lvm`](storage-lvm) - [LVM クラスタ - `lvmcluster`](storage-lvmcluster) - [ZFS - `zfs`](storage-zfs) - [Ceph RBD - `ceph`](storage-ceph) - [CephFS - `cephfs`](storage-cephfs) - [Ceph Object - `cephobject`](storage-cephobject) さらなる情報については以下の how-to ガイドを参照してください: - {ref}`howto-storage-pools` - {ref}`howto-storage-create-instance` (storage-location)= ### データストレージのロケーション 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/` に作られます。 ループファイルは通常縮小できません。 最大で指定した限界まで拡大しますが、インスタンスやイメージを削除してもファイルが縮小することはありません。 しかしサイズを増やすことはできます。 {ref}`storage-resize-pool` を参照してください。 #### リモートストレージ `ceph`、`cephfs`、`cephobject` ドライバーはデータを完全に独立な Ceph ストレージクラスタに保管します。これは別途セットアップが必要です。 `lvmcluster` ドライバーは共有のブロックデバイスが全てのクラスターメンバーに共有されていて`lvmlockd`を事前にセットアップしておく必要があります。 (storage-default-pool)= ### デフォルトストレージプール Incus にはデフォルトストレージプールという概念はありません。 ストレージボリュームを作成する時は、使用するストレージプールを指定する必要があります。 インスタンスの作成時に Incus が自動的にストレージボリュームを作成する際は、インスタンスに設定されたストレージプールを使用します。 この設定は以下のいずれかの方法でできます。 - 直接インスタンスに指定: [`incus launch --storage `](incus_launch.md) - プロファイル経由: [`incus profile device add root disk path=/ pool=`](incus_profile_device_add.md) と [`incus launch --profile `](incus_launch.md) - デフォルトプロファイル経由 プロファイルでは使用するストレージプールはルートディスクデバイスのプールで定義されます: ```yaml root: type: disk path: / pool: default ``` デフォルトプロファイルではこのプールは (訳注: Incus の) 初期化時に作られたストレージプールに設定されています。 (storage-volumes)= ## ストレージボリューム インスタンスを作成する際、 Incus は必要なストレージボリュームを自動的に作成します。 追加のストレージボリュームを作成することもできます。 さらなる情報については以下の how-to ガイドを参照してください: - {ref}`howto-storage-volumes` - {ref}`howto-storage-move-volume` - {ref}`howto-storage-backup-volume` (storage-volume-types)= ### ストレージボリュームタイプ ストレージボリュームは以下の種別があります: `container`/`virtual-machine` : Incus はインスタンスを起動する際にこのどちらかのストレージボリュームを自動的に作成します。 それはインスタンスのルートディスクとして使用され、インスタンスが削除される際に破棄されます。 このストレージボリュームはインスタンス起動時に使用されたプロファイル(あるいはプロファイルが指定されない場合はデフォルトプロファイル)に指定されたストレージプール内に作成されます。 起動のコマンドに `--storage` フラグを渡してストレージプールを明示的に指定することもできます。 `image` : Incus はイメージから 1 つあるいは複数のインスタンスを起動するためにイメージを解凍する際にこれらのストレージボリュームを自動的に作成します。 インスタンスが作成された後は削除できます。 手動で削除しない場合、インスタンス起動の 10 日後に自動的に削除されます。 イメージのストレージボリュームはインスタンスのストレージボリュームと同じストレージプール内に作成されます。それは最適化されたイメージのストレージをサポートする {ref}`ストレージドライバー ` を使用するストレージプールだけです。 `custom` : インスタンスから分離して保管したいデータを保持する 1 つあるいは複数のカスタムストレージボリュームを追加できます。 カスタムストレージボリュームはインスタンス間で共有でき、インスタンスが削除されても残ります。 バックアップやイメージを保管するためにカスタムストレージボリュームを使用することもできます。 カスタムボリュームの作成時は使用するストレージプールを指定する必要があります。 (storage-content-types)= ### コンテントタイプ それぞれのストレージボリュームは以下のコンテントタイプのどれかを使用します: `filesystem` : このコンテントタイプはコンテナとコンテナイメージに使用されます。 これはカスタムストレージボリュームのデフォルトのコンテントタイプです。 コンテントタイプが `filesystem` のカスタムストレージボリュームはコンテナと仮想マシンの両方にアタッチでき、インスタンス間で共有できます。 `block` : このコンテントタイプは仮想マシンと仮想マシンイメージで使用されます。 コンテントタイプ `block` のカスタムストレージボリュームは `--type=block` フラグを使って作成できます。 コンテントタイプが `block` のカスタムストレージボリュームは仮想マシンのみにアタッチできます。 これらはインスタンス間では共有すべきではありません。同時アクセスはデータ破壊を引き起こすからです。 `iso` : このコンテントタイプはカスタム ISO ボリュームで使用されます。 コンテントタイプ `iso` のカスタムストレージボリュームは [`incus import`](incus_import.md) コマンドを使って ISO ファイルをインポートすることでのみ作成できます。 コンテントタイプ `iso` のカスタムストレージボリュームは仮想マシンにのみアタッチできます。 これらは読み取り専用なので同時に複数の仮想マシンにアタッチできます。 (storage-buckets)= ## ストレージバケット ストレージバケットは S3 プロトコルを使用してオブジェクトストレージの機能を提供します。 これはカスタムストレージボリュームと同様の方法で使用されます。 しかし、ストレージボリュームとは異なり、ストレージバケットはインスタンスに紐付けされません。 代わりに、アプリケーションはストレージバケットにその URL を使って直接アクセスできます。 それぞれのストレージバケットには 1 つまたは複数のアクセスキーが割り当てられ、アプリケーションはアクセスの際にこれを使う必要があります。 ストレージバケットはローカルのストレージ(`dir`, `btrfs`, `lvm` あるいは `zfs` プールの場合)あるいはリモートストレージ(`cephobject` プールの場合)上に配置できます。 ローカルストレージドライバーでストレージバケットを有効にし、 S3 プロトコル経由でアプリケーションがバケットにアクセスできるようにするには、{config:option}`server-core:core.storage_buckets_address` サーバー設定を調整する必要があります。 さらなる情報については以下の how-to ガイドを参照してください: - {ref}`howto-storage-buckets`