首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让已经复制的文件共享片段(reflink)?

如何让已经复制的文件共享片段(reflink)?
EN

Unix & Linux用户
提问于 2022-02-06 10:05:39
回答 1查看 356关注 0票数 1

我每天将文件复制到不同的XFS卷中,如下所示:

代码语言:javascript
运行
复制
# on monday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/monday/huge.file
# on tuesday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/tuesday/huge.file

现在它占据了disk2上两个文件的全部大小。

在同一个分区上,我通常使用--reflink=auto,因此复制的文件共享碎片,只占用更改的块。但是,如果目的地位于不同的卷上,这是不起作用的,所以我需要一个reflink两个已经存在的副本的解决方案。

遗憾的是,cp并不像rsync (不支持reflink )那样只复制已更改的块,否则我会这样做:

代码语言:javascript
运行
复制
# on monday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/huge.file
cp --reflink=always /mnt/disk2/huge.file /mnt/disk2/monday/huge.file
# on tuesday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/huge.file
cp --reflink=always /mnt/disk2/huge.file /mnt/disk2/tuesday/huge.file
EN

回答 1

Unix & Linux用户

发布于 2022-05-14 17:24:58

我不知道xfs,但是btrfs有一个用于去重复的命令。请参阅https://btrfs.wiki.kernel.org/index.php/Deduplication

您可以独立于副本运行一个去重复步骤。

要做你直接要求的事情,你可以逆转你的过程。

类似于:

  1. 创建昨天副本中的ref-链接,以创建一个基线cp --reflink=a/mnt/disk2 2/mnt/huge.file/mnt/disk2 2/星期二/huge.file
  2. 从另一个位置读取源文件并将更新直接写入其中,比如: rsync -inplace-无完整文件/mnt/disk2 1/huge.file/mnt/disk2 2/星期二/huge.file

希望只有未修改的块将在星期一和星期二的备份之间按要求共享。

警告:我还没有试过这个,也不知道它真的会做你想做的事。

请参阅https://superuser.com/questions/576035/does-rsync-inplace-write-to-the-entire-file-or-just-to-the-parts-that-need-to

这可能与此无关,但也有一些关于将reflink支持直接添加到rsync的讨论。请参见:

我对那里的问题不太清楚。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/689508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档