web-dev-qa-db-ja.com

既存のLXDコンテナーを開くにはどうすればよいですか?

Ubuntu 16.04がインストールされており、xfceデスクトップは価値があります。 LXDをインストールし、イメージとコンテナーを大きな2番目のドライブに配置し、/var/lib/lxd/で構成されたイメージとコンテナーへのシンボリックリンクを設定しました。すべてが期待どおりに機能します。

Ubuntu 16.04を新しいドライブであるMateデスクトップに再インストールしました。 LXDをインストールし、大容量ドライブのイメージとコンテナーフォルダーへのシンボリックリンク(/var/lib/lxd)を作成しました。

Lxc listを使用しているとき、私の画像もコンテナもリストされていません(それらを起動して使用することはできません)。

新しくインストールしたLXDに既存のイメージとコンテナーを使用させるために必要なことについてのポインターはありますか?

5
hatterman

興味のある人にとって、パズルの欠けている部分は、既存のlxdデータベースlxd.dbを再利用しなければならなかったことです。

したがって、新規インストールで既存のLXDコンテナを使用する手順は次のとおりです。

LXDをインストールする

Sudo apt-get install lxd

containersおよびimagesディレクトリを削除します

Sudo rm -rf /var/lib/lxd/containers
Sudo rm -rf /var/lib/lxd/images

既存のcontainersおよびimagesディレクトリへのシンボリックリンクを作成します。

Sudo ln -s /media/sda10/lxd/containers /var/lib/lxd/containers
Sudo ln -s /media/sda10/lxd/images /var/lib/lxd/images

元のインストールパーティションをマウントし、lxd.dbファイルを元のインストールから新しいインストールにコピーします

Sudo cp /mnt/var/lib/lxd/lxd.db /var/lib/lxd/lxd.db

コンテナーをリストし、期待どおりに実行すると、コンテナーが表示されます。

注:複数のパーティションに複数のインストールがあり、Ubuntuの新しいバージョンが利用可能になり次第、カエルを飛ばし、満足するまで古いバージョンを消去しません。それは本当に簡単で、第2の性質になりました。

私はそれが一般的な慣行ではないことを知っていますが、この機会に(もう一度)私のベーコンを救いました。これを行わない人には、lxd.dbファイルのバックアップを作成することをお勧めします。

編集: https://insights.ubuntu.com/2016/04/13/lxd-2-0-remote-hosts-and-container-migration-612/ でさらに読むと、それがまた、リモートLXDホストを非常に使いやすく、ホスト間でコンテナを簡単に移動できます。

この特定の場合、これは私にとっての解決策ではありませんが、コンテナを移行する非常に簡単な方法を示す非常に良い読み物です。

2
hatterman

コメントにはタイプミスが含まれているため、既存のコンテナ(ストレージが利用可能)を新しいDBにインポートするためのいくつかの提案を要約します。

まず、LXDのインスタンス全体をコピーする場合(基本的にすべてのコンテナのストレージと/var/lib/lxdからのDBを取得する)、(おそらく)より簡単な代替手段があります。また、古いインスタンスがまだ実行されており、ネットワークから到達可能な場合、よりネイティブなアプローチは、素晴らしいUbuntu Insightsの リモートホストとコンテナの移行 の章で説明されているように、リモートとして定義することです LXD 2.0:ブログ投稿シリーズ


そのシリーズの別の章 (再び、古いインスタンスがまだ実行されている場合にのみ実行可能)で説明されている1つのアプローチは、既存のコンテナのイメージを使用して作成することです

lxc publish <my-container>@<snapshot> <my-image-name>

次に、それをtarballにエクスポートします

lxc image export <my-image-name> /path/to/directory

結果のtarballは以下でインポートできます。

lxc image import <metadata-tarball> <rootfs-tarball> --alias <my-image-name>

OPがコメントで述べたように、それはかなりの作業です。さらに深刻なのは、何らかの理由で古いインスタンスを実行できない場合に失敗することです。

バージョン2.7以降、LXDはbackup.yamlを使用して、コピーからコンテナーをインポートできる/var/lib/lxd/containers/<my-container>ファイルを各コンテナーのストレージ内に(lxd importに)保存します(参照: LXDバックアップ戦略 およびこれ GitHubの問題 )。 lxd;に注意してください。これはlxc image importとは異なります。

LXDニュースページ に基づいて、コンテナのストレージを/var/lib/lxd/containersディレクトリに移動して実行するだけで、

lxd import <my-container>

ただし、Xenial公式リポジトリは現在LXDのバージョン2.0.9を提供しているため、その最後の部分はテストしていません。

0
Jonathan Y.