![如何在存档创建过程中让 tar 动态硬链接相同的内容?](https://linux22.com/image/62868/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AD%98%E6%A1%A3%E5%88%9B%E5%BB%BA%E8%BF%87%E7%A8%8B%E4%B8%AD%E8%AE%A9%20tar%20%E5%8A%A8%E6%80%81%E7%A1%AC%E9%93%BE%E6%8E%A5%E7%9B%B8%E5%90%8C%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我怎样才能tar
(或Linux上常见的任何其他程序,例如pax
)在存档创建过程中动态硬链接重复内容?
也就是说,我想避免预先进行硬链接,而是想tar
处理它。
那可能吗?如何?
答案1
目前使用 GNU tar 还不可能做到这一点,但事情是存在的:
- https://github.com/stfp/tar-dedup:带有实验性 --dedup-filter 命令的修补 GNU tar
- http://zbackup.org/它吃并吐出焦油格式的流并进行重复数据删除
请注意,硬链接和重复数据删除不具有相同的语义,需要另一种 tar 节点类型来表示“重复数据”,以便存档提取过程能够正确地重新创建重复(从而独立存在)文件;这将创建与大多数标准工具(GNU tar、pax 等)不兼容的 tar 存档,这将是一个大胆的举动。
让我坚持一下:如果你能够用硬链接文件同化欺骗,那么你在归档提取时就会遇到问题:*它们真的是像 Git 存储库那样的硬链接文件吗?那么它们应该真正重新创建为硬链接文件,否则恢复的 Git 存储库将无法工作? * 或者它们是否确实是相同的文件,如果它们被恢复为硬链接,则恢复的存档可能会出现重大数据泄漏(想象一下您在归档时同化了相同的 /etc/passwd 文件,将它们恢复为具有多个硬链接的单个文件:一个一个虚拟机中的修改在另一个虚拟机中可见!)