web-dev-qa-db-ja.com

LXCコンテナをバックアップ/移動するにはどうすればよいですか?

Lxcコンテナのバックアップを取りたいのですが。 12.04 LTS ubuntu serverを備えたサーバーがあり、LXC - 1.0.0.alpha2をインストールしています。私のubuntuサーバーを14.04 LTSに更新したいと思いました。だから私がやりたいのはLXCコンテナーをバックアップする-> OSを14.04にアップグレードする-> LXCコンテナーを復元することだ。以前のバージョン(おそらく0.7.5)ではlxc-backupとlxc-restoreがありましたが、1.0.0.alpha2ではバックアップと復元の操作はありません。 lxcコンテナをバックアップするにはどうすればよいですか。コンテナーフォルダー(/ var/lib/lxc/my_container /)をペンドライブにコピーし、別の12.04 LTSサーバーに貼り付けて3時間以上費やしましたが、機能していません。エラーが発生しています。

#Sudo lxc-start -n my_container
lxc-start: invalid sequence number 1, expected 4.
lxc-start: failed to spwan "my_container"

次に、アップグレードされた14.04サーバーOSで動作することをどのように期待できますか。

Lxc-containerバックアップを作成するアイデアはありますか?

13
niren

編集:2016年3月29日

あなたがこの投稿を偶然見つけた場合、私の答えは本当にmovingシステム間のLXCコンテナーについてです。それは質問されているように思えたからです。

backup LXCコンテナにしたい場合は、@ Stuartの回答でいくつかの優れたオプションを確認してください。

ホストシステム間でのLXCコンテナーの移動

これは、システム間でLXCコンテナを移行する方法です。私はubuntuベースの12.04コンテナーを14.04ホストに正常に移動しました。

  • コンテナをシャットダウン

    # lxc-stop -n $NAME
    
  • アーカイブコンテナーrootfs&設定

    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -czvf container_fs.tar.gz ./*
    

    --numeric-ownerフラグは非常に重要です。これがないと、抽出されたファイルシステムでuid/gidsが破損するため、コンテナーが起動しない可能性があります。tarがアーカイブを作成すると、ユーザー/グループの所有権情報が保持されます。デフォルトでは、tarは解凍時に、tarを実行しているシステムのIDでアーカイブユーザー/グループの所有権名を解決しようとします。これは、UID数値がシステム間で異なる場合に、ユーザーの所有権が新しいシステムで解決されるようにすることを目的としています。

    数値のuid/gid所有権はファイルシステム全体で保持されることを意図しているため、これはLXCファイルシステムにとっては悪いことです。別の値に解決されると、悪いことが起こります。

  • ファイルを新しいサーバーにコピーします

    # rsync -avh container_fs.tar.gz user@newserver:/var/lib/lxc/
    
  • rootfsを抽出する

    # mkdir /var/lib/lxc/$NAME/
    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -xzvf container_fs.tar.gz .
    

オーバーレイバッキングコンテナーを使用している場合は、この新しいコンテナーの基になっているコンテナーも移行する必要があります。最後に、スキップされたソケットファイルに関するいくつかの警告が表示される場合があります。

tar: /var/lib/lxc/$NAME/rootfs/dev/log: socket ignored

私はこのエラーを無視し、管理しているどのコンテナにも問題がありませんでした。さらに問題がある場合は、元の投稿にエラーメッセージを追加してください。詳しく説明します。

37
BobTuckerman

編集:2017年11月

lxcコンテナをremoteファイルシステムなしでbtrfsホストにすばやくバックアップするには、remoteホストからファイルシステムをsshfs&でマウントしますcdをマウントに入れます。コンテナを停止して、コンテナのtar.xzアーカイブを作成します。


編集:2016年3月

lxcコンテナーをbtrfsファイルシステムで実行して、実行中のコンテナーのsnapshotを簡単に取得できるようにします。 btrfs sub snapは、proc run sysが仮想ファイルシステムであることを検出し、スナップショットに含めません。


Duply を使用してLXCコンテナーをバックアップします。通常のマシンのバックアップとは異なり、[〜#〜] do [〜#〜]は、LXCコンテナの/devをバックアップ。

apt-get install duply
duply mybackup create

~/.duply/mybackup/excludeでは、次を使用しました:

- /cdrom
- /dev
- /lost+found
- /media
- /mnt
- /proc
- /run
- /sys
- /tmp
- /var/backup/restore/*
- /var/backup/tmp/*
- /var/lib/lxc/*/rootfs/lost+found
- /var/lib/lxc/*/rootfs/media/*
- /var/lib/lxc/*/rootfs/mnt/*
- /var/lib/lxc/*/rootfs/proc/*
- /var/lib/lxc/*/rootfs/run/*
- /var/lib/lxc/*/rootfs/sys/*
- /var/lib/lxc/*/rootfs/tmp/*
- /var/lib/lxcfs/*

上記はマシン全体とすべてのLXCコンテナをバックアップします。

コンテナをバックアップするには、~/.duply/mybackup/confを編集してSOURCE='/'SOURCE='/var/lib/lxc'に変更し、~/.duply/mybackup/excludeからlxc以外の行を削除します

Alpine Linux LXCコンテナ を実行してテスト-Debianでも動作します。

Duplyを使用した単純なバックアップ -非常に単純な暗号化されていないバックアップをローカルファイルに実行することもできます(TARGET='file://[relative|/absolute]/local/path'~/.duply/mybackup/confを設定)

Duply バックアップに署名するには、 GnuPG in Automated Environments を参照してください(パスワードをプレーンテキストで保存する代わりに、パスワードなしの署名キー)。

CronジョブのDuply confファイルにGPG_TEST='disabled'を設定します。

行う場合notプレーンテキストのパスワードをconfに保存しますnotrestoresGPG_TESTを無効にする-そう gpg-agent キャッシュパスワード。

11
Stuart Cardall

私はブラッド・ジャスパーンに同意します。私はこのようにします:

lxc-clone -KMP /path/to/backup name name

コンテナーに問題が発生し、ダウンタイムのコストが大きい場合は、コピーを実行できます。

lxc-start -n name -P /path/to/backup

そして停止:

lxc-stop -n name -P /path/to/backup

後で適切なタイミングでコピーして戻すことができます。幸運を!

2
Alek

コンテナーをバックアップする最も簡単な方法は、lxc-cloneを実行することです。

lxc-clone -o NAMEOFCONTAINER -n NAMEOFCONTAINER -P BACKUPDIR

バックアップを/ var/lib/lxcにコピーまたは移動するのと同じくらい簡単に復元できます。スペースを節約するためにtarすることもできます。

1
Brad Jasperson