我目前正在开发一个 Xen 备份系统,但是我遇到了以下问题:
我有两种备份方法:
dd
从LVM快照,并tar
响它。,以及远程rsync的它现在第二个选项允许我使用, rdiff-backup
这样我就可以保存增量备份并节省大量空间,而第一个选项确实是存储量很大。
现在,我有两个问题:
dd
?假设我有一个 50GB 的 LVM 卷并且只使用了 3GB,使用dd
它时将创建一个 50GB 的图像(因此浪费了 47GB)。tar
可以解决这个问题,但需要很多额外的时间(我基本上没有)img
文件可以dd
以某种方式增量保存吗?让我们从您的快照中回归基础。首先,我要请您看看为什么要对一个文件进行 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
胜利的。
给定支持稀疏文件的系统,dd
有时可以选择节省空间。奇怪的是,我的 Mac 包含一个dd
带有conv=sparse
标志的版本,但 HFS+ 文件系统不支持它。相反,我用于测试的全新 Debian 安装支持 ext4 中的稀疏文件,但该安装dd
没有标志。去搞清楚。
因此,另一个练习:
我将 /dev/zero 复制到与上述相同的文件中。它在文件系统中占去了2G的空间被证实du
,df
和ls
。然后我使用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
所以我的想法是:
rsync -S
与稀疏文件导致复制cp --sparse=always
针对未扩展的映像运行以创建稀疏副本。块设备上的差异备份的问题在于,事情可能会移动一点并产生大量笨拙的差异。有一些关于 StackOverflow 的讨论:https ://stackoverflow.com/questions/4731035/binary-diff-and-patch-utility-for-a-virtual-machine-image 得出的最佳用途是 xdelta。如果您打算这样做,请再次尝试先将空白空间归零。
归档时间: |
|
查看次数: |
2691 次 |
最近记录: |