我想使用不“安全”的应用程序API; 换句话说,如果应用程序崩溃,则数据文件很可能被破坏且不可读。
该文件本身是一个“元数据文件”,不应该太大:几百MB的最大值。
我想要做的是:
我可以使用一个专门的文件系统,使文件“零复制”,结合原始文件的修改扇区的写时复制,使克隆“几乎空闲”(使用最less的磁盘IO)?
另外,我可以做“克隆”,而不必分叉过程? (我不知道Linux文件API是否提供了“cp”系统调用)。
您可以使用LVM快照来代替克隆。 如果出现问题,只需复制克隆中的文件。
有一个libdevmapper / libdevmapper-event-lvm2snapshot,这可能会有助于以编程方式执行此操作(无需fork): http : //sourceware.org/dm/
编辑:
如果你可以在这里改变你的程序是另一种解决scheme: https : //stackoverflow.com/questions/1565177/can-i-do-a-copy-on-write-memcpy-in-linux
mmap()文件两次,一次正常,一次与MAP_PRIVATE
。
这将避免lvm的外部性(特别是性能)
这里有一个不涉及LVM的快速build议。 使用R1Soft Hot Copy可以对有问题的文件系统执行一个或多个时间点快照。 查看提示页面 。 它使用写入时复制技术。 这是解决一些类似的问题 ,但也适用于你想要做的事情。
cp --reflink
或快照