インスタンスオプション

インスタンスオプションはインスタンスに直接関係する設定オプションです。

インスタンスオプションをどのように設定するかの手順はインスタンスオプションを設定するを参照してください。

key/value 形式の設定は、名前空間で分けられています。 以下のオプションが利用できます:

各オプションに型が定義されていますが、すべての値は文字列として保管され、REST API で文字列としてエクスポートされる(こうすることで後方互換性を壊すことなく任意の追加の値をサポートできます)ことに注意してください。

その他のオプション

以下のセクションに一覧表示される設定オプションに加えて、以下のインスタンスオプションがサポートされます:

agent.nic_config

デフォルトネットワークインタフェースの名前とMTUを使うかどうか

Key: agent.nic_config
Type:

bool

Default:

false

Live update:

no

Condition:

virtual machine

コンテナでは、デフォルトネットワークインタフェースの名前とMTUを使うようになります。 仮想マシンでは、このオプションをtrueに設定するとデフォルトのネットワークインタフェースの名前とMTUがインスタンスデバイスと同じになります。

cluster.evacuate

インスタンスを退避する際に何をするか

Key: cluster.evacuate
Type:

string

Default:

auto

Live update:

no

cluster.evacuateはクラスタメンバーが退避される際にインスタンスがどのように扱われるかを制御します。

利用可能なモード:

  • auto (デフォルト): インスタンスのタイプと設定されたデバイスに基づいてベストな退避の方法をシステムが自動的に決定します:

    • マイグレーションに適さないデバイスがある場合、インスタンスはマイグレーションされません(停止のみされます)。

    • ライブマイグレーションはmigration.stateful設定を有効にした仮想マシンでのみ実行され、仮想マシンのすべてのデバイスもマイグレートされます。

  • live-migrate: インスタンスが別のサーバーにライブマイグレートされます。つまりインスタンスはマイグレーションプロセス中にも稼働して操作可能なままになり、切断は最小限ですみます。

  • migrate: このモードでは、インスタンスはクラスター内の他のサーバーにマイグレートされます。マイグレーションプロセスはライブではありません。つまり、インスタンスはマイグレーション中に短時間ダウンタイムが発生します。

  • stop: インスタンスはマイグレートされません。代わりに現在のサーバー上で停止されます。

  • stateful-stop: インスタンスはマイグレートされません。代わりに現在のサーバー上で停止されますが、復元時にレジュームできるように実行状態(メモリ)をディスク上に保存します。

  • force-stop: インスタンスはマイグレートされません。代わりに強制停止されます。

詳細はクラスタメンバーの退避と復元を参照してください。

linux.kernel_modules

インスタンスの起動前にロードするカーネルモジュール

Key: linux.kernel_modules
Type:

string

Live update:

yes

Condition:

container

カーネルモジュールをカンマ区切りリストで指定します。

linux.sysctl.*

コンテナ内の対応するsysctl設定をオーバーライドします

Key: linux.sysctl.*
Type:

string

Live update:

no

Condition:

container

user.*

自由形式のユーザーのkey/valueストレージ

Key: user.*
Type:

string

Live update:

no

ユーザーキーは検索で使用できます。

environment.*

インスタンスのための環境変数

Key: environment.*
Type:

string

Live update:

yes (exec)

key/value の環境変数をインスタンスにエクスポートできます。 これらはその後 incus exec に設定されます。

ブート関連のオプション

以下のインスタンスオプションはインスタンスのブート関連の挙動を制御します:

boot.autostart

デーモンの起動時にインスタンスを常に起動するかどうか

Key: boot.autostart
Type:

bool

Live update:

no

falseに設定すると、最後の状態を復元します。

boot.autostart.delay

インスタンスの起動からの遅延

Key: boot.autostart.delay
Type:

integer

Default:

0

Live update:

no

インスタンスが起動してから次のインスタンスを起動するまでの待ち時間の秒数。

boot.autostart.priority

インスタンスをどの順序で起動するか

Key: boot.autostart.priority
Type:

integer

Default:

0

Live update:

no

一番大きな値のインスタンスが最初に起動されます。

boot.host_shutdown_action

ホストが停止される際にインスタンスにどのアクションを行うか

Key: boot.host_shutdown_action
Type:

integer

Default:

stop

Live update:

yes

ホストの停止の際に行うアクション

boot.host_shutdown_timeout

インスタンスが停止するのに待つ秒数

Key: boot.host_shutdown_timeout
Type:

integer

Default:

30

Live update:

yes

インスタンスを強制停止する前に停止するのを待つ秒数。

boot.stop.priority

インスタンスをどの順序で停止するか

Key: boot.stop.priority
Type:

integer

Default:

0

Live update:

no

一番大きな値のインスタンスが最初に停止されます。

cloud-init 設定

以下のインスタンスオプションはインスタンスのcloud-init設定を制御します:

cloud-init.network-config

cloud-initのネットワーク設定

Key: cloud-init.network-config
Type:

string

Default:

DHCP on eth0

Live update:

no

Condition:

イメージでサポートされる場合

中身がcloud-initへのシード値として使用されます。

cloud-init.user-data

cloud-initのユーザーデータ

Key: cloud-init.user-data
Type:

string

Default:

#cloud-config

Live update:

no

Condition:

イメージでサポートされる場合

中身がcloud-initへのシード値として使用されます。

cloud-init.vendor-data

cloud-initのVendorデータ

Key: cloud-init.vendor-data
Type:

string

Default:

#cloud-config

Live update:

no

Condition:

イメージでサポートされる場合

中身がcloud-initへのシード値として使用されます。

user.network-config

cloud-init.network-configのレガシーバージョン

Key: user.network-config
Type:

string

Default:

DHCP on eth0

Live update:

no

Condition:

イメージでサポートされる場合

user.user-data

cloud-init.user-dataのレガシーバージョン

Key: user.user-data
Type:

string

Default:

#cloud-config

Live update:

no

Condition:

イメージでサポートされる場合

user.vendor-data

cloud-init.vendor-dataのレガシーバージョン

Key: user.vendor-data
Type:

string

Default:

#cloud-config

Live update:

no

Condition:

イメージでサポートされる場合

これらのオプションのサポートは使用するイメージに依存し、保証はされません。

cloud-init.user-datacloud-init.vendor-dataの両方を指定すると、両方のオプションの設定がマージされます。 このため、これらのオプションに設定するcloud-init設定が同じキーを含まないようにしてください。

リソース制限

以下のインスタンスオプションはインスタンスのリソース制限を指定します:

limits.cpu

インスタンスにどのCPUを見せるか

Key: limits.cpu
Type:

string

Default:

1 (VMs)

Live update:

yes

インスタンスに見せるCPUの番号または範囲。

詳細はCPUピンニングを参照してください。

limits.cpu.allowance

CPUのどれだけを使えるか

Key: limits.cpu.allowance
Type:

string

Default:

100%

Live update:

yes

Condition:

container

CPUのどれだけを使えるか制御するため、パーセント(50%)でソフトリミットかタイムスライス(25ms/100ms)でハードリミットを指定します。

詳細は割り当てと優先度(コンテナのみ)を指定してください。

limits.cpu.nodes

どのNUMAノード上にインスタンスのCPUを配置するか

Key: limits.cpu.nodes
Type:

string

Live update:

yes

インスタンスのCPUを配置するNUMAノードIDのカンマ区切りリストか範囲。 あるいは、起動時に一番忙しくないNUMAノードをIncusが選んで使用するbalancedという値も使えます。

詳細は割り当てと優先度(コンテナのみ)を参照してください。

limits.cpu.priority

他のインスタンスと比較してのCPUスケジュールの優先度

Key: limits.cpu.priority
Type:

integer

Default:

10 (maximum)

Live update:

yes

Condition:

container

リソースをオーバーコミットする際、同じCPUを共有する他のインスタンスと比較したCPUスケジュールの優先度を指定します。 0から10の間の整数を指定します。

詳細は割り当てと優先度(コンテナのみ)を参照してください。

limits.disk.priority

インスタンスのI/Oリクエストの優先度

Key: limits.disk.priority
Type:

integer

Default:

5 (medium)

Live update:

yes

負荷がかかった際のインスタンスのI/Oリクエストにどれぐらいの優先度を与えるかを制御します。

0から10の間の整数を指定します。

limits.hugepages.1GB

1 GB huge pageの数を制限します

Key: limits.hugepages.1GB
Type:

string

Live update:

yes

Condition:

container

1 GB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージとネットワーク制限の単位参照)。

詳細はhuge page の制限を参照してください。

limits.hugepages.1MB

1 MB huge pageの数を制限します

Key: limits.hugepages.1MB
Type:

string

Live update:

yes

Condition:

container

1 MB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージとネットワーク制限の単位参照)。

詳細はhuge page の制限を参照してください。

limits.hugepages.2MB

2 MB huge pageの数を制限します

Key: limits.hugepages.2MB
Type:

string

Live update:

yes

Condition:

container

2 MB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージとネットワーク制限の単位参照)。

詳細はhuge page の制限を参照してください。

limits.hugepages.64KB

64 KB huge pageの数を制限します

Key: limits.hugepages.64KB
Type:

string

Live update:

yes

Condition:

container

64 KB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージとネットワーク制限の単位参照)。

詳細はhuge page の制限を参照してください。

limits.memory

ホストのメモリの使用制限

Key: limits.memory
Type:

string

Default:

1Gib (VMs)

Live update:

yes

ホストのメモリのパーセンテージかバイト単位の固定値。 さまざまな接尾辞がサポートされます。

詳細はストレージとネットワーク制限の単位を参照してください。

limits.memory.enforce

メモリリミットがhardsoft

Key: limits.memory.enforce
Type:

string

Default:

hard

Live update:

yes

Condition:

container

インスタンスの目盛リミットがhardの場合、インスタンスはそのリミットを超えられません。 softの場合、ホストのメモリに余裕があればインスタンスはそのリミットを超えられます。

limits.memory.hugepages

インスタンスにhuge pageを使えるか

Key: limits.memory.hugepages
Type:

bool

Default:

false

Live update:

no

Condition:

virtual machine

このオプションがfalseに設定された場合、通常のシステムメモリが使用されます。

limits.memory.swap

インスタンスのスワップ使用を制御

Key: limits.memory.swap
Type:

string

Default:

true

Live update:

yes

Condition:

container

truefalseに設定すると、カーネルがスワップしたメモリの一部をコンテナが受け取るかどうかを制御します。 あるいはバイト数の値をセットすると、コンテナがスワップを通じて追加のメモリを使用できるようにします。

limits.memory.swap.priority

インスタンスがディスクにスワップされるのを防ぐ

Key: limits.memory.swap.priority
Type:

integer

Default:

10 (maximum)

Live update:

yes

Condition:

container

0から10の間の整数を指定します。 値が高いほど、インスタンスがディスクにスワップされにくくなります。

limits.processes

インスタンス内で実行できるプロセスの最大数

Key: limits.processes
Type:

integer

Default:

empty

Live update:

yes

Condition:

container

空の場合は、制限なし。

limits.kernel.*

インスタンスごとのカーネルリソース

Key: limits.kernel.*
Type:

string

Live update:

no

Condition:

container

インスタンスにカーネルの制限を設定できます、たとえば、オープンできるファイル数を制限できます。 詳細は カーネルリソース制限 を参照してください。

PU制限

CPU 使用率を制限するための異なるオプションがあります:

  • limits.cpuを設定して、インスタンスが見ることができ、使用することができる CPU を制限します。 このオプションの設定方法は、CPUピンニングを参照してください。

  • limits.cpu.allowanceを設定して、インスタンスが利用可能な CPU にかける負荷を制限します。 このオプションはコンテナのみで利用可能です。 このオプションの設定方法は、割り当てと優先度(コンテナのみ)を参照してください。

これらのオプションは同時に設定して、インスタンスが見ることができる CPU とそれらのインスタンスの許可される使用量の両方を制限することが可能です。 しかし、limits.cpu.allowanceを時間制限と共に使用する場合、スケジューラーに多くの制約をかけ、効率的な割り当てが難しくなる可能性があるため、limits.cpuの追加使用は避けるべきです。

CPU 制限は cgroup コントローラーのcpusetcpuを組み合わせて実装しています。

CPUピンニング

limits.cpucpusetコントローラーを使って、CPU を固定(ピンニング)します。 どの CPU を、またはどれぐらいの数の CPU を、インスタンスから見えるようにし、使えるようにするかを指定できます:

  • どの CPU を使うかを指定するには、limits.cpuを CPU の組み合わせ(例:1,2,3)あるいは CPU の範囲(例:0-3)で指定できます。

    単一の CPU にピンニングするためには、CPU の個数との区別をつけるために、範囲を指定する文法(例:1-1)を使う必要があります。

  • CPU の個数を指定した場合(例:4)、Incus は特定の CPU にピンニングされていないすべてのインスタンスをダイナミックに負荷分散し、マシン上の負荷を分散しようとします。 インスタンスが起動したり停止するたびに、またシステムに CPU が追加されるたびに、インスタンスはリバランスされます。

仮想マシンのCPUリミット

注釈

Incus はlimits.cpuオプションのライブアップデートをサポートします。 しかし、仮想マシンの場合は、対応する CPU がホットプラグされるだけです。 ゲストのオペレーティングシステムによって、新しい CPU をオンラインにするためには、インスタンスを再起動するか、なんらかの手動の操作を実行する必要があります。

Incus の仮想マシンはデフォルトでは 1 つの vCPU だけを割り当てられ、ホストの CPU のベンダーとタイプとマッチした CPU として現れますが、シングルコアでスレッドなしになります。

limits.cpuを単一の整数に設定する場合、Incus は複数の vCPU を割り当ててゲストにはフルなコアとして公開します。 これらの vCPU はホスト上の特定の物理コアにはピンニングされません。 vCPU の個数は VM の稼働中に変更できます。

limits.cpuを CPU ID(incus info --resources で表示されます)の範囲またはカンマ区切りリストの組に設定する場合、vCPU は物理コアにピンニングされます。 このシナリオでは、Incus は CPU 設定が現実のハードウェアトポロジーとぴったり合うかチェックし、合う場合はそのトポロジーをゲスト内に複製します。 CPU ピンニングを行う場合、VM の稼働中に設定を変更することはできません。

たとえば、ピンニング設定が 8 個のスレッド、同じコアのスレッドの各ペアと 2 個の CPU に散在する偶数のコアを持つ場合、ゲストは 2 個の CPU、各 CPU に 2 個のコア、各コアに 2 個のスレッドを持ちます。 NUMA レイアウトは同様に複製され、このシナリオでは、ゲストではほとんどの場合、2 個の NUMA ノード、各 CPU ソケットに 1 個のノードを持つことになるでしょう。

複数の NUMA ノードを持つような環境では、メモリーは同様に NUMA ノードで分割され、ホスト上で適切にピンニングされ、その後ゲストに公開されます。

これらすべてにより、ゲストスケジューラはソケット、コア、スレッドを適切に判断し、メモリーを共有したり NUMA ノード間でプロセスを移動する際に NUMA トポロジーを考慮できるので、ゲスト内で非常に高パフォーマンスな操作を可能にします。

割り当てと優先度(コンテナのみ)

limits.cpu.allowanceは、時間の制限を与えたときは CFS スケジューラのクォータを、パーセント指定をした場合は全体的な CPU シェアの仕組みを使います:

  • 時間制限(たとえば、20ms/50ms)はハードリミットです。 たとえば、コンテナが最大で 1 つの CPU を使用することを許可する場合は、limits.cpu.allowance100ms/100msのような値に設定します。この値は 1 つの CPU に相当する時間に対する相対値なので、2 つの CPU の時間を制限するには、100ms/50msあるいは200ms/100msのような値を使用します。

  • パーセント指定を使う場合は、制限は負荷状態にある場合のみに適用されるソフトリミットです。 設定は、同じ CPU(もしくは CPU の組)を使う他のインスタンスとの比較で、インスタンスに対するスケジューラの優先度を計算するのに使われます。 たとえば、負荷時のコンテナの CPU 使用率を 1 つの CPU に制限するためには、limits.cpu.allowance100%に設定します。

limits.cpu.priority は、CPU の組を共有する複数のインスタンスに割り当てられた CPU の割合が同じ場合に、スケジューラの優先度スコアを計算するために使われる別の因子です。

huge page の制限

Incus では limits.hugepage.[size] キーを使ってコンテナが利用できる huge page の数を制限できます。

アーキテクチャはしばしば huge page のサイズを公開しています。 利用可能な huge page サイズはアーキテクチャによって異なります。

huge page の制限は非特権コンテナ内でhugetlbfsファイルシステムのmountシステムコールをインターセプトするように Incus を設定しているときには特に有用です。 Incus がhugetlbfs mountシステムコールをインターセプトすると Incus は正しいuidgidの値をmountオプションに指定してhugetblfsファイルシステムをコンテナにマウントします。 これにより非特権コンテナからも huge page が利用可能となります。 しかし、ホストで利用可能な huge page をコンテナが使い切ってしまうのを防ぐため、limits.hugepages.[size]を使ってコンテナが利用可能な huge page の数を制限することを推奨します。

huge page の制限はhugetlb cgroup コントローラーによって実行されます。これはこれらの制限を適用するために、ホストシステムがhugetlbコントローラーをレガシーあるいは cgroup の単一階層構造(訳注:cgroup v2)に公開する必要があることを意味します。

カーネルリソース制限

Incus は、インスタンスのリソース制限を設定するのに使用できる一般の名前空間キーlimits.kernel.*を公開しています。

limits.kernel.*接頭辞に続いて指定されるリソースについて Incus が全く検証を行わないという意味でこれは汎用です。 Incus は対象のカーネルがサポートするすべての利用可能なリソースについて知ることはできません。 代わりに、Incus はlimits.kernel.*接頭辞の後の対応するリソースキーとその値をカーネルに単に渡します。 カーネルが適切な検証を行います。 これによりユーザーはシステム上でサポートされる任意の制限を指定できます。

よくある制限のいくつかは以下のとおりです:

limits.kernel.as

プロセスの仮想メモリーの最大サイズ

Key: limits.kernel.as
Type:

string

Resource:

RLIMIT_AS

limits.kernel.core

プロセスのコアダンプファイルの最大サイズ

Key: limits.kernel.core
Type:

string

Resource:

RLIMIT_CORE

limits.kernel.cpu

プロセスが使えるCPU時間の秒単位の制限

Key: limits.kernel.cpu
Type:

string

Resource:

RLIMIT_CPU

limits.kernel.data

プロセスのデータセグメントの最大サイズ

Key: limits.kernel.data
Type:

string

Resource:

RLIMIT_DATA

limits.kernel.fsize

プロセスが作成できるファイルの最大サイズ

Key: limits.kernel.fsize
Type:

string

Resource:

RLIMIT_FSIZE

limits.kernel.locks

プロセスが確立できるファイルロック数の制限

Key: limits.kernel.locks
Type:

string

Resource:

RLIMIT_LOCKS

limits.kernel.memlock

プロセスがRAM上でロックできるメモリーのバイト数の制限

Key: limits.kernel.memlock
Type:

string

Resource:

RLIMIT_MEMLOCK

limits.kernel.nice

引き上げることができるプロセスのnice値の最大値

Key: limits.kernel.nice
Type:

string

Resource:

RLIMIT_NICE

limits.kernel.nofile

プロセスがオープンできるファイルの最大値

Key: limits.kernel.nofile
Type:

string

Resource:

RLIMIT_NOFILE

limits.kernel.nproc

呼び出し元プロセスのユーザーが作れるプロセスの最大数

Key: limits.kernel.nproc
Type:

string

Resource:

RLIMIT_NPROC

limits.kernel.rtprio

プロセスに対して設定できるリアルタイム優先度の最大値

Key: limits.kernel.rtprio
Type:

string

Resource:

RLIMIT_RTPRIO

limits.kernel.sigpending

呼び出し元プロセスのユーザーがキューに入れられるシグナルの最大数

Key: limits.kernel.sigpending
Type:

string

Resource:

RLIMIT_SIGPENDING

指定できる制限の完全なリストは getrlimit(2)/setrlimit(2)システムコールの man ページで確認できます。

limits.kernel.*名前空間内で制限を指定するには、RLIMIT_を付けずに、リソース名を小文字で指定します。 たとえば、RLIMIT_NOFILEnofileと指定します。

制限は、コロン区切りのふたつの数字もしくはunlimitedという文字列で指定します(たとえば、limits.kernel.nofile=1000:2000)。 単一の値を使って、ソフトリミットとハードリミットを同じ値に設定できます(たとえば、limits.kernel.nofile=3000)。

明示的に設定されないリソースは、インスタンスを起動したプロセスから継承されます。 この継承は Incus でなく、カーネルによって強制されることに注意してください。

マイグレーションオプション

以下のインスタンスオプションはインスタンスがあるLXDサーバーから別のサーバーに移動される場合の挙動を制御します:

migration.incremental.memory

インクリメンタルなメモリ転送を使用するかどうか

Key: migration.incremental.memory
Type:

bool

Default:

false

Live update:

yes

Condition:

container

インスタンスのメモリのインクリメンタルなメモリ転送を使用するとダウンタイムを短縮できます。

migration.incremental.memory.goal

インスタンスを停止する前に同期するメモリのパーセンテージ

Key: migration.incremental.memory.goal
Type:

integer

Default:

70

Live update:

yes

Condition:

container

migration.incremental.memory.iterations

インスタンスを停止する前に行う転送操作の最大数

Key: migration.incremental.memory.iterations
Type:

integer

Default:

10

Live update:

yes

Condition:

container

migration.stateful

ステートフルな停止/起動とスナップショットを許可するかどうか

Key: migration.stateful
Type:

bool

Default:

false

Live update:

no

このオプションを有効にするとそれと非互換ないくつかの機能は使えなくなります。

NVIDIAとCUDAの設定

以下のインスタンスオプションはインスタンスの NVIDIA と CUDA の設定を指定します:

nvidia.driver.capabilities

インスタンスが必要なドライバーのケイパビリティ

Key: nvidia.driver.capabilities
Type:

string

Default:

compute,utility

Live update:

no

Condition:

container

指定されたドライバーのケイパビリティはlibnvidia-container NVIDIA_DRIVER_CAPABILITIESを設定するのに使われます。

nvidia.require.cuda

必要なCUDAのバージョン

Key: nvidia.require.cuda
Type:

string

Live update:

no

Condition:

container

指定されたバージョンはlibnvidia-container NVIDIA_REQUIRE_CUDAを設定するのに使われます。

nvidia.require.driver

必要なドライバーのバージョン

Key: nvidia.require.driver
Type:

string

Live update:

no

Condition:

container

指定されたバージョンはlibnvidia-container NVIDIA_REQUIRE_CUDAを設定するのに使われます。

nvidia.runtime

ホストのNVIDIAとCUDAのランタイムライブラリをインスタンスに引き渡すかどうか

Key: nvidia.runtime
Type:

bool

Default:

false

Live update:

no

Condition:

container

rawインスタンス設定のオーバーライド

以下のインスタンスオプションは Incus 自身が使用するバックエンド機能に直接制御できるようにします:

raw.apparmor

AppArmorプロファイルのエントリ

Key: raw.apparmor
Type:

blob

Live update:

yes

指定されたエントリは生成されるプロファイルに追加されます。

raw.idmap

生のidmap設定

Key: raw.idmap
Type:

blob

Live update:

no

Condition:

unprivileged container

例: both 1000 1000

raw.lxc

生成される設定に追加する生のLXC設定

Key: raw.lxc
Type:

blob

Live update:

no

Condition:

container

raw.qemu

生成されるコマンドラインに追加する生のQEMU設定

Key: raw.qemu
Type:

blob

Live update:

no

Condition:

virtual machine

raw.qemu.conf

生成されるqemu.confファイルへの追加/上書きA

Key: raw.qemu.conf
Type:

blob

Live update:

no

Condition:

virtual machine

詳細はQEMU設定のオーバーライドを参照してください。

raw.seccomp

生のSeccomp設定

Key: raw.seccomp
Type:

blob

Live update:

no

Condition:

container

重要

これらのraw.*キーを設定すると Incus を予期せぬ形で壊してしまうかもしれません。 このため、これらのキーを設定するのは避けるほうが良いです。

QEMU設定のオーバーライド

VM インスタンスに対しては、Incus は-readconfigコマンドラインオプションで QEMU に渡す設定ファイルを使って QEMU を設定します。 この設定ファイルは各インスタンスの起動前に生成されます。 設定ファイルは/run/incus/<instance_name>/qemu.confに作られます。

デフォルトの設定はほとんどの典型的な利用ケース、VirtIO デバイスを持つモダンな UEFI ゲスト、では正常に動作します。 しかし、いくつかの状況では、生成された設定をオーバーライドする必要があります。 たとえば以下のような場合です。

  • UEFI をサポートしない古いゲスト OS を実行する。

  • VirtIO がゲスト OS でサポートされない場合にカスタムな仮想デバイスを指定する。

  • マシンの起動前に Incus でサポートされないデバイスを追加する。

  • ゲスト OS と衝突するデバイスを削除する。

設定をオーバーライドするには、raw.qemu.confオプションを設定します。 これはqemu.confと似たような形式ですが、いくつか拡張した形式をサポートします。 これは複数行の設定オプションですので、複数のセクションやキーを変更するのに使えます。

  • 生成された設定ファイルのセクションやキーを置き換えるには、別の値を持つセクションを追加します。

    たとえば、デフォルトのvirtio-gpu-pci GPU ドライバーをオーバーライドするには以下のセクションを使います:

    raw.qemu.conf: |-
        [device "qemu_gpu"]
        driver = "qxl-vga"
    
  • セクションを削除するには、キー無しのセクションを指定します。 たとえば:

    raw.qemu.conf: |-
        [device "qemu_gpu"]
    
  • キーを削除するには、空の文字列を値として指定します。 たとえば:

    raw.qemu.conf: |-
        [device "qemu_gpu"]
        driver = ""
    
  • 新規のセクションを追加するには、設定ファイル内に存在しないセクション名を指定します。

QEMU で使用される設定ファイル形式は同じ名前の複数のセクションを許可します。 以下は Incus で生成される設定の抜粋です。

[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"

[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "1"

オーバーライドするセクションを指定するには、インデクスを指定します。 たとえば:

raw.qemu.conf: |-
    [global][1]
    value = "0"

セクションのインデクスは 0(指定しない場合のデフォルト値)から始まりますので、上の例は以下の設定を生成します:

[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"

[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "0"

セキュリティーポリシー

以下のインスタンスオプションはインスタンスのSecurityポリシーを制御します:

security.agent.metrics

状態とメトリクスをincus-agentに問い合わせるかどうか

Key: security.agent.metrics
Type:

bool

Default:

true

Live update:

no

Condition:

virtual machine

security.csm

UEFI互換のオペレーティングシステムをサポートするファームウェアを使用するかどうか

Key: security.csm
Type:

bool

Default:

false

Live update:

no

Condition:

virtual machine

このオプションを有効にする際は、security.securebootfalseに設定してください。

security.guestapi

インスタンス内に/dev/incusを作るかどうか

Key: security.guestapi
Type:

bool

Default:

true

Live update:

no

詳細はインスタンス〜ホスト間の通信を参照してください。

security.guestapi.images

guestapi上に/1.0/imagesを提供するかどうかを制御

Key: security.guestapi.images
Type:

bool

Default:

false

Live update:

no

Condition:

container

security.idmap.base

割り当てに使用するベースのホストID

Key: security.idmap.base
Type:

integer

Live update:

no

Condition:

unprivileged container

このオプションを設定すると自動検出をオーバーライドします。

security.idmap.isolated

このインスタンスにユニークなidmapを使用するかどうか

Key: security.idmap.isolated
Type:

bool

Default:

false

Live update:

no

Condition:

unprivileged container

指定すると、このインスタンスに使用するidmapはこのオプションを設定したインスタンス間でユニークになります。

security.idmap.size

使用するidmapのサイズ

Key: security.idmap.size
Type:

integer

Live update:

no

Condition:

unprivileged container

security.nesting

インスタンス内部で(ネストして)Incusを稼働するのをサポートするかどうか

Key: security.nesting
Type:

bool

Default:

false

Live update:

yes

Condition:

container

security.privileged

インスタンスを特権モードで動かすかどうか

Key: security.privileged
Type:

bool

Default:

false

Live update:

no

Condition:

container

security.protection.delete

インスタンスが削除されるのを防ぐ

Key: security.protection.delete
Type:

bool

Default:

false

Live update:

yes

security.protection.shift

ファイルシステムでUID/GIDがシフトされるのを防ぐかどうか

Key: security.protection.shift
Type:

bool

Default:

false

Live update:

yes

Condition:

container

このオプションをtrueにするとインスタンスの起動時にファイルシステムでUID/GIDがシフトされなくなります。

security.secureboot

UEFIセキュアブートをデフォルトのMicorsoftのキーで有効化するかどうか

Key: security.secureboot
Type:

bool

Default:

true

Live update:

no

Condition:

virtual machine

このオプションを無効にする場合、security.csmを有効にすることを検討してください。

security.sev

このVMでAMD SEV (Secure Encrypted Virtualization)を有効にするかどうか

Key: security.sev
Type:

bool

Default:

false

Live update:

no

Condition:

virtual machine

security.sev.policy.es

このVMでAMD SEV-ES (SEV Encrypted State)を有効にするかどうか

Key: security.sev.policy.es
Type:

bool

Default:

false

Live update:

no

Condition:

virtual machine

security.sev.session.data

ゲストオーナーのbase64エンコードされたセッションblob

Key: security.sev.session.data
Type:

string

Default:

true

Live update:

no

Condition:

virtual machine

security.sev.session.dh

ゲストオーナーのbase64エンコードされたDiffie-Hellman鍵

Key: security.sev.session.dh
Type:

string

Default:

true

Live update:

no

Condition:

virtual machine

security.syscalls.allow

許可するシステムコールのリスト

Key: security.syscalls.allow
Type:

string

Live update:

no

Condition:

container

\nで区切られた許可するシステムコールのリスト。 このリストはsecurity.syscalls.denyと相互排他的である必要があります。

security.syscalls.deny

許可するシステムコールのリスト

Key: security.syscalls.deny
Type:

string

Live update:

no

Condition:

container

\nで区切られた拒否するシステムコールのリスト。 このリストはsecurity.syscalls.allowと相互排他的である必要があります。

security.syscalls.deny_compat

compat_*システムコールをブロックするかどうか(x86_64のみ)

Key: security.syscalls.deny_compat
Type:

bool

Default:

false

Live update:

no

Condition:

container

x86_64上では、このオプションはcompat_*システムコールをブロックするかどうかを制御します。 他のアーキテクチャーでは、このオプションは無視されます。

security.syscalls.deny_default

デフォルトのシステムコールを無視するのを有効にするかどうか

Key: security.syscalls.deny_default
Type:

bool

Default:

true

Live update:

no

Condition:

container

security.syscalls.intercept.bpf

bpf()システムコールを処理するかどうか

Key: security.syscalls.intercept.bpf
Type:

bool

Default:

false

Live update:

no

Condition:

container

security.syscalls.intercept.bpf.devices

BPFプログラムを許可するかどうか

Key: security.syscalls.intercept.bpf.devices
Type:

bool

Default:

false

Live update:

no

Condition:

container

このオプションはBPFプログラムが単一階層構造のデバイスcgroupをロードするのを許可するかどうかを制御します。

security.syscalls.intercept.mknod

mknodmknodatシステムコールを処理するかどうか

Key: security.syscalls.intercept.mknod
Type:

bool

Default:

false

Live update:

no

Condition:

container

これらのシステムコールはキャラクター/ブロックデバイスの限定されたサブセットの作成を許可します。

security.syscalls.intercept.mount

mountシステムコールを処理するかどうか

Key: security.syscalls.intercept.mount
Type:

bool

Default:

false

Live update:

no

Condition:

container

security.syscalls.intercept.mount.allowed

マウント可能なファイルシステム

Key: security.syscalls.intercept.mount.allowed
Type:

string

Live update:

yes

Condition:

container

インスタンス内部のプロセスが安全にマウントできるファイルシステムのカンマ区切りリストを指定します。

security.syscalls.intercept.mount.fuse

FUSE実装にリダイレクトすべきファイルシステム

Key: security.syscalls.intercept.mount.fuse
Type:

string

Live update:

yes

Condition:

container

FUSE実装にリダイレクトすべきファイルシステムのマウントを指定します(例えば、ext4=fuse2fs)。

security.syscalls.intercept.mount.shift

システムコールのインターセプションにidmapマウントを使用するかどうか

Key: security.syscalls.intercept.mount.shift
Type:

bool

Default:

false

Live update:

yes

Condition:

container

security.syscalls.intercept.sched_setcheduler

sched_setschedulerシステムコールを処理するかどうか

Key: security.syscalls.intercept.sched_setcheduler
Type:

bool

Default:

false

Live update:

no

Condition:

container

このシステムコールはプロセスの優先度を増加させることができます。

security.syscalls.intercept.setxattr

setxattrシステムコールを処理するかどうか

Key: security.syscalls.intercept.setxattr
Type:

bool

Default:

false

Live update:

no

Condition:

container

このシステムコールは制限された拡張属性の限定されたサブセットを設定できます。

security.syscalls.intercept.sysinfo

sysinfoシステムコールを処理するかどうか

Key: security.syscalls.intercept.sysinfo
Type:

bool

Default:

false

Live update:

no

Condition:

container

このシステムコールはcgroupベースのリソース消費情報を取得するのに使用できます。

スナップショットのスケジュールと設定

以下のインスタンスオプションはインスタンススナップショットの作成と削除を制御します:

snapshots.expiry

いつスナップショットを削除するか

Key: snapshots.expiry
Type:

string

Live update:

no

1M 2H 3d 4w 5m 6yのような式を指定します。

snapshots.pattern

スナップショット名のテンプレート

Key: snapshots.pattern
Type:

string

Default:

snap%d

Live update:

no

スナップショット名を表すPongo2のテンプレート文字列を指定します。 このテンプレートはスケジュールされたスナップショットと無名のスナップショットに使用されます。

詳細はスナップショットの自動命名を参照してください。

snapshots.schedule

自動インスタンススナップショットのスケジュール

Key: snapshots.schedule
Type:

string

Default:

empty

Live update:

no

cronの式(<minute> <hour> <dom> <month> <dow>)かスケジュールのエイリアス(@hourly, @daily, @midnight, @weekly, @monthly, @annually, @yearly)のカンマ区切りリストを設定するか、あるいは自動スナップショットを無効にするためには空にしてください。

snapshots.schedule.stopped

停止したインスタンスのスナップショットを自動で作成するかどうか

Key: snapshots.schedule.stopped
Type:

bool

Default:

false

Live update:

no

スナップショットの自動命名

snapshots.pattern オプションはスナップショット名をフォーマットする Pongo2 テンプレート文字列です。

スナップショット名にタイムスタンプを追加するには、Pongo2 コンテキスト変数 creation_date を使用します。 スナップショット名に使用できない文字を含まないようにテンプレート文字列をフォーマットするようにしてください。 例えば、 snapshots.pattern{{ creation_date|date:'2006-01-02_15-04-05' }} に設定し、作成日時を秒の制度まで落として、スナップショットを命名するようにします。

名前の衝突を防ぐ別の方法はパターン内に %d プレースホルダを使うことです。 最初のスナップショットでは、プレースホルダは 0 に置換されます。 後続のスナップショットでは、既存のスナップショットが考慮され、プレースホルダの位置の最大の数を見つけます。 この数が 1 増加されて新しい名前に使用されます。

揮発性の内部データ

以下の揮発性のキーはインスタンスに固有な内部データを保管するため Incus で現在内部的に使用されています:

volatile.<name>.apply_quota

ディスククォータ

Key: volatile.<name>.apply_quota
Type:

string

ディスククォータはインスタンスの次回起動時に適用されます。

volatile.<name>.ceph_rbd

CephディスクデバイスのRBDデバイスパス

Key: volatile.<name>.ceph_rbd
Type:

string

volatile.<name>.host_name

ホスト上のネットワークデバイス名

Key: volatile.<name>.host_name
Type:

string

volatile.<name>.hwaddr

ネットワークデバイスのMACアドレス

Key: volatile.<name>.hwaddr
Type:

string

ネットワークデバイスのMACアドレスはデバイス自身にhwaddrプロパティが設定されていない場合に使用されます。

volatile.<name>.last_state.created

ネットワーク物理デバイスが作成されたかどうか

Key: volatile.<name>.last_state.created
Type:

string

取りうる値はtrueまたはfalse

volatile.<name>.last_state.hwaddr

ネットワークデバイスの元のMAC

Key: volatile.<name>.last_state.hwaddr
Type:

string

物理デバイスがインスタンスに移動する際に使われた元のMAC

volatile.<name>.last_state.ip_addresses

最後に使用したIPアドレス

Key: volatile.<name>.last_state.ip_addresses
Type:

string

ネットワークデバイスの最後に使用されたIPアドレスのカンマ区切りリスト。

volatile.<name>.last_state.mtu

ネットワークデバイスの元のMTU

Key: volatile.<name>.last_state.mtu
Type:

string

物理デバイスがインスタンスに移動する際に使われた元のMTU

volatile.<name>.last_state.pci.driver

PCIの元のホストドライバー

Key: volatile.<name>.last_state.pci.driver
Type:

string

PCIデバイスの元のホストドライバー。

volatile.<name>.last_state.pci.parent

PCIの親のホストデバイス

Key: volatile.<name>.last_state.pci.parent
Type:

string

PCIデバイスをインスタンスに割り当てる際に使用された親のホストデバイス。

volatile.<name>.last_state.pci.slot.name

PCIの親のスロット名

Key: volatile.<name>.last_state.pci.slot.name
Type:

string

親のホストデバイスのPCIスロット名。

volatile.<name>.last_state.usb.bus

USBバスアドレス

Key: volatile.<name>.last_state.usb.bus
Type:

string

元のUSBバスアドレス。

volatile.<name>.last_state.usb.device

USBデバイス識別子

Key: volatile.<name>.last_state.usb.device
Type:

string

元のUSBデバイス識別子。

volatile.<name>.last_state.vdpa.name

VDPAデバイス名

Key: volatile.<name>.last_state.vdpa.name
Type:

string

VDPAデバイスファイルディスクリプターをインスタンスに移動する際に使用されたVPDAデバイス名。

volatile.<name>.last_state.vf.hwaddr

SR-IOV仮想ファンクションの元のMAC

Key: volatile.<name>.last_state.vf.hwaddr
Type:

string

VF(仮想ファンクション)をインスタンスに移動する際に使用された元のMAC。

volatile.<name>.last_state.vf.id

SR-IOV仮想ファンクションID

Key: volatile.<name>.last_state.vf.id
Type:

string

VF(仮想ファンクション)をインスタンスに移動する際に使用されたID。

volatile.<name>.last_state.vf.parent

SR-IOV親のホストデバイス

Key: volatile.<name>.last_state.vf.parent
Type:

string

VF(仮想ファンクション)をインスタンスに移動する際に使用された親のホストデバイス。

volatile.<name>.last_state.vf.spoofcheck

SR-IOV仮想ファンクションの元のspoolチェック設定

Key: volatile.<name>.last_state.vf.spoofcheck
Type:

string

VF(仮想ファンクション)をインスタンスに移動する際に使用された元のspoolチェック設定。

volatile.<name>.last_state.vf.vlan

SR-IOV仮想ファンクションの元のVLAN

Key: volatile.<name>.last_state.vf.vlan
Type:

string

VF(仮想ファンクション)をインスタンスに移動する際に使用された元のVLAN。

volatile.<name>.mig.uuid

MIGインスタンスUUID

Key: volatile.<name>.mig.uuid
Type:

string

NVIDIA MIGインスタンスUUID。

volatile.<name>.name

インスタンス内部のネットワークインタフェース名

Key: volatile.<name>.name
Type:

string

デバイス自身にnameプロパティがせってされていない場合のインスタンス内部のネットワークインタフェース名。

volatile.<name>.vgpu.uuid

仮想GPUインスタンスUUID

Key: volatile.<name>.vgpu.uuid
Type:

string

NVIDIA仮想GPUインスタンスUUID。

volatile.apply_nvram

インスタンスの次回起動時にVM NVRAMを再生成するかどうか

Key: volatile.apply_nvram
Type:

bool

volatile.apply_template

テンプレートフック

Key: volatile.apply_template
Type:

string

次回起動時に指定された名前のテンプレートが起動されます。

volatile.base_image

ベースイメージのハッシュ値

Key: volatile.base_image
Type:

string

インスタンスの作成に使われたイメージのハッシュ値(インスタンスがイメージから作成されなかった場合は空)

volatile.cloud_init.instance-id

cloud-initに公開されるinstance-id(UUID)

Key: volatile.cloud_init.instance-id
Type:

string

volatile.cluster.group

インスタンスの元のクラスタグループ

Key: volatile.cluster.group
Type:

string

インスタンスが作成時に限定されていた1つまたは複数のクラスタグループ。 これは退避のようなイベントをスケジュールする際にインスタンスを指定した組の中に維持するのに使われます。

volatile.cpu.nodes

インスタンスのNUMAノード

Key: volatile.cpu.nodes
Type:

string

インスタンスに割り当てられたNUMAノード。

volatile.evacuate.origin

退避されたインスタンスの起源

Key: volatile.evacuate.origin
Type:

string

退避前にインスタンスが存在していたクラスタメンバー。

volatile.idmap.base

インスタンスのプライマリidmap範囲内の最初のID

Key: volatile.idmap.base
Type:

integer

volatile.idmap.current

インスタンスで現在使用中のidmap

Key: volatile.idmap.current
Type:

string

volatile.idmap.next

インスタンスの次回起動時に使用するidmap

Key: volatile.idmap.next
Type:

string

volatile.last_state.idmap

シリアライズされたインスタンスのUID/GIDマップ

Key: volatile.last_state.idmap
Type:

string

volatile.last_state.power

前回のホスト停止時点のインスタンスの状態

Key: volatile.last_state.power
Type:

string

volatile.last_state.ready

準備完了とマークされたインスタンス

Key: volatile.last_state.ready
Type:

string

volatile.uuid

インスタンスUUID

Key: volatile.uuid
Type:

string

インスタンスUUIDは全てのサーバーとプロジェクトに対してグローバルにユニークです。

volatile.uuid.generation

インスタンス生成UUID

Key: volatile.uuid.generation
Type:

string

インスタンス生成UUIDはインスタンスの時刻が遡るたびに変更されます。 全てのサーバーとプロジェクトに対してグローバルにユニークです。

volatile.vsock_id

前回起動時点でのインスタンスのvsock ID

Key: volatile.vsock_id
Type:

string

注釈

揮発性のキーはユーザは設定できません。