关于文件系统 cow

57 天前
 YUyu101

zfs 是不是没有命令进行 cow 的复制啊,还是说只有开启去重后才能达到类似的效果,我查到 btrfs 是有 cp -reflink 的,但 zfs 貌似没有。 另一个问题是微软的 refs 也有 cow ,那通过 powershell 或界面复制能达到 cp -reflink 这种效果吗,还是说只能靠 win server 上的定时去重任务来做。

1618 次点击
所在节点    NAS
8 条回复
juranjue
57 天前
zfs 整个文件系统就是机遇 cow 机制,并且无法关闭。
guoyijun163
57 天前
openzfs 2.2 支持了 block clone, 不过貌似有 bug 又给关上了
bjfane
57 天前
refs 不是说还不完全稳定的么
YUyu101
57 天前
@juranjue 但直接复制的话不是 cow ,网上搜到 btrfs 倒是有这功能
juranjue
57 天前
@YUyu101 是我理解错了 reflink 的功能,相当于 ZFS 对单个文件进行 Deduplication
Jirajine
57 天前
Cow == copy on write
指的是 write 的过程中会发生 copy (一般来说即把覆盖写入已有数据的请求重定向到空白区块)
而不是 copy 的过程中有什么特别的行为。snapshot/dedup/cp -reflink 等等是根据这种特性(被覆盖的数据仍然存在、且是 immutable 的)实现的不同的功能。
显然不是每个 Cow 的文件系统都实现了每个 Cow 可能实现的功能。如果你要 shallow copy,硬链接或许就足够;如果你要以 copy on write 的语义创建文件的多个副本,snapshot 也可以达到。
YUyu101
57 天前
@Jirajine 清楚了,感谢,目前是在 zfs 上用的硬链接,snapshot 貌似也不能对单个文件使用,感觉不太便利。
laminux29
57 天前
1.楼主需要的,其实是 zfs 的实时去重功能,当新建 zfs pool 后,是需要手动开启的:
zfs set dedup=on New-ZFS-Pool-Name

2.COW ,或者说 Copy on Write ,这个名字是有问题的,因为它没考虑到对原始文件的相同区域 write 了相同的 data ,相当于原始文件没有发生任何更改,此时就不需要对原始文件进行复制出新版本的操作。

更严谨的叫法,应该是 Copy on Update:COU 。

也就是说,只有当一个原始文件的某一个引用,对其进行修改时,才能对原始文件,进行复制出新版本的行为。修改操作主要有 3 种:改动已有字节、append 、删除并新建相当于 realloc

3. ZFS 是目前地球上最强单机 FS ,不仅是因为它支持实时去重,而且支持实时 zstd 或 lz4 压缩、支持 raid 、支持热备盘、支持 cache disk 分层存储、支持独立读写存储介质隔离。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1023227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX