web-dev-qa-db-ja.com

コンテナ/スナップショットを別のドライブに移動するLXD

LXDのデフォルトパスは/var/lib/lxdであるため、コンテナは/var/lib/lxd/containersにあり、スナップショットは/var/lib/lxd/snapshotsに配置されます。

/ var /パーティションがいっぱいになっているため、コンテナとスナップショット用に別のパーティションを使用する予定です。

私の現在のオプションは次のとおりです。

  • (他のドライブの)新しいディレクトリへのシンボリックリンクを作成します
  • 新しいディレクトリを現在のディレクトリにバインド(マウント)します
  • 他のドライブのディレクトリを指すlxd設定(存在する場合)を変更する

どの方法が簡単か、またこれを簡単に達成する他の方法があるかどうかはわかりません。

私は、防具、コンテナの許可に問題があるか、lxd/lxcで問題が発生することを心配しています。

それらを移動する正しい(または最良の)方法はどれでしょうか?

(2017年4月)更新******************

LXD 2.9+は複数のストレージプールをサポートしています。

3
lepe

LXDの大きな問題は、(現在)1つのストレージプールのみをサポートしているように見えることです。特に、あるディスクボリュームでコンテナの一部を実行し、別のディスクボリュームで一部を実行する場合、これはやや問題になります。たとえば、SSDボリュームにいくつかの「高速」コンテナと、HDDボリュームにいくつかの「低速」コンテナがあるとします。

コンテナを単一のボリュームでのみ実行したい場合、ソリューションは簡単です:

  • コンテナを止める
  • lXDの停止(service lxd stop)
  • / var/lib/lxdディレクトリ全体を新しいストレージプールに移動します
  • 新しいストレージプールへのシンボリックリンクを作成します
  • lXDの開始(service lxd start)
  • 終わった

たとえば、lxdという名前のサブディレクトリの/ mnt/largepoolの下に新しいストレージをマウントしている場合、次のようなリンクを作成します:ln -s /mnt/largepool/lxd /var/lib/lxd

これにより、コンテナを新しいストレージボリュームに配置できます。

ストレージバックエンドとしてBTRFSまたはZFSを使用している場合、最初に新しいストレージに必要なサブボリュームを作成し、コンテナーが独自のサブボリュームに配置されるようにしたい場合があることに注意してください。たとえば、btrfsがあり、c1およびc2という名前のコンテナがあり、ディレクトリ/ mnt/largepool/lxd/containersがすでに配置されている場合、ファイルを実際に移動する前に、サブボリュームを作成します:btrfs su create /mnt/largepool/lxd/containers/c1 btrfs su create /mnt/largepool/lxd/containers/c2

これにより、後でコンテナのスナップショットを簡単に作成できます。

この情報がお役に立てば幸いです。

3
Alvils Berzins

LXDはsqlite dbに基づいているため、プールの場所を変更するには、dbを変更するだけです。

sqlite3クライアントがない場合はインストールします

echo "UPDATE config SET value = 'new_pool_lxd' WHERE\key = 'storage.zfs_pool_name';" | sqlite3 / var/lib/lxd/lxd.db

デフォルトの場所にあるlxd dbを想定

その後、確認してください

echo "SELECT * FROM config;" | sqlite3 /var/lib/lxd/lxd.db

1 | storage.zfs_pool_name | new_pool_lxd

お役に立てれば

2
Alex Barchiesi