インスタンスをバックアップするには

インスタンスをバックアップするにはいくつかの方法があります:

どの方法を選ぶかはあなたのユースケースとお使いのストレージドライバーによって異なります。

一般に、スナップショットは高速で(ストレージドライバーによりますが)空間効率が良いですが、instanceと同じストレージプールに保存されますので信頼性はあまり高くありません。 エクスポートファイルは別のディスク上に保存できますのでより信頼性が高いです。 これらは別のストレージプールにinstanceをリストアするのに使用できます。 ネットワークで接続された別の Incus サーバーがある場合、定期的にinstanceをこの別のサーバーにコピーするのも高い信頼性が得られます。そしてこの方法はinstanceのスナップショットをバックアップするためにも使えます。

注釈

カスタムストレージボリュームがインスタンスにアタッチされているかもしれませんが、それらはインスタンスの一部ではありません。 ですので、インスタンスをバックアップする際カスタムストレージボリュームは保存されません。 ストレージボリュームのデータは別途バックアップする必要があります。 手順は カスタムストレージボリュームをバックアップするには を参照してください。

インスタンスのバックアップにスナップショットを使用する

特定の日時のインスタンスをスナップショットを作成することで保存できます。スナップショットを使えばインスタンスを以前の状態に簡単に復元できます。

インスタンススナップショットはインスタンスのボリューム自身と同じストレージプールに保存されます。

ほとんどのストレージドライバーはスナップショットの最適化された作成をサポートします(機能比較参照)。 これらのドライバーではスナップショットの作成は高速で空間効率も良いです。 dir ドライバーでは、スナップショットの機能は利用できますが、あまり効率がよくありません。 lvm ドライバーでは、スナップショットの作成は高速ですが、スナップショットのリストアが効率的なのは thin-pool モードを使っているときだけです。

スナップショットを作成する

インスタンスのスナップショットを作成するには以下のコマンドを使います:

incus snapshot create <instance_name> [<snapshot name>]

既存のスナップショットを置き換えるには、スナップショット名とともに --reuse フラグを追加します。

デフォルトでは、 snapshots.expiry 設定オプションが設定されていない限り、スナップショットは永遠に保存されます。 全般的な期限が設定されていてもスナップショットを維持するには、 --no-expiry フラグを使用してください。

仮想マシンでは、 --stateful フラグを指定するとインスタンスボリュームに含まれるデータだけでなく、インスタンスの稼働状態も含めることができます。 CRIU の制限のためコンテナではこの機能は完全にはサポートされていないことに注意してください。

スナップショットを表示、編集、削除する

インスタンスのスナップショットを表示するには以下のコマンドを使います:

incus info <instance_name>

スナップショットを <instance_name>/<snapshot_name> で参照することで、インスタンスの場合と同様にスナップショットを表示または変更できます。

スナップショットの設定を表示するには、以下のコマンドを使います:

incus config show <instance_name>/<snapshot_name>

スナップショットの有効期限を変更するには、以下のコマンドを使います:

incus config edit <instance_name>/<snapshot_name>

注釈

一般に、スナップショットはインスタンスの状態を保存しているため、編集できません。 唯一の例外が有効期限です。 他の設定の変更は黙って無視されます。

スナップショットを削除するには、以下のコマンドを使います:

incus snapshot delete <instance_name> <snapshot_name>

インスタンスのスナップショット作成をスケジュールする

指定した時刻(最大で 1 分ごと)に自動的にスナップショットを作成するようにインスタンスを設定できます。 そのためには、 snapshots.schedule インスタンスオプションを設定してください。

たとえば、日次のスナップショットを設定するには、以下のコマンドを使います:

incus config set <instance_name> snapshots.schedule @daily

毎日 AM 6 時にスナップショットを作成するよう設定するには、以下のコマンドを使います:

incus config set <instance_name> snapshots.schedule "0 6 * * *"

定期的にスナップショットをスケジュールする際、自動破棄(snapshots.expiry)とスナップショットの命名規則(snapshots.pattern)の設定も検討してください。 また、稼働していないインスタンスのスナップショットを作成するかどうかの設定(snapshots.schedule.stopped)もすると良いでしょう。

インスタンスのスナップショットをリストアする

インスタンスを任意のスナップショットの状態に復元できます。

そのためには、以下のコマンドを使います:

incus snapshot restore <instance_name> <snapshot_name>

スナップショットがステートフル(インスタンスの稼働状態の情報を含むことを意味します)の場合、状態をリストアするために --stateful を追加できます。

インスタンスのバックアップにエクスポートファイルを使用する

インスタンスの完全な内容をスタンドアロンのファイルにエクスポートし、任意の場所に保存できます。 信頼度を最大化するため、失われたり壊れたりしないように、バックアップファイルは別のファイルシステムに保存してください。

インスタンスをエクスポートする

以下のコマンドを使ってインスタンスを圧縮ファイル(たとえば、/path/to/my-instance.tgz)にエクスポートします:

incus export <instance_name> [<file_path>]

ファイルパスを指定しない場合、エクスポートファイルは作業ディレクトリーに <instance_name>.<extension> (たとえば、my-container.tar.gz)という名前で保存されます。

警告

出力ファイル(<instance_name>.<extension> または指定した名前)がすでに存在する場合、コマンドは警告なしで既存のファイルを上書きします。

コマンドに以下のフラグを追加できます:

--compression

デフォルトでは、出力ファイルは gzip 圧縮を使用します。 別の圧縮アルゴリズム(たとえば、bzip2)を指定したり、--compression=none で圧縮しないようにできます。

--optimized-storage

ストレージプールが btrfszfs ドライバーを使用している場合、 --optimized-storage フラグを指定すると個別のファイルのアーカイブではなくドライバー固有のバイナリ形式でデータを保存します。 この場合、エスクポートファイルは同じストレージドライバーを使うプールでのみ使用できます。

最適化されたモードでボリュームをエクスポートするほうが個別のファイルをエクスポートするより通常は高速です。 スナップショットはメインボリュームからの差分としてエクスポートされるため、サイズが小さくなりアクセスが容易になります。

--instance-only

デフォルトでは、エクスポートファイルはインスタンスのすべてのスナップショットを含みます。 このフラグを追加すると、スナップショットを除いたインスタンスのみをエクスポートします。

エクスポートファイルからインスタンスをリストアする

エクスポートファイル(たとえば、 /path/to/my-backup.tgz)を新しいインスタンスとしてインポートできます。 そのためには、以下のコマンドを使用します:

incus import <file_path> [<instance_name>]

インスタンス名を指定しない場合、新しいインスタンスの名前はエクスポートされたインスタンスの元の名前になります。 その名前のインスタンスが指定したストレージブールにすでに(あるいはまだ)存在する場合、コマンドはエラーを返します。 その場合、バックアップをインポートする前に既存のインスタンスを削除するか、あるいはインポートの際に別のインスタンス名を指定してください。

インスタンスをバックアップサーバーにコピーする

インスタンスをバックアップするためにセカンダリバックアップサーバーにコピーできます。

手順は サーバー間で既存の Incus インスタンスを移動するには を参照してください。