需求:
1
janus77 2021-06-08 11:03:36 +08:00
git ?
|
3
no1xsyzy 2021-06-08 11:12:10 +08:00 1
CoW 的话,ZFS 和 Btrfs 都能通过 dedup 来做到。
除此以外也可以用 overlayFS ? 说实话,第一反应是内存,fork() 就是 CoW 的。 |
4
HUNYXV 2021-06-08 11:12:20 +08:00
估计得自己造轮子
|
5
XiaoxiaoPu 2021-06-08 11:14:15 +08:00 1
文件路径对进程透明,需要 chroot
linux 下支持写时复制的文件系统,可以用 Btrfs 粗略看可行的方案,是使用 Btrfs 的快照功能,要启动进程前,创建一个新的快照,chroot 快照,启动进程 |
6
thunderw 2021-06-08 11:21:51 +08:00 1
我感觉你想要的就是 docker 的 Union FS 啊。
https://en.wikipedia.org/wiki/UnionFS |
7
SingeeKing 2021-06-08 11:28:20 +08:00
自己基于 FUSE 写一个不难,但不确定是否可以感知到读的进程
|
8
generic 2021-06-08 11:31:43 +08:00 via Android
overlayfs 。
|
9
jim9606 2021-06-08 11:45:37 +08:00 1
使用支持 Reflink 的文件系统,CoW 的文件系统是最佳方案( ZFS 、BtrFS 甚至不需要打开 dedup 都能做到),非 CoW 文件系统中 OverlayFS 、XFS 也可以支持
不同程序先通过 cp --reflink=always 创建轻量副本,之后所有修改都放在私有副本上进行。 不过需要注意这些方法都不可避免产生文件碎片,虽然节省空间但 IO 性能可能会下降。 |
10
masterclock 2021-06-08 11:46:44 +08:00 1
https://ostreedev.github.io/ostree/
好像用 ostree 可以搞定 |
11
yanqiyu 2021-06-08 14:14:06 +08:00 1
btrfs+snapshot/reflink+mountns?
做一个启动器,任务就是吧目标文件所在的子卷做一个快照或者路径做一个 reflink,然后创建 mountns 设置好新的挂载点保证对于程序透明,然后执行程序? |
12
muzuiget 2021-06-08 14:46:57 +08:00
应该是 overlayfs,相当于在一个文件系统快照上操作。
|
13
lqf96 2021-06-08 14:59:59 +08:00 via iPhone 1
再提供一个办法:lvm 有 block-level 的 cow 支持,可以适用各种文件系统,docker 应该也有相应的后端…
|
14
itplanes01 2021-06-09 00:11:58 +08:00 via Android
几周前装的 Fedora 34 btrfs 在安装软件时崩了,数据全无
|