如何备份和恢复 LXD 容器
备份 LXD 服务器是一项必不可少的任务,以防服务器崩溃或数据库损坏。让我们看看如何使用 Linux 命令行选项备份和恢复 LXD 容器。
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | 路西法 |
操作系统兼容性 | CentOS • Debian • Fedora • Linux • Stream • Ubuntu |
预计阅读时间 | 6 分钟 |
备份和恢复 LXD 容器的步骤
使用 lxd 命令备份 LXD 服务器配置信息,例如配置文件名称、存储、网络。接下来,我们将使用 lxc export 命令备份正在运行的容器。最后将了解如何恢复所有容器和服务器配置。
步骤 1 - 收集有关 LXD 的信息
根据官方文档,我们需要备份以下内容:
- 实例
- 图片
- 网络
- 轮廓
- 存储卷 (zfs/dir/btrfs/lvm)
警告:您需要 LXD 版本 4.x 或更高版本才能使用导出和转储功能。要查找 LXD 版本,请运行:
lxd version
列出所有实例,运行:
# lxc list
要获取有关当前网络、存储池和配置文件的信息,请运行:
# lxd init --dump
将其保存到 /backups/lxd/ 目录:
我使用 ZFS 作为存储卷,因此我将使用以下命令列出它(确保使用apt 命令安装了 zfs-utils ):
我使用 snap 命令安装了 lxd,完整数据位于 /var/snap/lxd/common/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')
# zpool list
# zfs list
# 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:
在此示例中,我将按如下方式备份名为 nginx-www 的容器:
示例输出:
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
# lxc export nginx-www \
/backups/lxd/nginx-www-backup-$(date +'%m-%d-%Y').tar.xz \
--optimized-storage
Backup exported successfully!
以下是基于bash for 循环的示例,用于备份所有实例:
#!/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:
这样你就拥有了完整的 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 的其余部分运行良好时,如何仅恢复特定实例?
直接跳到步骤#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 服务器:
接下来在server1上运行:
## 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
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
结论
在本深入教程中,我们学习了如何备份和恢复 LXD 服务器,包括配置和所有实例。请注意,每个服务器的操作系统、存储和网络配置文件都不同。但是,总体步骤保持不变,您需要根据本地设置采用和测试这些步骤。我强烈建议使用 NAS 服务器或云存储进行所有备份。编写用于自动化目的的 shell 脚本留给读者练习。请参阅此处的 LXD 文档。
- 在 Ubuntu 16.04 LTS 上安装 LXD 容器管理程序
- 如何在 Fedora Linux 26 上安装和设置 LXC(Linux 容器)
- 在KVM或Xen虚拟机下设置LXD容器
- 列出 LXD(Linux 容器)中的 VM 映像
- 升级由 Ubuntu/Debian 或 CentOS Linux 驱动的 LXD 容器
- 在 Linux 启动时自动启动 LXD 容器
- 重命名 LXD / LXC 容器的命令
- 在配置启动时在 Linux 容器 (LXD) 实例上运行命令
- 在云实例启动时,使用 shell 脚本中的 LXD(Linux 容器)创建 VM
- 将 LXD VM 移动/迁移到 Linux 上的另一台主机
- Fedora 安装并设置 LXD
- CentOS 7.x 安装并设置 LXD 服务器
- 在 Ubuntu 18.04 LTS 上安装 LXD 纯容器管理程序
- 使用 lxc 命令为 LXD 创建快照
- 在 CentOS/RHEL 8 上设置并安装 LXD
- Ubuntu 20.04 LTS 安装并设置 LXD
- 完整备份和恢复 LXD 容器
- 禁用 LXD 桥上的防火墙和 NAT 规则
- 使用 lxc 删除或移除 LXD 容器
- Linux 文件系统错误:事务失败解决方案
- Ubuntu 22.04 LTS 设置 LXD
- Debian 11 设置 LXD