如何备份/移动LXC容器?

我想采取lxc容器备份。 我们有12.04 LTS ubuntu server ,我已经安装了LXC - 1.0.0.alpha2 。 我想更新我们的Ubuntu服务器到14.04 LTS。 所以我想要做的是备份LXC容器 – >将操作系统升级到14.04 – >恢复LXC容器。 与早期版本(0.7.5我猜)有lxc备份和lxc恢复,但与1.0.0.alpha2我们没有备份和恢复操作。 我怎样才能有lxc容器备份。 我花了超过3个小时的复制容器文件夹(/ var / lib / lxc / my_container /)到pendrive并粘贴到另一个12.04 LTS服务器,但它不能正常工作的错误是,

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

那么我怎么能期望它能在升级的14.04服务器操作系统上工作。

任何想法有lxc-容器备份?

编辑:2016年3月29日

如果你偶然发现这个帖子,我的答案就是在系统之间移动 LXC容器,因为这似乎是被问到的问题。

如果您想要备份您的LXC容器,请参阅@ Stuart的答案,提供一些不错的选择。

在主机系统之间移动LXC容器

这就是我如何在系统之间迁移LXC容器。 我已经成功地将基于Ubuntu的12.04容器移动到14.04主机,他们工作得很好。

  • 关闭容器

     # lxc-stop -n $NAME 
  • 归档容器rootfs&config

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

    --numeric-owner标志是非常重要的! 没有它,容器可能无法启动,因为uid / gid在提取的文件系统中被弄坏了。 当tar创建一个存档时,它保留用户/组的所有权信息。 默认情况下,在解压缩时,tar会尝试使用运行tar的系统上的id来解析归档用户/组所有权名称。 这是为了确保在新系统上解决用户所有权问题,以防系统中的UID数值不同。

    这对于LXC文件系统来说是不好的,因为数字uid / gid所有权是为了保留整个文件系统的。 如果它解决了不同的价值,就会发生不好的事情。

  • 将文件复制到您的新服务器

     # 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

我忽略了这个错误,并没有任何我管理的容器的问题。 如果您还有其他问题,请将错误消息添加到原始帖子中,我将详细说明。

编辑:2017年11月

要快速将lxc容器备份到没有btrfs文件系统的remote主机,我使用sshfscdremote主机将文件系统挂载到挂载中。 停止容器并创建它的tar.xz文件。


编辑:2016年3月

我现在在btrfs文件系统上运行我的lxc容器,使运行容器的snapshot变得更简单。 btrfs sub snap检测到proc run sys是虚拟文件系统并且不包括它们在快照中。


我用Duply来备份LXC容器。 与备份普通机器不同,您希望在备份中包含/dev从LXC容器。

 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进行简单备份 – 您也可以对本地文件(在~/.duply/mybackup/conf设置TARGET='file://[relative|/absolute]/local/path'进行非简单的未加密备份。

要签名Duply备份,请参阅自动环境中的GnuPG (无密码签名密钥,而不是以明文形式存储密码)。

在Cron作业的Duply conf文件中设置GPG_TEST='disabled'

如果您在conf 存储任何明文密码,请不要在还原时禁用GPG_TEST – 因此gpg-agent缓存您的密码。

我发现备份容器最简单的方法就是运行lxc-clone。

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

恢复它就像复制或移动备份到/ var / lib / lxc一样简单您也可以将其tar命令节省空间。

我同意布拉德Jasperson。 我这样做:

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

如果您的容器出现问题,并且停机时间很长,则可以运行该副本:

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

并停止:

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

您可以在适当的时间将其复制回原处。 祝你好运!