Lxcがインストールされた1台のサーバーと、ベースimg /var/lib/lxc/ubuntu_base
として使用されるlxcコンテナがあるとします。簡単にするために、ベースのimgをコピーした後の設定変更を忘れましょう。
一部の人々 新しいコンテナを作成するためにサブボリュームとスナップショットを使用することを提案しますが、cp --reflinkを同じような結果で簡単に実行できます。
それでは、複数のコンテナを管理するための適切な方法(またはより優れた方法)は何ですか?
この方法が最善のようですが、lxc-destroyのようなコマンドは、ディレクトリを削除できないため機能しません。
btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
これとスナップショットの間にパフォーマンスの違いがあるかどうかはわかりません
cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
編集:
Reflinkオプションで見たことの1つは、/proc
と/dev
がマウントされていて変更されないため、他のものが実行されている場合はベースコンテナーを削除できないことです。同じ。しかし、コピーされたすべてのコンテナをシャットダウンすることで問題が解決するようです。
私はUbuntu LTS 14を使用していて、次のコマンドを(初めてでも)実行しただけで、魅力的に機能しました。
lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1
Lxc-cloneで-sを使用すると、バッキングストアがbtrfs(あなたの場合)の場合にスナップショットが作成されます。
新しいクローン/スナップショットを確認する
lxc-ls -f
btrfs subvolume list /var/lib/lxc
お役に立てば幸いです。
それがあなたのベースイメージの大きさに依存すると思います。私はおそらくlxc-create新しいコンテナを使用し、Salt/Puppetなどを使用してコンテナをプロビジョニングしますlxc-clone比較的大きなコンテナ(たとえば、多くの開発コンテナ)インストールおよび構成されたツール)。
lxc-cloneはソースと同じバッキングストアを使用することに注意してください。したがって、サブボリュームを使用するには、「-B btrfs」を使用してコンテナを作成する必要があります。例えば:
lxc-create -B btrfs -n mycontainer -t ubuntu
それからそれをクローンします:
lxc-clone -s mycontainer mynewcontainer
コンテナーを格納するためにzfsを使用している場合は、lxc-createに追加の--zfsroot
オプションがあるため、デフォルトの「タンク」以外のzpoolを選択できます。例えば:
lxc-create -B zfs --zfsroot=data/lxc
共有してお楽しみください!
lxcにbtrfsサブボリュームを使用する場合は、user_subvol_rm_allowed
にオプション/etc/fstab
を追加する必要があります。 1つのfstabファイルから抽出された例:
UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0
このオプションを使用すると、通常のユーザーのみがrootでなくてもサブボリュームを削除できます。この機能は、スナップショットがbtrfsサブボリュームに入るときにlxcによって使用されます