如何备份和还原LXD容器

时间:2019-11-20 08:53:40  来源:igfitidea点击:

在Ubuntu/Debian或Fedora/CentOS Linux中如何备份和还原LXD容器?

步骤1收集有关LXD的信息

使用lxd命令备份LXD服务器配置信息:
包括实例,镜像,网络,存储,系统profile等。

查看所有实例,运行:

# lxc list

查看有关当前网络,存储池和配置文件的信息:

# lxd init --dump

将这些信息保存到/backups/lxd/目录中:

# mkdir -pv /backups/lxd/
# lxd init --dump >/backups/lxd/lxd.config.$(date +'%m-%d-%Y')
# ls -l /backups/lxd/lxd.config.$(date +'%m-%d-%Y')

因为存储卷使用了ZFS文件系统,所以使用下面命令查看:

# zpool list
# zfs list

lxd所有数据都位于/var/snap/lxd/common/lxd /目录中:

# ls -l /var/snap/lxd/common/lxd/

所以这个目录也需要备份。

对/var/snap/lxd/common/lxd/目录进行全备

全备即完整备份。

我们可以使用rsync命令:

# rsync --sparse -avrP \
/var/snap/lxd/common/lxd /backups/lxd/lxd-full-backup/

或者备份到远程服务器:

# rsync --sparse -avrP \
/var/snap/lxd/common/lxd user@server-ip:/backups/lxd/lxd-full-backup/

使用快照备份所有正在运行的实例

使用下面语法将实例导出,压缩成tar包:

lxc export {container} /path/to/{container}-backup-$(date +'%m-%d-%Y').tar.xz

## 如果是zfs或者btrfs文件系统,使用 --optimized-storage可以节省磁盘空间
lxc export {container} /path/to/{container}-backup-$(date +'%m-%d-%Y').tar.xz --optimized-storage

示例: 备份LXD容器nginx-www:

# lxc export nginx-www \
/backups/lxd/nginx-www-backup-$(date +'%m-%d-%Y').tar.xz \
--optimized-storage

输出示例:

Backup exported successfully!

备份所有实例脚本:

#!/bin/bash
NOW=$(date +'%m-%d-%Y')
 
## 导出LXD容器配置
lxd init --dump > "/backups/lxd/lxd.config.${NOW}"
 
## 导出所有容器实例
lxc list > "/backups/lxd/lxd.instances.list.${NOW}"
 
## 备份所有容器版本信息
snap list lxd > "/backups/lxd/lxd-version.${NOW}"
 
## 备份所有实例
for i in $(lxc list -c n --format csv)
do
     echo "Making backup of ${i} ..."
     lxc export "${i}" "/backups/lxd/${i}-backup-$(date +'%m-%d-%Y').tar.xz" --optimized-storage
done

还原lxd实例

为了演示,我们先删除现有的lxd服务器和所有数据。

# lxc list
# snap remove lxd --purge
# snap list
## get rid of data stored in zfs too ##
# zpool destroy lxdzfs
# zfs list

恢复LXD容器命令

首先安装lxd:

## 查看LXD的版本
# cat /backups/lxd/lxd-version.05-26-2020

## 安装LXD
# snap install lxd --channel 4.0/stable

## 恢复lxd容器的配置
# cat /backups/lxd/lxd.config.05-26-2020 | lxd init --preseed
# lxc list

## 恢复容器实例
# ls -l /backups/lxd/*backup*xz
# lxc import /backups/lxd/nginx-www-backup-05-26-2020.tar.xz
# lxc list
# lxc start nginx-www

使用lxc copy命令备份LXD容器

另一种备份LXD容器的方法是将所有容器复制到另一台LXD服务器。

假设server2是我们的备用LXD服务器:

## on $BACKUP_SERVER (server2) ##
BACKUP_SERVER=192.168.100.100
lxc config set core.https_address ${BACKUP_SERVER}:8443
lxc config set core.trust_password Same_super_PASSWORD_here

在server1上执行:

BACKUP_SERVER=192.168.100.100
lxc remote add server2 BACKUP_SERVER
lxc remote list
## backup www-nginx to server2 using snapshots ##
lxc snapshot www-nginx
lxc info www-nginx
lxc copy www-nginx/snap0 server2:www-nginx-backup --verbose
## Restore www-nginx from server2 ##
lxc copy server2:www-nginx-backup www-nginx