如何备份和还原LXD容器
如何备份和还原在Ubuntu/Debian或Fedora/CentOS Linux服务器上运行的LXD容器?
如果服务器崩溃或数据库损坏,则备份LXD服务器是一项基本任务。
让我们看看如何使用Linux命令行选项"备份和还原LXD容器"。
备份和还原LXD容器的过程
使用lxd命令备份LXD服务器配置信息,例如配置文件名称,存储,网络。
接下来,我们将使用lxc export命令备份正在运行的容器。
最后将看到如何还原所有容器和服务器配置。
步骤1收集有关LXD的信息
根据官方文档,我们需要以下内容进行备份:
- 实例
- 镜像
- 网络配置
- 个人资料
- 存储卷(zfs/dir/btrfs/lvm)
列出所有实例,运行:
# 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用作存储卷,因此我将使用以下命令列出它(确保使用apt命令安装了zfs-utils):
# zpool list # zfs list
我使用snap命令安装了lxd,并且所有数据都位于/var/snap/lxd/common/lxd /目录中:
# ls -l /var/snap/lxd/common/lxd/
我们也将备份该目录。
记住备份所有重要的东西。
每种设置在存储和网络方面都有些不同。
因此,解决方法:您需要仔细研究所有这些组件。
步骤2完整备份/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/
其中:
--sparse
:将空序列变成稀疏块。这是加快速度所必需的,而我正在使用/var/snap/lxd/common/lxd/disks/lxdzfs.img。第一次完全备份后,我们需要传递--partial选项。因此,我的命令将是:`rsync --partial -avrP /var/snap/lxd/common/lxd/backups/lxd/lxd-full-backup /- -a:存档模式。适合备份。
- -v:详细选项。
- -r:递归复制目录
-P
:在屏幕上显示进度/var/snap/lxd/common/lxd
:源目录/backups/lxd/lxd-full-backup /
:目标备份目录。user @ server-ip:/backups/lxd/lxd-full-backup /
:与上面相同,但是是远程备份服务器。
步骤3使用快照备份所有正在运行的实例
我将使用以下语法将实例导出为备份tarball:
lxc export {container} /path/to/{container}-backup-$(date +'%m-%d-%Y').tar.xz ## For zfs or btrfs storage --optimized-storage option will save disk space but less portable ## lxc export {container} /path/to/{container}-backup-$(date +'%m-%d-%Y').tar.xz --optimized-storage
在此示例中,我将备份名为nginx-www的容器,如下所示:
# lxc export nginx-www \ /backups/lxd/nginx-www-backup-$(date +'%m-%d-%Y').tar.xz \ --optimized-storage
输出示例:
Backup exported successfully!
这是基于bash for loop的示例,用于备份所有实例:
#!/bin/bash # Basic shell script to backup required LXD parts ## ## Backup and restore LXD config ## ## Today's date ## NOW=$(date +'%m-%d-%Y') ## Dump LXD server config ## lxd init --dump > "/backups/lxd/lxd.config.${NOW}" ## Dump all instances list ## lxc list > "/backups/lxd/lxd.instances.list.${NOW}" ## Make sure we know LXD version too ## snap list lxd > "/backups/lxd/lxd-version.${NOW}" ## Backup all Instances 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
随意修改以上脚本并每天从cron作业运行它。
切记将所有内容备份到异地。
尝试s3或NAS服务器。
步骤4还原lxd实例
至此,我们备份了所有内容。
但是,有时,我们需要练习完全还原,看看一切是否正常运行。
以下步骤将帮助您建立对备份的信心。
您还将学习如何还原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:
## Step 1. Find lxd version ## # cat /backups/lxd/lxd-version.05-26-2020 ## Step 2. Install that LXD version on a brand new server ## # snap install lxd --channel 4.0/stable ## Step 3. Non-interactive configuration (restore lxd server config) ## # cat /backups/lxd/lxd.config.05-26-2020 | lxd init --preseed # lxc list ## Step 4. Restore instance ## # ls -l /backups/lxd/*backup*xz # lxc import /backups/lxd/nginx-www-backup-05-26-2020.tar.xz # lxc list # lxc start nginx-www
在那里,您拥有完整的LXD服务器和容器,还原为原始的荣耀。
当剩下的LXD运行中找到时,如何仅还原特定实例?
只需跳到步骤4。
换句话说,运行:
# lxc import /backups/lxd/{container}-backup-${NOW}.xz # lxc import /backups/lxd/mariadb-node-01-backup-01-13-2020.xz
使用lxc copy命令备份LXD容器
另一种选择是将所有容器复制到另一台LXD服务器。
有关更多信息,请参见如何将LXD VM复制/移动/迁移到Linux上的另一个主机。
例如,假设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