LXD の便利な使い方:プロファイル・ストレージ・スナップショット

よるほろぐ編集部

· 約 16 分

本記事は LXD 実践ガイドの第2回です。前提として、LXD と LXC の違いと基本コマンドで、LXD の位置づけとコンテナの起動・停止・削除を確認してから進めてください。

今回はプロファイルによる共通設定の共有、インスタンス外に保持できるカスタムストレージボリューム、スナップショットと自動バックアップ、lxc file でのファイル操作、ネットワークの選択肢、そして nesting までを扱います。すべてのコマンドは Canonical LXD 公式ドキュメントで確認した構文に沿っています。

なお、2026年6月時点の Canonical LXD では lxc file mount は内部的に sshfs を使用します。snap 版 LXD には sshfs が同梱されているため追加インストールは不要ですが、Debian パッケージ版の LXD を使う場合は apt install sshfs が必要です。

プロファイルで共通設定を使い回す

LXD ではインスタンスごとに options や devices を設定できますが、同じような設定を何度も書くのは面倒です。そこで役立つのがプロファイルです。プロファイルは instance options と devices のセットで、複数のインスタンスにまとめて適用できます。

プロファイルを指定せずに lxc launch すると、default プロファイルが自動的に適用されます。default にはネットワークインターフェース(eth0, network=lxdbr0)と root disk(path=/, pool=default)が定義されており、普通にコンテナを立てればこれで通信とストレージが整います。default は改名・削除ができないので、独自の設定は別のプロファイルとして作るのが基本です。

まず既存のプロファイルを確認してみましょう。

lxc profile list
lxc profile show default

自分専用のプロファイルを作るには lxc profile create を使います。

lxc profile create web
lxc profile edit web

edit はエディタで YAML を編集できます。たとえば limits の設定をしたい場合は、config 部分に次のように書きます。

config:
  limits.cpu: "2"
  limits.memory: 2GiB
description: Web server profile
devices: {}
name: web

個別のキー値だけ変更したいなら lxc profile set が便利です。

lxc profile set web limits.cpu=2

devices を追加するときは lxc profile device add を使います。

lxc profile device add web data disk pool=default source=my-data path=/data

プロファイルをインスタンスに適用するには lxc profile add、外すには lxc profile remove です。起動時に適用する場合は --profile を複数指定できます。

lxc launch ubuntu:24.04 c1 --profile default --profile web
lxc profile add c1 web
lxc profile remove c1 web

プロファイルは複数適用できますが、適用順序が重要です。後から指定したプロファイルほど優先され、インスタンス固有の設定はプロファイルよりもさらに優先されます。プロファイルを編集すると、そのプロファイルを使っている全インスタンスに自動で反映される点も大きな利便性です。共通設定を一元管理したい場面では積極的に使うと良いでしょう。

カスタムストレージボリューム

インスタンスを作成すると、LXD は自動的に root ディスク用のボリュームを作ります。しかしインスタンスを削除すれば中身も消えてしまうため、データだけを長く保持したい場合はカスタムストレージボリュームを別途作るのが定番です。カスタムボリュームはインスタンスとは独立して存在し、バックアップも別途行えます。

デフォルトでは filesystem タイプで作成されます。使い方は lxc storage volume list でプールのボリュームを一覧表示するところから始まります。

lxc storage volume list default
lxc storage volume show default custom/my-data

新しいボリュームを作ります。

lxc storage volume create default my-data
lxc storage volume create default my-block --type=block

filesystem ボリュームをインスタンスにアタッチする場合は、マウントポイントを指定します。

lxc storage volume attach default my-data c1 /data

device 名を明示したいときは次のようにします。

lxc storage volume attach default my-data c1 data-disk /data

これは lxc config device add と等価です。

lxc config device add c1 data-disk disk pool=default source=my-data path=/data

block タイプは VM にしかアタッチできず、マウントポイントは不要です。ただし security.shared が無効な場合、同時にアタッチできるインスタンスは1つだけです。filesystem ボリュームはコンテナ同士で共有できますが、VM 実行中にはアタッチできないので注意が必要です。

サイズやスナップショットの有効期限は lxc storage volume set で変更します。

lxc storage volume set default my-data size=1GiB
lxc storage volume set default my-data snapshots.expiry=1M

スナップショットと自動スケジュール

LXD のスナップショットは同じストレージプール内に保存され、ドライバによっては高速かつ省スペースに動作します。しかしプール自体に障害があればスナップショットも失われるため、別ディスクに保存できる lxc export も覚えておくと安心です。

手動でスナップショットを取るには lxc snapshot を使います。

lxc snapshot c1 before-update

同名で上書きしたい場合は --reuse、有効期限を無くして永続化したい場合は --no-expiry を指定します。VM の場合は --stateful でメモリ状態も保存できます。

lxc snapshot c1 before-update --reuse
lxc snapshot c1 baseline --no-expiry

スナップショットの一覧は lxc info で確認できます。

lxc info c1

復元は lxc restore、削除は lxc delete です。

lxc restore c1 before-update
lxc delete c1/baseline

バックアップファイルとしてエクスポート・インポートするには次のコマンドを使います。--optimized-storage は btrfs/zfs で効果を発揮します。

lxc export c1 c1-backup.tar.gz --compression=gzip --instance-only
lxc import c1-backup.tar.gz c1-restored --storage=default

日常運用では自動スナップショットが便利です。インスタンス options で snapshots.schedule を設定します。

lxc config set c1 snapshots.schedule @daily
lxc config set c1 snapshots.schedule "0 6 * * *"

その他によく使う設定は次のとおりです。

lxc config set c1 snapshots.expiry 1M
lxc config set c1 snapshots.schedule.stopped true

@daily などの簡易指定も使えますが、cron 書式を使えば細かい時刻を指定できます。snapshots.schedule.stopped を true にすると、停止中のインスタンスも対象になります。snapshots.pattern でスナップショットの命名パターンも設定できますが、書式の詳細は公式ドキュメントの instance options リファレンスを参照してください。

重要な注意点として、カスタムストレージボリュームはインスタンスのバックアップに含まれません。インスタンスのスナップショットや export だけ頼りにするとデータボリュームが失われるため、カスタムボリュームは別途バックアップする運用を入れてください。

lxc file でファイルを受け渡す

LXD クライアントはインスタンス内のファイルをネットワーク経由せずに操作できます。コンテナでは常に動作し、VM では lxd-agent が動作している必要があります。SSH を設定しなくても設定ファイルの出し入れやログの確認ができるのは大きな助けです。

たとえば、インスタンス内のファイルを直接編集するには lxc file edit を使います。既存ファイルのみ編集できます。

lxc file edit c1/etc/nginx/nginx.conf

ローカルに取り出すには lxc file pull、入れるには lxc file push です。-r はディレクトリ、--uid/--gid/--mode は権限を指定できます。

lxc file pull c1/var/log/syslog - | less
lxc file pull -r c1/var/www ./backup
lxc file push ./nginx.conf c1/etc/nginx/nginx.conf --mode=0644
lxc file delete c1/tmp/workfile

ファイルシステムをマウントして操作したい場合は lxc file mount が使えます。内部的に sshfs を使用するため、snap 版 LXD を使う場合は fuse-support インターフェースが接続されている必要があります(Debian パッケージ版では sshfs を apt で別途インストール)。

lxc file mount c1/var/log ./c1-logs

また lxc file mount <instance> --listen 形式で SSH SFTP リスナーを立てることもできます。--auth-user でユーザー名を指定できます(省略するとランダム生成されます)。パスワードは自動的に発行されます。

lxc file mount c1 --listen 127.0.0.1:2022

シェルに入って catscp するより手軽な場面が多いので、覚えておくと作業が速くなります。

ネットワーク: bridge と macvlan の使い分け

lxd init でデフォルト作成される lxdbr0 は NAT 付きの仮想ブリッジです。ホストとインスタンス間の通信も可能で、普段の開発環境には最も向いています。

独自の bridge を作るには次のコマンドを使います。

lxc network create mybr0 --type=bridge

インスタンスを既存の managed network に接続するには device 追加時に network= を指定します。

lxc config device add c1 eth1 nic network=mybr0

unmanaged bridge を使いたい場合は nictype=bridged parent=<bridge> とします。

一方、macvlan はホストの物理 NIC を親にして、別 MAC アドレスのサブインターフェースを作る方式です。インスタンスに独立した LAN アドレスを割り当てたい場合に便利ですが、ホストとインスタンス間の直接通信はできません。ゲートウェイまでは両方とも通信可能ですが、ホストから直接インスタンスにアクセスする必要がある場合は bridge を選ぶ必要があります。

lxc network create mymac --type=macvlan parent=eth0
lxc config device add c1 eth1 nic nictype=macvlan parent=eth0

bridge のセキュリティとして、security.ipv4_filteringsecurity.ipv6_filteringsecurity.mac_filtering などのオプションでスプーフィング防止ができます。同一 bridge 内に信頼できないインスタンスを置く場合は有効に検討してください。

nesting: コンテナ内でコンテナを動かす

security.nesting=true を設定すると、LXD インスタンス内でさらにコンテナランタイムを動かせるようになります。コンテナ内で Docker デーモンを動かしたり、LXD を入れ子にして起動したりでき、CI でコンテナイメージをビルドするような場面で特に役立ちます。デフォルトは false で、ライブアップデートが可能です。

lxc config set c1 security.nesting=true

ただしホスト側のセキュリティ設定(apparmor や cgroup の扱い)によっては追加の調整が必要になることがあるため、うまく動かない場合は公式ドキュメントの該当節を参照してください。

まとめ

LXD の日常運用で差がつく機能をいくつか紹介しました。プロファイルで設定を共通化し、カスタムボリュームでデータをインスタンス外に逃し、スナップショットで実行中の状態を即座に保護する。lxc file で SSH なしにファイルを扱い、必要に応じて bridge か macvlan を選び、nesting でさらに柔軟な環境を作る。これらを組み合わせれば、LXD は単なる「軽い VM」以上の運用基盤として使えるようになります。

まずはこれらの機能を手元の環境で試してみて、自分の運用に合った組み合わせを見つけてみてください。

日常運用の基礎を確認できたら、次はGPU・USB・GUI・Audio などのデバイス連携に進み、必要なホストリソースだけをコンテナへ渡す方法を学びましょう。

出典

共有: X でシェア はてブ

編集・検証

よるほろぐ編集部

Linux・コンテナ・CLI・開発環境の実践ガイドを編集・検証します。

編集方針を読む