タイプ: disk¶
注釈
disk デバイスタイプはコンテナと VM の両方でサポートされます。
コンテナと VM の両方でホットプラグをサポートします。
ディスクデバイスはインスタンスに追加のストレージを提供します。
コンテナにとっては、それらはインスタンス内の実質的なマウントポイントです(ホスト上の既存のファイルまたはディレクトリーのバインドマウントとしてか、あるいは、ソースがブロックデバイスの場合は通常のマウントのマウントポイント)。
仮想マシンは 9p または virtiofs(使用可能な場合)を通してホスト側のマウントまたはディレクトリーを共有するか、あるいはブロックベースのディスクに対する VirtIO ディスクとして共有します。
警告
デバイス名はデバイス用に生成されるシリアル値に影響します。デバイス名がnvmeとvirtio-blkでは14文字、virtio-scsiでは30文字を超えると、Incusは生成されたシリアル値がサポートされる長さ制限に収まるようにデバイスの値をハッシュ値に変換します。デバイスの名前自体は変更されずそのままです。
ディスクデバイスの種類¶
さまざまなソースからディスクデバイスを作成できます。
source オプションに指定する値によって、追加されるディスクデバイスのタイプが決まります:
- ストレージボリューム
最も一般的なタイプのディスクデバイスはストレージボリュームです。
ストレージボリュームを追加するには、デバイスのsourceとしてその名前を指定します:incus config device add <instance_name> <device_name> disk pool=<pool_name> source=<volume_name> [path=<path_in_instance>]
path はファイルシステムボリュームには必要ですが、ブロックボリュームには必要ありません。
また、
incus storage volume attachコマンドを使用してインスタンスにカスタムストレージボリュームをアタッチするすることもできます。
どちらのコマンドも、ストレージボリュームをディスクデバイスとして追加するための同じメカニズムを使用します。source=<volume_name>/<sub_path>というシンタクスを使ってカスタムボリュームのサブパスをインスタンスにアタッチできます。 サブパスがカスタムボリューム内に存在しない場合、デバイスの起動時に自動的に作成されます。その際サブパスのオーナーとパーミッションはinitial.XYZの設定キーが使われます。- ホスト上のパス
ホストのパス(ファイルシステムまたはブロックデバイスのいずれか)をインスタンスと共有するには、ディスクデバイスとして追加し、
sourceとしてホストパスを指定します:incus config device add <instance_name> <device_name> disk source=<path_on_host> [path=<path_in_instance>]
path はファイルシステムボリュームには必要ですが、ブロックデバイスには必要ありません。
- Ceph RBD
Incus は、インスタンスの内部ファイルシステムを管理するために Ceph を使用できますが、既存の外部管理 Ceph RBD をインスタンスに使用したい場合は、次のコマンドで追加できます:
incus config device add <instance_name> <device_name> disk source=ceph:<pool_name>/<volume_name> ceph.user_name=<user_name> ceph.cluster_name=<cluster_name> [path=<path_in_instance>]
path はファイルシステムボリュームには必要ですが、ブロックデバイスには必要ありません。
- CephFS
Incus はインスタンスで内部のファイルシステムの管理に Ceph を使えますが、既存の外部で管理されている Ceph ファイルシステムをインスタンスで使用したい場合は、以下のコマンドで追加できます:
incus config device add <instance_name> <device_name> disk source=cephfs:<fs_name>/<path> ceph.user_name=<user_name> ceph.cluster_name=<cluster_name> path=<path_in_instance>
- ISO file
仮想マシンには ISO ファイルをディスクデバイスとして追加できます。 ISO ファイルは VM 内部の ROM デバイスとして追加されます。
このソースタイプは VM でのみ利用可能です。
ISO ファイルを追加するには、そのファイルパスを
sourceとして指定します:incus config device add <instance_name> <device_name> disk source=<file_path_on_host>
- VM
cloud-init cloud-init.vendor-data、cloud-init.user-dataからcloud-init設定の ISO イメージを生成し、仮想マシンにアタッチできます。このソースタイプは VM でのみ利用可能です。
そのようなデバイスを追加するには、以下のコマンドを使用します:
incus config device add <instance_name> <device_name> disk source=cloud-init:config
- VM
agent エージェントの実行ファイル、設定ファイル、インストールスクリプトを含む
agent設定の ISO を生成できます。 これは9pが非サポートでエージェントをロードする別の方法が必要な環境で必要です。このソースタイプは VM でのみ利用可能です。
そのようなデバイスを追加するには、以下のコマンドを使用します:
incus config device add <instance_name> <device_name> disk source=agent:config
- Tmpfs
tmpfs:のソースを使うことでディスクデバイスをメモリ内のファイルシステムでバックアップできます。incus config device add <instance_name> <device_name> disk source=tmpfs: path=<path_in_instance> [size=<size>] [initial.uid=<uid>] [initial.gid=<gid>] [initial.mode=<mode>]
sourceとpathの両方が必須です。 これによりインスタンス内にtmpfsのマウントを作成します。オプションでサイズ、所有者、パーミッションのプロパティをサポートします。- overlayfsの挙動を使ったTmpfs
上記と同じtmpfsの挙動をoverlayfsのセマンティクスと組み合わせて使うには、ソースに
tmpfs-overlay:を使います。incus config device add <instance_name> <device_name> disk source=tmpfs-overlay: path=<path_in_instance> [size=<size>] [initial.uid=<uid>] [initial.gid=<gid>] [initial.mode=<mode>]
sourceとpathの両方が必須です。 さらに、ターゲットのpathはコンテナ内部にし事前に存在する必要があります。 これによりoverlayfsの処理を備えたメモリ内の一時的なファイルシステムを提供します。
インスタンスルートディスクデバイスの初期ボリューム設定¶
初期ボリューム設定は新しいインスタンスのルートディスクデバイスに個別の設定をできるようにします。
これらの設定は initial. という接頭辞がつき、インスタンスが作成されたときのみ適用されます。
この方法はデフォルトのストレージプールの設定とは独立に、個別の設定を持つインスタンスを作れるようにします。
たとえば、既存のプロファイルに zfs.block_mode の初期ボリューム設定を追加し、このプロファイルを使ってインスタンスを作成する都度適用できます:
incus profile device set <profile_name> <device_name> initial.zfs.block_mode=true
インスタンス作成時に初期設定を直接指定もできます。たとえば:
incus init <image> <instance_name> --device <device_name>,initial.zfs.block_mode=true
カスタムボリュームオプションに初期ボリューム設定を使ったりボリュームのサイズを設定はできないことに注意してください。
initial.uid、initial.gid、initial.mode¶
initial.uid、initial.gid、initial.modeは3つの異なるシナリオで使われます:
rootディスクデバイスでは、これらはストレージドライバーに渡され、インスタンスのrootボリュームの作成時にオーナーとパーミッションを設定するのに使われます(ドライバーがサポートする場合)。
tmpfs:とtmpfs-overlay:ディスクデバイスでは、tmpfsマウント時のuid=、gid=、mode=マウントオプションに変換されます。sourceがサブパスを含む(例:source=myvol/sub/path)カスタムボリュームディスクでは、デバイスの起動時に自動的に作成されるサブディレクトリーのオーナーとパーミションとして使われます。
すべての場合で、initial.uidとinitial.gidのデフォルトは0で、initial.modeのデフォルトは0711(8進数)です。
デバイスオプション¶
disk デバイスには以下のデバイスオプションがあります:
| Key: | ceph.cluster_name |
| Type: | string |
| Default: |
|
| Required: | no |
| Key: | ceph.user_name |
| Type: | string |
| Default: |
|
| Required: | no |
| Key: | initial.* |
| Type: | string |
| Required: | no |
rootディスクデバイスでは、インスタンスのrootボリュームを作成する際にストレージプールのデフォルトのボリューム設定を上書きするのに使われます。
カスタムボリュームでは、initial.uid、initial.gid、initial.modeのみが指定でき、カスタムボリューム内部でサブディレクトリーを自動で作成する際に使われます(sourceが存在しないサブパスを含む場合)。
また、initial.uid、initial.gid、initial.modeはsourceがtmpfs:かtmpfs-overlay:の場合にファイルシステムのオーナーとパーミッションを設定するのにも使われます。
| Key: | io.bus |
| Type: | string |
| Default: | ブロックデバイスでは |
| Required: | no |
これはディスクデバイスをどのバスにアタッチするかを制御します。
ブロックデバイス(ディスク)では、これは以下のいずれかです:
nvmevirtio-blkvirtio-scsi(デフォルト)usb
ファイルシステム(共有ディレクトリまたはカスタムボリューム)では、これは以下のいずれかです:
9pauto(デフォルト) (利用可能ならvirtiofs、そうでなければ9p)virtiofs
9pはホットプラグに非対応で、virtiofsはライブマイグレーションに非対応です。
autoは可能なら(migration.statefulがtrueに設定され、ホストがvirtiofsdをサポートする場合)virtiofsを使おうとし、それ以外は9pにフォールバックします。
| Key: | io.cache |
| Type: | string |
| Default: |
|
| Required: | no |
これはディスクデバイスをどのバスにアタッチするかを制御します。
ブロックデバイス(ディスク)では、これは以下のいずれかです:
none(デフォルト)writebackunsafe
ファイルシステム(共有ディレクトリまたはカスタムボリューム)では、これは以下のいずれかです:
none(デフォルト)metadataunsafe
| Key: | limits.max |
| Type: | string |
| Required: | no |
limits.readbyte/s(さまざまな単位が使用可能、ストレージ、メモリとネットワーク制限の単位参照)もしくはIOPS(あとにiopsと付けなければなりません)で指定する読み込みのI/O制限値 - I/O 制限値の設定 も参照
| Key: | limits.read |
| Type: | string |
| Required: | no |
limits.writebyte/s(さまざまな単位が使用可能、ストレージ、メモリとネットワーク制限の単位参照)もしくはIOPS(あとにiopsと付けなければなりません)で指定する書き込みのI/O制限値 - I/O 制限値の設定 も参照
| Key: | limits.write |
| Type: | string |
| Required: | no |
| Key: | path |
| Type: | string |
| Required: | yes |
これはインスタンス内部でディスクがマウントされるパスを制御します。
コンテナでは、このオプションはファイルシステムディスクデバイスとそれらの中の複数のパスと単一ファイルのマウントのみをサポートします。
VMでは、このオプションはファイルシステムディスクデバイスとそれらの中の複数のパスのマウントのみをサポートします。単一ファイルのマウントはサポートされません。
propagationバインドマウントをインスタンスとホストでどのように共有するかを管理する(private (デフォルト)、shared、slave、unbindable、 rshared、rslave、runbindable、rprivate のいずれか。完全な説明は Linux Kernel の文書 shared subtree 参照)
| Key: | propagation |
| Type: | string |
| Required: | no |
| Key: | shift |
| Type: | bool |
| Default: |
|
| Required: | no |
| Key: | size |
| Type: | string |
| Required: | no |
| Key: | size.state |
| Type: | string |
| Required: | no |
| Key: | source |
| Type: | string |
| Required: | yes |