我正在尝试复制某些文件/目录,但据我所知的几种方式,它们似乎都不理想。
例如,btrfs可以使用cp --reflink=auto
快速生成文件的文件副本。
我尝试过的
- 符号链接:不好。重命名文件,链接断开。
- 硬链接:更好,但仍然不好。更改一个文件会更改另一个文件,而我不一定要更改另一个文件。
- 创建数据集的快照,然后克隆快照:可以,但是效果不佳。通常,我不是在寻找整个数据集的副本,也不是让副本像另一个数据集一样工作。然后在克隆/快照/原始文件之间存在父/子关系,据我所知,即使不是不可能打破的,这也很难。
- 使用
zfs send/receive
和启用dedup,将数据集复制到新的数据集:这避免了使用克隆的父/子关系,但是仍然不必要地创建另一个数据集,并且仍然受累于必须100%读取文件和再次引用而不是写入的块。 - 复制文件并让dedup发挥作用:这可行,但是速度很慢,因为必须100%读取文件,然后再次引用块而不是写入。
zfs的发送/接收以及物理复制或rsync的速度进一步恶化,因为大多数事物都被压缩存储,并且在读取过程中必须先解压缩,然后在dedup插入引用重复块之前进行压缩。
在我的所有研究中,我都无法找到与btrfs中--reflink的简单性相似的远程内容。
那么,有没有一种方法可以在ZFS中创建复本?还是“物理地”复制并让dedup做其工作是唯一的真实选择?