web-dev-qa-db-ja.com

btrfsでLXCコンテナーを処理する適切な方法

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
  • reflinkを使用したcp

これとスナップショットの間にパフォーマンスの違いがあるかどうかはわかりません

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • または私が知らない、これを行う他のより良い方法はありますか?.

編集:

Reflinkオプションで見たことの1つは、/proc/devがマウントされていて変更されないため、他のものが実行されている場合はベースコンテナーを削除できないことです。同じ。しかし、コピーされたすべてのコンテナをシャットダウンすることで問題が解決するようです。

11
zidarsk8

私は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

お役に立てば幸いです。

2
dapithor

それがあなたのベースイメージの大きさに依存すると思います。私はおそらく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

共有してお楽しみください!

3
Lester Cheung

lxcにbtrfsサブボリュームを使用する場合は、user_subvol_rm_allowedにオプション/etc/fstabを追加する必要があります。 1つのfstabファイルから抽出された例:

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

このオプションを使用すると、通常のユーザーのみがrootでなくてもサブボリュームを削除できます。この機能は、スナップショットがbtrfsサブボリュームに入るときにlxcによって使用されます

3
Yonsy Solis