我需要在具有本地存储的 Linux 服务器上存储一个 ~ 150 GB 二进制文件 (qcow2) 的多个版本,并希望有某种解决方案,只需保留可以根据需要合并的差异,这样当只有 4 GB 发生变化时,我就不必创建 150 GB 文件的另一个副本。这是一个存储问题,而不是关于 KVM/qcow2 特定功能的问题。我已经探索了其中一些选项。目前使用带有 EXT4 的 CentOS 6.3。文件需要无限期存储,并且在恢复时必须完全完好无损。如果解决方案值得,我愿意更改文件系统等。
答案1
Linux 上的 ZFS在这种情况下,重复数据删除可能会成为您的好帮手。Red Hat RPM/存储库可供安装。
即使没有重复数据删除,如果您可以将其纳入 ZFS 快照工作流,那么使用 ZFS 尝试执行此操作也会有一些明显的优势。
您能否进一步解释一下您希望如何处理这些文件?您是在寻找时间点快照,还是将相同/相似文件的多个修订版复制到数据存储区?
答案2
我将 LVM 快照视为一种解决方案。无需过多赘述,我将执行以下操作:
- 创建足够大的 LVM 卷来包含您的数据。
- 将大型二进制文件的初始副本上传至此卷。
- 创建 LVM 快照。
- 使用 rsync 复制大文件的另一个版本来代替现有文件。
此时,您可以通过挂载 LVM 快照来访问原始文件。此外,大文件的最新版本也将可用。您可以通过这种方式创建多个快照。
答案3
我在用着库同步为此目的。它适用于 CentOS 和其他 RHEL 克隆版本EPEL 存储库。
只需使用:
rdiff signature new.qcow2 /tmp/new.qcow2.rdiffsig
rdiff delta /tmp/new.qcow2.rdiffsig old.qcow2 new.qcow2--old.qcow2.rdiff
rm /tmp/new.qcow2.rdiffsig
xz new.qcow2--old.qcow2.rdiff
然后你可以删除old.qcow2
。当你再次需要它时,你可以这样做:
xz -d < new.qcow2--old.qcow2.rdiff.xz > /tmp/new.qcow2--old.qcow2.rdiff
rdiff patch new.qcow2 /tmp/new.qcow2--old.qcow2.rdiff old.qcow2
rm /tmp/new.qcow2--old.qcow2.rdiff
这可以串联起来 - 您可以创建一个从old.qcow2
到的rdiffevenolder.qcow2
等等。这相当慢,但非常节省空间 - 我通常不需要使用它来删除旧备份。还有一个rdiff-备份程序,它可以自动对整个目录执行类似的方案。