备份 Xen 域

备份 Xen 域

我目前正在开发一个Xen备份系统,但是遇到了以下问题:

我有两种备份方法:

  • dd从 LVM 快照执行,然后tar将其挂起,然后远程 rsync
  • 挂载 LVM 快照并将所有内容 rsync 到远程位置

现在第二个选项允许我使用, rdiff-backup这样我就可以保存增量备份并节省大量空间,而第一个选项的存储空间确实很大。

现在我有两个问题:

  • 有没有办法在使用时不出现“空白” dd?假设我有一个 50GB 的 LVM 卷,但只使用了 3 GB,那么在使用时dd将创建一个 50 GB 的映像(因此浪费了 47 GB)。tar可以解决这个问题,但需要很多额外的时间(我基本上没有时间)
  • 这些img创建的文件能dd以某种方式逐步保存吗?

答案1

压缩空白处

让我们从快照中回顾一下基础知识。首先,我要请您看看为什么要打包一个文件。停下来想一想 tar 的作用是什么以及为什么要这样做。

$ dd if=/dev/zero of=zero bs=$((1024*1024)) count=2048
2048+0 records in
2048+0 records out
2147483648 bytes transferred in 46.748718 secs (45936739 bytes/sec)
$ time gzip zero

real    1m0.333s
user    0m37.838s
sys     0m1.778s
$ ls -l zero.gz
-rw-r--r--  1 user  group  2084110 Mar 11 16:18 zero.gz

由此可见,压缩在原本空白的空间上为我们带来了大约 1000:1 的优势。无论系统是否支持稀疏文件,压缩都可以正常工作。还有其他算法可以更严格地压缩,但就原始整体性能而言,压缩gzip更胜一筹。

Unix 实用程序和稀疏文件

假设一个支持稀疏文件的系统,dd有时会有一个节省空间的选项。奇怪的是,我的 Mac 包含一个dd带有conv=sparse标志的版本,但 HFS+ 文件系统不支持它。相反,我用于测试的全新 Debian 安装支持 ext4 中的稀疏文件,但该安装dd没有标志。去想想吧。

因此,另一个练习:

我将 /dev/zero 复制到与上述相同的文件中。它占用了文件系统上的 2G 空间,如 、 和 所证实dudf然后ls我使用cp它,发现有 2 个文件占用了 4GB 空间。所以,是时候尝试另一个标志了:

`cp --sparse=always sparse sparse2`

使用它可以强制 cp 接受常规文件,并在看到一长串零时使用稀疏分配。现在我有 2 个文件,根据 报告占用 4GB ls,但根据du和 报告仅占用 2GB df

现在我有一个稀疏文件,cp 会表现如何?是的。cp sparse2 sparse结果显示ls每个文件占用了 2GB 的空间,但du显示它们在文件系统上占用了零个块。结论:一些实用程序会尊重已经稀疏的文件,但大多数会将整个文件写回。cp除非你强迫它尝试,否则 Even 不知道将写入的文件恢复为稀疏文件。

接下来,我创建了一个 1MB 的文件,并将其设为稀疏条目,然后尝试在 中编辑它vim。尽管只输入了几个字符,但我们又回到了使用整个文件。快速搜索找到了类似的演示:https://unix.stackexchange.com/questions/17572/what-is-the-interaction-of-the-rsync-size-only-and-sparse-options

结论不明确

所以我的想法是:

  • 使用 LVM 进行快照
  • 跑步零自由针对快照
  • 使用rsync -S稀疏文件复制导致
  • 如果您不能使用 rsync,请在您通过网络传输时对快照进行 gzip 压缩,然后cp --sparse=always针对未展开的图像运行以创建稀疏副本。

差异备份

块设备上的差异备份的缺点是,内容可能会发生一些移动,并产生大量难以处理的差异。StackOverflow 上有一些讨论:https://stackoverflow.com/questions/4731035/binary-diff-and-patch-utility-for-a-virtual-machine-image得出的结论是最佳用途是 xdelta。如果您要这样做,请再次尝试先将空白空间清零。

答案2

您的两个问题...

dd 只是将扇区作为图像。没有办法告诉它跳过空白点;它将创建您正在复制的驱动器的忠实图像。但是,如果您通过压缩实用程序(如 zip 或 7z)重定向输出,空白应该会缩小它以获得几乎相同的效果。它仍然需要时间(因为 dd 实用程序仍在复制空白),但存储的大小因子将大大减少;我有一个来自 VMWare 的 100+gb 磁盘映像,由于未使用的空间,它压缩到大约 20gb。

至于增量保存,据我所知没有。dd 如何知道哪些已更改,哪些未更改?它实际上不是为此而设计的。增量保存很可能必须使用 rdiff-backup 或 rsync 等实用程序并压缩它们,并在文件级别完成。

答案3

tar无法修复浪费的空间,除非它恰好充满了零(通常不会)。按照 Jeff 的建议运行工具将可用空间清零会导致快照占用大量数据,花费大量时间并占用大量快照后备存储空间。你不想挂载快照或那样的原因是什么rsyncrdiff-backup你可能还会看看dump哪些可以快速备份快照而无需挂载它(如果它是 ext[234] )并执行多级增量备份。对于具有许多小文件的文件系统,它可以比 tar 或 rsync 快得多。它还可以进行多线程压缩。

相关内容