我正在考虑一种情况,我会创建一个目录副本,调整一些文件,然后对结果进行一些处理。这将经常进行,可能一天几十次。(确切的用例是测试补丁提交;复制代码,打补丁,构建/测试/报告/等等。)
我正在寻找的可以通过创建一个新的目录结构并使用来自原始的硬链接来填充它来完成。但是,这仅在您使用的所有工具都删除并重新创建文件而不是就地编辑它们时才有效。
有没有办法让文件系统对文件进行写时复制?
注意:我知道许多 FS 在块级别使用 COW(所有更新都是通过写入新块完成的)但这不是我想要的。
我正在考虑一种情况,我会创建一个目录副本,调整一些文件,然后对结果进行一些处理。这将经常进行,可能一天几十次。(确切的用例是测试补丁提交;复制代码,打补丁,构建/测试/报告/等等。)
我正在寻找的可以通过创建一个新的目录结构并使用来自原始的硬链接来填充它来完成。但是,这仅在您使用的所有工具都删除并重新创建文件而不是就地编辑它们时才有效。
有没有办法让文件系统对文件进行写时复制?
注意:我知道许多 FS 在块级别使用 COW(所有更新都是通过写入新块完成的)但这不是我想要的。
如果您为文件服务器选择平台,我会选择最近的 OpenSolaris 构建并使用 ZFS 的重复数据删除功能。这样文件的副本就不会占用额外的空间,甚至文件之间的公共段也不会被复制。
您可以在 Jeff Bonwick 的博客上的这篇文章中阅读有关 ZFS 重复数据删除的所有信息。
大多数linux 虚拟化解决方案在虚拟化操作系统之间提供文件级 COW(从 WP 复制):
我在寻找更好的解决方案而不是我当前的解决方案时发现了这个问题,例如:
cp -al SOURCEDIRNAME copy.SOURCEDIRNAME
或在这一点上,我有一个带有一堆硬链接的结构副本。这工作相对较快,并且不需要多一倍的磁盘空间,因为我们不会复制所有文件。现在我可以在复制目录上做一些“东西”(比如
patch
或构建)。如果他们不修改原始文件,只需重命名它们和/或创建新文件。工作后,我有一些结果,可以删除复制目录并重新开始。如果您使用更复杂的工具并且不信任它们(或者您知道它们试图覆盖现有文件),您可能需要cowdancer。
尝试使用 UniouFS、AUFS 或Overlay Filesystem之一(取决于您的发行版支持哪个)
例如 docker 使用的 OverlayFS 作为合并层的驱动程序之一
覆盖文件系统
可能是 SVN 或其他版本控制工具(git、cvs)?