我想使用不是“崩溃安全”的应用程序 API;换句话说,如果应用程序崩溃,数据文件很可能会损坏且无法读取。
该文件本身是一个“元数据文件”,不应变得很大:最大只有几百 MB。
我想做的是:
我可以使用一种特殊用途的文件系统,对文件进行某种“零复制”,并结合原始文件修改扇区的写时复制,以获得“几乎免费”的克隆(使用最少的磁盘) 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 的外部性(尤其是性能)
| 归档时间: |
|
| 查看次数: |
2503 次 |
| 最近记录: |