备份 Xen 域

Dev*_*tor 6 backup xen lvm

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

我有两种备份方法:

  • dd从LVM快照,并tar响它。,以及远程rsync的它
  • 挂载 LVM 快照并将所有内容同步到远程位置

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

现在,我有两个问题:

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

Jef*_*and 7

压缩空白

让我们从您的快照中回归基础。首先,我要请您看看为什么要对一个文件进行 tar 处理。停下来想一想 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
Run Code Online (Sandbox Code Playgroud)

鉴于此,我们可以看到压缩为我们提供了大约 1000:1 的空白空间优势。无论系统对稀疏文件的支持如何,压缩都有效。还有其他算法可以进一步收紧它,但对于原始的整体性能来说,它是gzip胜利的。

Unix 实用程序和稀疏文件

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

因此,另一个练习:

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

`cp --sparse=always sparse sparse2`
Run Code Online (Sandbox Code Playgroud)

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

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

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

稀疏结论

所以我的想法是:

  • 使用 LVM 的快照
  • 针对快照运行zerofree
  • 使用rsync -S与稀疏文件导致复制
  • 如果您无法使用 rsync,请在通过网络传输时 gzip 快照,然后cp --sparse=always针对未扩展的映像运行以创建稀疏副本。

差异备份

块设备上的差异备份的问题在于,事情可能会移动一点并产生大量笨拙的差异。有一些关于 StackOverflow 的讨论:https ://stackoverflow.com/questions/4731035/binary-diff-and-patch-utility-for-a-virtual-machine-image 得出的最佳用途是 xdelta。如果您打算这样做,请再次尝试先将空白空间归零。