备份Xen域

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

我有两种备份方法:

  • 从LVM快照中执行dd ,并打开它,然后远程rsync
  • 将LVM快照和rsync一切安装到远程位置

现在第二个选项允许我使用rdiff-backup这样我就可以保存增量备份并节省大量空间,而第一个选项实际上是非常重要的。

现在我有两个问题:

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

压缩空白空间

让我们回到您的快照的基本知识。 首先,我要问你看看你为什么要把一个文件去掉。 停下来思考一下tar的function,以及为什么要这样做。

 $ 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的优势。 无论系统支持稀疏文件,压缩都能正常工作。 还有其他一些algorithm可以使它更加紧密,但是对于原始的整体性能, gzip获胜。

Unix实用程序和稀疏文件

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

因此,另一个练习:

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

 `cp --sparse=always sparse sparse2` 

使用这个强制cp来取一个普通的文件,并使用稀疏分配,只要它看到一个长的零string。 现在我有两个文件,根据ls报告占用4GB,但根据dudf只有2GB。

现在我有一个稀疏的文件,将CP的行为? 是。 cp sparse2 sparse导致ls显示每个文件占用2GB的空间,但是du显示它们占据了文件系统上的零块。 结论:一些实用程序会尊重一个已经很稀less的文件,但是大多数会把整个事情写回去。 即使cp不知道把文件写回稀疏,除非你强迫它的手去尝试。

接下来我创build了一个1MB的文件,并将其作为一个稀疏的条目,然后尝试在vim编辑。 尽pipe只input了几个字符,我们又回到了使用整个事情。 快速search发现类似的演示: https : //unix.stackexchange.com/questions/17572/what-is-the-interaction-of-the-rsync-size-only-and-sparse-options

稀疏的结论

所以我的想法给了这一切:

  • 快照与LVM
  • 针对快照运行zerofree
  • 使用rsync -S复制稀疏文件
  • 如果您不能使用rsync,请在您通过networking传输时将gzip快照gzip,然后针对未展开的图像运行cp --sparse=always以创build一个稀疏副本。

差异备份

在块设备上进行差异备份的问题在于,事情可能会稍微移动一些,并且会产生很大的难以处理的差异。 有一些关于StackOverflow的讨论: https ://stackoverflow.com/questions/4731035/binary-diff-and-patch-utility-for-a-virtual-machine-image得出最好的用法是xdelta。 如果你打算这样做,再次尝试先清空你的空白空间。

你的两个问题

dd只是把这些行业当成一个形象。 没有办法告诉它跳过空白点; 它会创build你正在复制的驱动器的忠实形象。 但是,如果您通过压缩实用程序(如zip或7z)redirect输出,则空白应该缩小几乎相同的效果。 它仍然需要时间(因为dd实用程序仍然复制白色空间),但存储的大小因子将大大减less; 由于未使用的空间,我有来自VMWare的100多个演出磁盘镜像压缩到20个演出。

至于逐步节省,而不是我的知识。 dd怎么会知道什么改变了,什么没有改变? 这不是真的。 增量保存很可能必须使用像rdiff-backup或rsync这样的工具来完成,并在文件级别进行压缩。

tar不能修复浪费的空间,除非碰巧满了零(通常不会)。 按照Jeff的build议,运行一个可用空间为零的工具会导致快照占用大量数据,花费大量时间并占用大量快照后备存储空间。 是不是有一个原因,你不想挂载快照和rsyncrdiff-backup ? 您也可以查看dump ,可以快速备份快照而不挂载(如果是ext [234])并执行多级增量备份。 对于具有许多小文件的文件系统,它可能比tar或rsync快得多。 它也可以做multithreading压缩。