关于文件系统 cow

344 天前
YUyu101  YUyu101

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

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