繁体   English   中英

如何备份/移动LXC容器?

[英]How do I Backup / Move LXC containers?

我想采取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容器。 我花了超过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-container备份吗?

编辑:2016年3月29日

如果您偶然发现这篇文章,我的答案实际上是关于在系统之间移动 LXC容器,因为这似乎是被问到的问题。

如果您想备份 LXC容器,请参阅@Stuart的答案,了解一些很棒的选择。

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

这就是我在系统之间迁移LXC容器的方法。 我已成功将基于12.04容器的ubuntu移动到14.04主机,并且它们运行良好。

  • 关闭容器

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

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

    --numeric-owner标志非常重要! 没有它,容器可能无法启动,因为uid / gids在提取的文件系统中受到损坏。 当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迅速容器到remote主机没有btrfs文件系统挂载我从一个文件系统remote与主机sshfscd插入安装。 停止容器并创建它的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 (无密码签名密钥,而不是以明文形式存储密码)。

在Duply conf文件中为cron作业设置GPG_TEST='disabled'

如果你存储在您的任何明文口令conf 不要禁用GPG_TEST恢复 -使gpg-agent缓存密码。

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

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

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

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

恢复它就像复制或将备份移回/ var / lib / lxc一样简单您还可以对其进行tar以节省空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM