我目前正在开发一个Xen备份系统,但是我遇到了以下问题:
我有两种备份方法:
dd ,并打开它,然后远程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获胜。
给定一个支持稀疏文件的系统, dd有时可以select保存空间。 奇怪的是,我的Mac中包含一个具有conv=sparse标志的dd版本,但是HFS +文件系统不支持它。 相反,我用于testing的新的Debian安装支持ext4中的稀疏文件,但dd安装没有标志。 去搞清楚。
因此,另一个练习:
我将/ dev / zero复制到与上面相同的文件中。 它在du , df和ls确认的文件系统占用了2G空间。 然后,我用它的cp ,发现自己有2个文件使用4GB的空间。 所以,现在是时候尝试另一个标志:
`cp --sparse=always sparse sparse2`
使用这个强制cp来取一个普通的文件,并使用稀疏分配,只要它看到一个长的零string。 现在我有两个文件,根据ls报告占用4GB,但根据du和df只有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
所以我的想法给了这一切:
rsync -S复制稀疏文件 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议,运行一个可用空间为零的工具会导致快照占用大量数据,花费大量时间并占用大量快照后备存储空间。 是不是有一个原因,你不想挂载快照和rsync或rdiff-backup ? 您也可以查看dump ,可以快速备份快照而不挂载(如果是ext [234])并执行多级增量备份。 对于具有许多小文件的文件系统,它可能比tar或rsync快得多。 它也可以做multithreading压缩。