在一次大规模 Proxmox VE → Proxmox Backup Server → 新节点恢复的过程中,多个虚拟机磁盘被从 PBS 还原为 qcow2 格式。通过分析 restore 日志,可以清楚地看到:影响恢复时间的关键并不是虚拟磁盘标称容量,而是其中“实际非零数据量”

本文基于多台 VM(102 / 104 / 106 / 101)的真实恢复日志,分析了 restore 性能、零块跳过比例以及对 6TB 级虚拟机恢复时间的准确估计方式。


一、PBS restore 的关键机制:--skip-zero

所有恢复命令都使用了:

pbs-restore ... --format qcow2 --skip-zero

这意味着:

PBS 会识别磁盘中的“全零块”,直接跳过,不向目标磁盘写入。

因此:

  • qcow2 显示的 6TB 只是虚拟容量
  • 实际需要写入的是:
    虚拟容量 − zeroes(零块)

这也是为什么 PBS restore 日志中会显示:

read xxxx bytes, zeroes = yy% (zzzz bytes)

zeroes 百分比越高,真正要写的数据越少,速度越快。


二、不同 VM 的真实恢复速度

从几台 VM 的 restore 完成日志可直接看到最终速度:

VM容量耗时平均速度
VM10212 GB55.6 s221 MB/s
VM10632 GB363 s90 MB/s
VM104 (scsi0)100 GB780 s131 MB/s
VM104 (scsi1)100 GB105 s968 MB/s

可以看到:

  • 磁盘内容不同(零块比例不同)
  • 存储目标不同
  • qcow2 写入压力不同

都会导致恢复速度差异非常大。


三、为什么同样 100GB,一个 130MB/s,一个 968MB/s?

VM104 的两块磁盘表现完全不同:

磁盘zeroes实际写入
scsi0~1–2%≈ 98GB
scsi1~87%≈ 13GB

也就是说:

  • scsi1 虽然“虚拟 100GB”
  • 但真正写入只有约 13GB
    → 所以速度看起来接近 1GB/s

这证明:

PBS restore 的瓶颈是 “非零数据写入量”,不是 qcow2 文件尺寸。


四、6TB 虚拟机(VM101)的真实情况

VM101 的 qcow2 虚拟容量为:

6597069766656 bytes ≈ 6.0 TB

但根据实际数据:

有效数据 ≈ 4.5 TB

这正是 PBS --skip-zero 的典型场景。


五、4.5TB 在当前系统中的恢复时间估算

根据实际多台 VM 的 restore 表现:

如果性能接近 VM102(≈220MB/s)

4.5 TB ÷ 220 MB/s ≈ 5.7 小时

如果性能接近 VM104(scsi0)(≈130MB/s)

4.5 TB ÷ 130 MB/s ≈ 9.5 小时

因此:

VM101 的实际恢复时间区间约为
6 小时(理想)到 10 小时(偏慢)

而 zeroes 比例如果高于预期,还会更快。


六、如何在恢复中实时判断“还有多久”

在 PBS restore 日志中,每一行都包含:

progress X% (read Y bytes, zeroes = Z% (K bytes), duration T sec)

真正要写的量是:

有效数据 = Y - zeroes

因此剩余时间可以用:

剩余数据 ÷ (当前有效写入速率)

来计算,非常精确。


七、结论

在 Proxmox Backup Server 的恢复机制下:

虚拟机恢复时间 ≠ 虚拟磁盘容量
恢复时间 ≈ 非零数据量 ÷ 实际写入速度

对于 6TB 级虚拟机:

  • 如果其中 25% 是零块
  • 实际恢复量就是 4.5TB
  • 恢复时间大约 6–10 小时,而不是 15–20 小时

这也是 PBS 在大规模迁移和跨国数据搬迁中的核心优势之一:
稀疏数据越多,恢复越快。

Leave a Reply

Your email address will not be published. Required fields are marked *