Ubuntu 如何备份/移动LXC容器?

Ubuntu 如何备份/移动LXC容器?,ubuntu,backup,lxc,Ubuntu,Backup,Lxc,我想备份lxc容器。我们的服务器带有12.04 LTS ubuntu服务器,我在其中安装了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/)复制到pendriv

我想备份lxc容器。我们的服务器带有
12.04 LTS ubuntu服务器
,我在其中安装了
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容器备份的想法?

编辑:2017年11月 要将
lxc
容器快速备份到没有
btrfs
文件系统的
remote
主机上,我需要将带有
sshfs
cd
remote
主机上的文件系统装载到装载中。停止容器并创建它的
tar.xz
存档


编辑:2016年3月 现在,我在
btrfs
文件系统上运行我的
lxc
容器,以便对运行中的容器进行
快照
btrfs子快照
检测到
proc run sys
是虚拟文件系统&不包括在快照中


我用来备份LXC容器。与备份普通计算机不同,您需要在备份中包含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行

通过running测试-也可以在Debian上使用

-您还可以对本地文件执行非常简单的未加密备份(在
~/.duply/mybackup/conf
中设置
TARGET='file://[relative |/absolute]/local/path'

要对备份进行签名,请参阅(无密码签名密钥,而不是以明文形式存储密码)

为cron作业在Duply
conf
文件中设置
GPG\u TEST='disabled'


如果您在
conf
donot中存储任何明文密码,请在还原时禁用
GPG\u测试
,以便缓存您的密码。

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

lxc-clone -o NAMEOFCONTAINER -n NAMEOFCONTAINER -P BACKUPDIR
恢复它就像将备份复制或移回/var/lib/lxc一样简单 您还可以对其加焦油以节省空间。

编辑:2016年3月29日 如果你无意中发现了这篇文章,我的答案实际上是关于在系统之间移动LXC容器,因为这似乎是要问的问题

如果您想备份您的LXC容器,请参阅@Stuart的答案以获得一些很好的选项

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

  • 关闭容器

    # lxc-stop -n $NAME
    
    # rsync -avh container_fs.tar.gz user@newserver:/var/lib/lxc/
    
  • 存档容器rootfs&config

    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -czvf container_fs.tar.gz ./*
    
    数字所有者标志非常重要!如果没有它,容器可能无法启动,因为uid/GID在提取的文件系统中被损坏。 tar创建存档时,会保留用户/组所有权信息。默认情况下,提取时,tar尝试使用运行tar的系统上的id解析存档用户/组所有权名称。这是为了确保在新系统上解决用户所有权问题,以防系统之间的UID数值不同

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

  • 将文件复制到新服务器上

    # lxc-stop -n $NAME
    
    # 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被忽略


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

我同意Brad 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

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

如果对它进行tar,并在系统之间移动它,则在提取它时可能无法工作,除非使用--numeric owner标志,我只想补充一点,您需要将rootfs(tar-xzvf)提取为root(或者至少使用sudo)在我的系统上,容器存储在:
cd/var/lib/lxd/containers/$NAME/
是的,lxd将它存储在这里。这个过程主要适用于LXC,但它应该对LXD进行一些小的调整。使用LXD,您实际上可以使用
lxc copy
lxc publish
来备份您的集装箱。这个答案应该针对现代LXD进行更新,在现代LXD中,
lxc move
命令可用答案应该包括在提取tar mv container_fs.tar.gz$NAME之前先将容器移动到lxc/$NAME。或者,您可以使用前端到duply,
duplicity
来执行很多操作。我有一个
pre