我想接受lxc容器备份。我们的服务器为12.04 LTS ubuntu server
,我已在其中安装了LXC - 1.0.0.alpha2
。我想将我们的ubuntu服务器更新为14.04 LTS。所以我想做的是备份LXC容器 - >将操作系统升级到14.04 - >恢复LXC容器。使用早期版本(我猜是0.7.5)有lxc-backup和lxc-restore但是1.0.0.alpha2我们没有备份和恢复操作。我怎样才能备份lxc容器。我用拷贝容器文件夹(/ var / lib / lxc / my_container /)花了超过3个小时进入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备份的想法?
答案 0 :(得分:34)
如果你偶然发现这篇文章,我的回答是关于移动系统之间的LXC容器,因为这似乎是被问到的问题。
如果你想备份你的LXC容器,请参阅@Stuart的答案以获得一些很棒的选择。
这是我在系统之间迁移LXC容器的方法。我已成功将基于12.04容器的ubuntu移动到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数值不同。
这对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
我忽略了这个错误,并且对我管理的任何容器都没有任何问题。如果您还有其他问题,请将错误消息添加到原始帖子中,我将详细说明。
答案 1 :(得分:10)
要将lxc
容器快速备份到没有remote
文件系统的btrfs
主机,我会从remote
主机sshfs
&安装文件系统。 cd
进入山。停止容器和创建一个tar.xz
存档。
我现在在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
通过运行Alpine Linux LXC containers进行测试 - 也适用于Debian。
Simple Backups with Duply - 您也可以对本地文件执行非常简单的未加密备份(在TARGET='file://[relative|/absolute]/local/path'
中设置~/.duply/mybackup/conf
)
要签署Duply备份,请参阅GnuPG in Automated Environments(无密码签名密钥,而不是以明文形式存储密码)。
在重复GPG_TEST='disabled'
文件中为cron作业设置conf
。
如果你 所以gpg-agent
会缓存您的密码。
答案 2 :(得分:2)
我同意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
您可以在适当的时间将其复制回原位。祝你好运!
答案 3 :(得分:1)
我发现备份容器的最简单方法是运行lxc-clone。
lxc-clone -o NAMEOFCONTAINER -n NAMEOFCONTAINER -P BACKUPDIR
恢复它就像将备份复制或移回/ var / lib / lxc一样简单 你也可以用它来节省空间。