备份是任何明智的 IT 部署的要求,Proxmox VE 提供了一个完全集成的解决方案,使用每个存储和每个客户系统类型的功能。这允许系统管理员通过模式选项在备份的一致性和来宾系统的停机时间之间进行微调。
Proxmox VE 备份始终是完整备份 – 包含 VM/CT 配置和所有数据。可以通过 GUI 或vzdump命令行工具启动备份。
备份存储
在运行备份之前,必须定义备份存储。有关如何添加存储的信息,请参阅存储文档。备份存储必须是文件级存储,因为备份存储为常规文件。在大多数情况下,使用 NFS 服务器是存储备份的好方法。您可以稍后将这些备份保存到磁带驱动器,以进行异地归档。
计划备份
可以安排备份作业,以便它们在特定日期和时间自动执行,用于可选节点和来宾系统。计划备份的配置是在 GUI 中的数据中心级别完成的,这将在 /etc/pve/jobs.cfg 中生成一个作业条目,然后由pvescheduler守护程序解析和执行。这些作业使用日历事件来定义计划。
备份模式 #
有几种方法可以提供一致性(选项模式),具体取决于类型。虚拟机的备份模式:
停止模式
此模式提供了最高的备份一致性,但代价是虚拟机操作的停机时间较短。它的工作原理是按顺序关闭 VM,然后运行后台 Qemu 进程来备份 VM 数据。启动备份后,如果之前正在运行,VM 将进入完全运行模式。使用实时备份功能可以保证一致性。
挂起模式
出于兼容性原因提供此模式,并在调用快照模式之前暂停 VM。由于暂停VM会导致更长的停机时间,并且不一定能提高数据一致性,因此建议使用快照模式。
快照模式
这种模式提供了最短的操作停机时间,但代价是小的不一致风险。它通过执行 Proxmox VE 实时备份来工作,其中数据块在 VM 运行时被复制。如果来宾代理已启用 ( agent: 1 ) 并正在运行,它会调用 guest-fsfreeze-freeze和guest-fsfreeze-thaw以提高一致性。
可以在 此处在线找到 QemuServer 的 Proxmox VE 实时备份的技术概述。
| 备注 | Proxmox VE 实时备份在任何存储类型上提供类似快照的语义。它不要求底层存储支持快照。另请注意,由于备份是通过后台 Qemu 进程完成的,因此在 Qemu 读取 VM 磁盘时,停止的 VM 将显示为运行一小段时间。但是,VM 本身并未启动,仅读取其磁盘。 |
容器的备份模式:
停止模式
在备份期间停止容器。这可能会导致很长的停机时间。
挂起模式
此模式使用 rsync 将容器数据复制到临时位置(请参阅选项–tmpdir)。然后容器被挂起,第二个 rsync 复制更改的文件。之后,容器再次启动(恢复)。这导致停机时间最短,但需要额外的空间来保存容器副本。
当容器在本地文件系统上并且备份的目标存储是 NFS/CIFS 服务器时,您应该将–tmpdir设置为也驻留在本地文件系统上,因为这将导致成倍的性能提升。如果备份存储是 NFS 服务器,如果要在挂起模式下使用 ACL 备份本地容器,则还需要使用本地tmpdir 。
快照模式
此模式使用底层存储的快照功能。首先,容器会被挂起,以保证数据的一致性。将制作容器卷的临时快照,并将快照内容存档在 tar 文件中。最后,临时快照再次被删除。
| 提示 | 快照模式要求所有备份的卷都在支持快照的存储上。使用backup=no mount point 选项可以从备份中排除单个卷(因此需要此要求)。 |
| 提示 | 默认情况下,除根磁盘安装点之外的其他安装点不包含在备份中。对于卷安装点,您可以设置备份选项以在备份中包含安装点。设备和绑定挂载永远不会备份,因为它们的内容在 Proxmox VE 存储库之外进行管理。 |
备份文件名 #
例如,较新版本的 vzdump 将客户机类型和备份时间编码到文件名中
vzdump-lxc-105-2009_10_09-11_04_43.tar
这样就可以在同一个目录中存储多个备份。您可以使用各种保留选项限制保留的备份数量,请参阅下面的“备份保留”部分。
备份文件压缩 #
可以使用以下算法之一压缩备份文件:lzo [ 1 ]、gzip [ 2 ]或zstd [ 3 ]。
目前,Zstandard (zstd) 是这三种算法中最快的。多线程是 zstd 相对于 lzo 和 gzip 的另一个优势。Lzo 和 gzip 使用更广泛,通常默认安装。
您可以安装 pigz [ 4 ]作为 gzip 的替代品,以通过多线程提供更好的性能。对于 pigz & zstd,可以调整线程/内核的数量。请参阅下面的 配置选项。
备份文件名的扩展名通常可用于确定已使用哪种压缩算法来创建备份。
| .zst | Zstandard (zstd) 压缩 |
| .gz 或 .tgz | gzip 压缩 |
| .lzo | lzo 压缩 |
如果备份文件名不以上述文件扩展名之一结尾,则说明它没有被 vzdump 压缩。
备份加密 #
对于 Proxmox 备份服务器存储,您可以选择设置客户端的备份加密,请参阅相应部分。
备份保留 #
使用prune-backups选项,您可以灵活地指定要保留的备份。提供以下保留选项:
keep-all <boolean>
保留所有备份。如果这是true,则无法设置其他选项。
keep-last <N>
保留最后<N>个备份。
keep-hourly <N>
保留过去<N>小时的备份。如果在一小时内有多个备份,则仅保留最新的备份。
keep-daily <N>
保留过去<N>天的备份。如果一天有多个备份,则仅保留最新的。
keep-weekly <N>
保留过去<N>周的备份。如果一周内有多个备份,则仅保留最新的。
| 提示 | 周从星期一开始,到星期日结束。该软件使用 ISO 星期日期系统并正确处理年末的星期。 |
keep-monthly <N>
保留过去<N>个月的备份。如果单月有多个备份,则仅保留最新的。
keep-yearly <N>
保留过去<N>年的备份。如果一年有多个备份,则仅保留最新的备份。
保留选项按上面给出的顺序进行处理。每个选项仅涵盖其时间段内的备份。下一个选项不处理已经涵盖的备份。它只会考虑较旧的备份。
指定要用作逗号分隔列表的保留选项,例如:
# vzdump 777 --prune-backups keep-last=3,keep-daily=13,keep-yearly=9
虽然您可以将prune-backups直接传递给vzdump,但在存储级别配置设置通常更明智,这可以通过 Web 界面完成。
| 提示 | 旧的maxfiles选项已弃用,应替换为 keep-last,或者如果maxfiles为0表示无限保留, 则应替换为keep-all。 |
修剪模拟器
您可以使用 Proxmox 备份服务器文档的修剪模拟器来探索不同保留选项对各种备份计划的影响。
保留设置示例
旧备份的备份频率和保留时间可能取决于数据更改的频率以及旧状态在特定工作负载中的重要性。当备份充当公司的文档存档时,可能还有关于备份必须保留多长时间的法律要求。
对于此示例,我们假设您正在进行每日备份,保留期为 10 年,并且备份存储的时间间隔逐渐增长。
keep-last=3 – 即使只进行每日备份,管理员也可能希望在大升级之前或之后创建一个额外的备份。设置 keep-last 可以确保这一点。
未设置keep-hourly – 对于每日备份,这无关紧要。您已经使用 keep-last 覆盖了额外的手动备份。
keep-daily=13 – 与 keep-last 一起,至少涵盖一天,这可确保您有至少两周的备份。
keep-weekly=8 – 确保您有至少两个完整月的每周备份。
keep-monthly=11 – 与之前的保留设置一起,确保您有至少一年的每月备份。
keep-yearly=9 – 这是用于长期存档的。当您使用之前的选项覆盖当前年份时,您可以将其余选项设置为 9,从而为您提供至少 10 年的覆盖期。
我们建议您使用比您的环境最低要求更长的保留期;如果您发现它不必要地高,您总是可以减少它,但是一旦它们被删除,您就无法重新创建备份。
备份保护 #
您可以将备份标记为受保护以防止其被删除。尝试通过 Proxmox VE 的 UI、CLI 或 API 删除受保护的备份将失败。但是,这是由 Proxmox VE 而不是文件系统强制执行的,这意味着任何对底层备份存储具有写访问权限的人仍然可以手动删除备份文件本身。
| 提示 | 修剪会忽略受保护的备份,并且不计入保留设置。 |
对于基于文件系统的存储,保护是通过标记文件 <backup-name>.protected 实现的。对于 Proxmox 备份服务器,它在服务器端处理(自 Proxmox 备份服务器 2.1 版起可用)。
使用存储选项max-protected-backups来控制每个来宾在存储上允许多少个受保护的备份。使用-1表示无限制。具有Datastore.Allocate权限的用户默认为无限制,其他用户默认为5。
备份笔记 #
您可以使用 UI 中的“编辑备注”按钮或通过存储内容 API向备份添加备注。
还可以为备份作业和手动备份指定动态生成注释的模板。模板字符串可以包含变量,用两个大括号括起来,执行备份时将替换为对应的值。
目前支持的有:
- {{cluster}}集群名称(如果有)
- {{guestname}}虚拟客人的指定名称
- {{node}}正在创建备份的节点的主机名
- {{vmid}}来宾的数字 VMID
当通过 API 或 CLI 指定时,它必须是单行,其中换行符和反斜杠需要分别转义为文字\n和\\。
恢复 #
可以通过 Proxmox VE Web GUI 或以下 CLI 工具恢复备份存档:pct恢复
容器还原实用程序qmrestore
虚拟机还原实用程序
有关详细信息,请参阅相应的手册页。
带宽限制
恢复一个或多个大备份可能需要大量资源,尤其是用于从备份存储读取和写入目标存储的存储带宽。这可能会对其他虚拟客人产生负面影响,因为对存储的访问可能会变得拥挤。
为避免这种情况,您可以为备份作业设置带宽限制。Proxmox VE 为恢复和归档实现了两种限制:
- per-restore limit:表示从备份存档中读取的最大带宽量
- per-storage write limit:表示用于写入特定存储的最大带宽量
读取限制间接影响写入限制,因为我们不能写的比读的多。较小的每个作业限制将覆盖较大的每个存储限制。如果您对受影响的存储具有“Data.Allocate”权限,则更大的每个作业限制只会覆盖每个存储限制。
您可以使用还原 CLI 命令中的“–bwlimit <整数>”选项来设置还原作业特定的带宽限制。Kibit/s 用作限制的单位,这意味着传递 `10240′ 会将备份的读取速度限制为 10 MiB/s,确保其余可能的存储带宽可供已运行的虚拟客户使用,并且因此备份不会影响他们的操作。
| 提示 | 您可以对bwlimit参数使用“0”来禁用特定还原作业的所有限制。如果您需要尽快恢复非常重要的虚拟访客,这会很有帮助。(需要“Data.Allocate”存储权限) |
大多数情况下,您的存储的一般可用带宽随着时间的推移保持不变,因此我们实现了为每个配置的存储设置默认带宽限制的可能性,这可以通过以下方式完成:
# pvesm set STORAGEID --bwlimit restore=KIBs
实时恢复
恢复大型备份可能需要很长时间,其中访客仍然不可用。对于存储在 Proxmox 备份服务器上的 VM 备份,可以使用实时恢复选项来减少此等待时间。
通过 GUI 中的复选框或 qmrestore 的 –live-restore 参数启用实时恢复会导致 虚拟机在恢复开始后立即启动。数据在后台复制,优先考虑 VM 正在访问的块。
请注意,这有两个警告:
- 在实时恢复期间,虚拟机将以有限的磁盘读取速度运行,因为必须从备份服务器加载数据(一旦加载,它会立即在目标存储上可用,因此访问数据两次只会在第一次受到惩罚)。写入速度基本不受影响。
- 如果实时恢复因任何原因失败,VM 将处于未定义状态——也就是说,并非所有数据都可能已从备份中复制,并且很可能无法保留在恢复期间写入的任何数据。还原操作失败。
这种操作模式对于大型虚拟机特别有用,初始操作只需要少量数据,例如网络服务器——一旦操作系统和必要的服务启动,虚拟机就可以运行,而后台任务很少继续复制使用的数据。
单文件还原
存储 GUI 的“备份”选项卡中的“文件恢复”按钮可用于直接在备份中包含的数据上打开文件浏览器。此功能仅适用于 Proxmox 备份服务器上的备份。
对于容器,文件树的第一层显示了所有包含的pxar 存档,可以自由打开和浏览。对于虚拟机,第一层显示包含的驱动器映像,可以打开它以显示驱动器上支持的存储技术列表。在最基本的情况下,这将是一个名为part的条目,代表一个分区表,其中包含驱动器上找到的每个分区的条目。请注意,对于 VM,并非所有数据都可以访问(不受支持的客户文件系统、存储技术等)。
可以使用“下载”按钮下载文件和目录,后者会即时压缩成 zip 存档。
要启用对可能包含不受信任数据的 VM 映像的安全访问,将启动一个临时 VM(作为来宾不可见)。这并不意味着从此类存档下载的数据本质上是安全的,但它避免了将管理程序系统暴露于危险之中。VM 将在超时后自行停止。从用户的角度来看,这整个过程是透明的。
配置 #
全局配置存储在/etc/vzdump.conf中。该文件使用简单的冒号分隔键/值格式。每行具有以下格式:
OPTION: value
文件中的空行被忽略,以#字符开头的行 被视为注释,也被忽略。此文件中的值用作默认值,并且可以在命令行上覆盖。
我们目前支持以下选项:
bwlimit : <整数> (0 – N) (默认 = 0 )
| 需要选项:存储 |
pigz: <integer> (default = 0)
当 N>0 时,使用 pigz 而不是 gzip。N=1 使用一半的内核,N>1 使用 N 作为线程数。
pool: <string>
备份指定池中包含的所有已知访客系统。
protected: <boolean>
如果为真,则将备份标记为受保护。
| 提示 | 需要选项:存储 |
修剪备份: [keep-all=<1|0>] [,keep-daily=<N>] [,keep-hourly=<N>] [,keep-last=<N>] [,keep-monthly =<N>] [,keep-weekly=<N>] [,keep-yearly=<N>](默认 = keep-all=1)
使用这些保留选项而不是存储配置中的保留选项。
keep-all=<boolean>
保留所有备份。为真时与其他选项冲突。
keep-daily=<N>
保留过去 <N> 天的备份。如果一天有多个备份,则仅保留最新的一个。
keep-hourly=<N>
保留过去 <N> 个不同小时的备份。如果一个小时内有多个备份,则仅保留最新的一个。
keep-last=<N>
保留最后 <N> 个备份。
keep-monthly=<N>
保留过去 <N> 个不同月份的备份。如果单月有多个备份,则仅保留最新的一个。
keep-weekly=<N>
保留过去 <N> 周的备份。如果一周内有多个备份,则仅保留最新的一个。
keep-yearly=<N>
保留过去 <N> 年不同年份的备份。如果一年有多个备份,则仅保留最新的一个。
您可以使用选项–script指定挂钩脚本。在备份过程的各个阶段调用此脚本,并相应设置参数。您可以在文档目录 ( vzdump-hook-script.pl ) 中找到一个示例。 vzdump默认跳过以下文件(使用选项禁用 –stdexcludes 0) 您还可以手动指定(附加)排除路径,例如: 不包括目录/tmp/以及任何名为/var/foo、 /var/foobar等的文件或目录。 不以/开头的路径不会锚定到容器的根目录,但会相对于任何子目录进行匹配。例如: 排除任何名为/bar、/var/bar、/var/foo/bar等的文件或目录,但不包括 /bar2。 配置文件也存储在备份存档中(在./etc/vzdump/中),并将被正确恢复。 只需转储来宾 777 – 没有快照,只需将来宾私有区域和配置文件存档到默认转储目录(通常是 /var/lib/vz/dump/)。 使用 rsync 和暂停/恢复来创建快照(停机时间最短)。 备份所有访客系统并向 root 和管理员发送通知邮件。 使用快照模式(无停机时间)和非默认转储目录。 备份多个访客(有选择地) 备份除 101 和 102 之外的所有访客 将容器恢复到新的 CT 600 将 QemuServer VM 还原到 VM 601 使用管道将现有容器 101 克隆到具有 4GB 根文件系统的新容器 300 1 . Lempel-Ziv-Oberhumer 一种无损数据压缩算法 https://en.wikipedia.org/wiki/Lempel-Ziv-Oberhumer 2 . gzip – 基于 DEFLATE 算法 https://en.wikipedia.org/wiki/Gzip 3 . Zstandard 一种无损数据压缩算法 https://en.wikipedia.org/wiki/Zstandard 4 . pigz – gzip 的并行实现 https://zlib.net/pigz/tmpdir: /mnt/fast_local_disk
storage: my_backup_storage
mode: snapshot
bwlimit: 10000
挂钩脚本 #
文件排除 #
提示 此选项仅适用于容器备份。 /tmp/?*
/var/tmp/?*
/var/run/?*pid# vzdump 777 --exclude-path /tmp/ --exclude-path '/var/foo*'# vzdump 777 --exclude-path bar例子 #
# vzdump 777# vzdump 777 --mode suspend# vzdump --all --mode suspend --mailto root --mailto admin# vzdump 777 --dumpdir /mnt/backup --mode snapshot# vzdump 101 102 103 --mailto root# vzdump --mode suspend --exclude 101,102# pct restore 600 /mnt/backup/vzdump-lxc-777.tar# qmrestore /mnt/backup/vzdump-qemu-888.vma 601# vzdump 101 --stdout | pct restore --rootfs 4 300 -