加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

在Linux中“克隆”文件的最快方法是什么?

发布时间:2020-12-14 02:59:31 所属栏目:Linux 来源:网络整理
导读:我想使用不是“崩溃安全”的应用程序API;换句话说,如果应用程序崩溃,数据文件很可能被破坏且不可读. 文件本身是一个“元数据文件”,不应该变得非常大:最多几百MB. 我想做的是: 强制应用程序以“直接模式”访问文件(无操作系统缓存). 以常规“检查点”间隔
我想使用不是“崩溃安全”的应用程序API;换句话说,如果应用程序崩溃,数据文件很可能被破坏且不可读.

文件本身是一个“元数据文件”,不应该变得非常大:最多几百MB.

我想做的是:

>强制应用程序以“直接模式”访问文件(无操作系统缓存).
>以常规“检查点”间隔暂停更新
>执行flush()(某些数据可能会自动刷新)
>现在我知道文件是一致的,克隆它.
>如果有“旧克隆”删除它.
>继续对原始文件进行更改.
>循环.

我是否可以使用专用文件系统对文件进行某种“零拷贝”,并结合原始文件的修改扇区的写时复制,以使克隆“几乎免费”(使用最少的磁盘) IO)?

另外,我可以在不必分叉进程的情况下进行“克隆”吗? (我不知道Linux文件API是否提供“cp”系统调用).

解决方法

您可以使用LVM快照而不是克隆.如果出现问题,只需从克隆中复制文件即可.

有一个libdevmapper / libdevmapper-event-lvm2snapshot可能有助于以编程方式执行此操作(没有fork):http://sourceware.org/dm/

编辑:

如果你可以在这里改变你的程序是另一个解决方案
https://stackoverflow.com/questions/1565177/can-i-do-a-copy-on-write-memcpy-in-linux

mmap()文件两次,一次正常,一次使用MAP_PRIVATE.

这将避免lvm的外部性(esp性能)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读