2023.9 ZFS 能用于数据盘吗?关于 PVE 下 ZFS RAID 等相关 10 个疑问

241 天前
 totoro625

最近翻了一堆 Wiki/论坛,新 PVE 数据盘主观偏向于 ZFS ,目的是为了用上快照

在实际操作体验中,产生了一些疑问,在 Google 、ChatGPT 、Wiki 、官方论坛内解决了大部分问题,但仍有一些疑问希望能得到有用的答案:

Q1:对于特别热衷于备份的 PVE 用户,RAID or ZFS 是否有必要?

Q2:不适用 ECC 内存、RAID 卡的情况下,4 硬盘 RAID10 对比 ZFS(RAID-Z2)哪个好?

Q3:不适用 ECC 内存、RAID 卡的情况下,2 块硬盘 ZFS(Mirror)+1 块硬盘 ext4 备份 对比 2 块硬盘 RAID1+1 块硬盘 ext4 备份哪个好?

Q4:不启用重复数据删除的情况下,预留 8G 内存给 32T ZFS 存储池是否足够? zfs.arc_max 是否是刚性的?如果如果突发内存占用较大,PVE 系统可用内存不足是否会 boom ?

Q5:低内存条件下 ZFS L2ARC 是否有必要?官方推荐不大于 10 倍内存,如果分配 512G nvme 固态能否充分利用?

Q6:PVE 自带的 ZFS 会不会有坑?只用过 ext4 的一般 Debian 用户能否维护好?

Q7:用了 ZFS 之后如何备份 PVE 虚拟机比较优雅,如果打算异地备份,可以怎么操作?计划 导出 ZFS 的 snapshot 用 Restic 增量去重备份为一堆 128mb 大小的小文件再传输到各个备份点,减轻网络传输压力。

Q8:ZFS(RAID-Z2)不适合存放虚拟机数据,是否应将 VM 系统盘单独放在一个 SSD 上(或者两块 SSD ZFS Mirror)?

Q9:大量的小文件会影响 NFS 性能,具体需要多大的量会影响性能?

注:目前 1.2T 共计 182 万文件,如果 500 万小文件,会有影响吗?

Q10:PVE 下各个 VM 是否应该启用 SWAP ?能否使用内存膨胀替代 SWAP ?

Q11:我即将利用淘汰配置组一套全新的 PVE ,有什么建议给我的吗?

注:优先计划增加 UPS

注 2:已有 1 块 16T 机械硬盘,计划增加 3 块。当前重要数据 1.2T ,归档存储数据 0.5T ,不重要数据 6T ,备份数据若干

注 3:看了 DELL R730XD ,我这点数据量暂不考虑


PS:3 地 3 备+云备


正在运行的虚拟机:

Seafile 专业版,需用到 memcached 、elasticsearch 、Clamav 、OnlyOffice:8~12G 内存; 1.2T 重要数据,急需扩容

MT Photos ,需用到本地 OCR:3~6G 内存; 0.5T 重要数据

Debian 12 ,需用到 Docker ( Tailscale 、NGINX 、frpc ):2~8G 内存

Debian 12 ,跑一些其他服务:4~8G 内存

Openwrt ,512MB 内存,独占

以上服务共计占用物理内存 13G ,KSM 共享 5G ,SWAP2G

当前备份一次数据需用时 10 小时(内网 NFS:DS120J HDD )


现淘汰办公用机,增加部分硬件,搭建新的 PVE8.1 ,计划配置如下:

CPU:Intel i5-11400

主板:华硕 ROG STRIX B560-I GAMING WIFI

内存:英睿达 DDR4 3200 16G*2 无 ECC

固态:三星 256G + 2T

机械:HC550 16T*4 (计划购入)

电源:海盗船 RM750e

UPS:APC BR550G-CN (计划购入)

升级预留:一条不支持拆分的 pcie4.0*16 ,后期打算增加一条固态或者购入 PEX8748 等免拆分卡增加 4 条固态


计划如下:256G 固态 ext4 格式安装 PVE ,4 块 16T 机械用系统自带 ZFS(RAID-Z2)阵列,2T 固态作为全部虚拟机的系统盘,不开启直通,原 PVE 下 Seafile 和 MT Photos 转移到新 PVE 。

每日 ZFS snapshot 一次,每日 快照方式 备份一次全部虚拟机至 ZFS 下,用 restic 加密备份后,通过 NFS 备份至外部服务期,再通过云服务备份至网盘。(注:内网 1G ,外网上传 100M )

尝试过 PVE 安装 TrueNas core/scale ,PVE 挂载 NFS对 TrueNas 接触很少,需要直通硬盘,担心多一个环节多一份风险。

PVE 炸过很多个,已经有了充分的经验,裸机安装 TrueNas scale 可以考虑,但是比较谨慎。

2905 次点击
所在节点    ZFS
26 条回复
xomix
241 天前
裸机安装 TrueNas scale
内存给大点儿机械盘起飞
totoro625
241 天前
@xomix #1 现有配置 32G 内存,不打算新购(成本较大不如整套扔了换 REG ECC )
虚拟机要吃 12~18G 内存
xomix
241 天前
@totoro625 1T 机械硬盘 1g 缓存,缓存可用 ssd 或内存。你可以按需配裸机内存。反正我这边配下来机械硬盘 iSCSIWindows10 起飞
GrayXu
241 天前
你这有的问题已经是过去式的了,像 turenas 社区很多也是二手信息。比如 Q5 ,现在 ZFS 的大 L2ARC 已经不会明显退化了,能不能充分利用也是看你的 workload pattern 。
MatthewLuky
241 天前
Q4 实测会 boom
Q6 自带的 ZFS 性能不太好且调优比较麻烦,不如 truenas 方便
为什么不单独一个相当稳定的小机器开个 PBS 做备份,PBS 同样支持 ZFS
chronos
241 天前
Q1:对于特别热衷于备份的 PVE 用户,RAID or ZFS 是否有必要?
A1: 我倾向于上 RAIDZ, 因为备份在没有恢复之前无法提供服务。而 RAID 或 RAIDZ 可以在降级的情况下提供服务,而且 ZFS 有快照,透明压缩,数据校验(可以应对静默错误)。

Q2:不适用 ECC 内存、RAID 卡的情况下,4 硬盘 RAID10 对比 ZFS(RAID-Z2)哪个好?
A2: RAID10 的优势是恢复速度更快,但在坏了一块硬盘的情况下不能再坏同个 RAID1 区域的另一块硬盘。RAID-Z2 理论上能再坏任意一块。

Q3:不适用 ECC 内存、RAID 卡的情况下,2 块硬盘 ZFS(Mirror)+1 块硬盘 ext4 备份 对比 2 块硬盘 RAID1+1 块硬盘 ext4 备份哪个好?
A3: ZFS 的快照,透明压缩和数据校验都比 ext4 好,但 zfs 是 COW 的,某些应用上可能会不如 ext4 的性能好,需要实际跑一下测试。ECC 对所有的文件系统都有用,但没有 ECC 也可以上 ZFS ,这个不是必须的。

Q4:不启用重复数据删除的情况下,预留 8G 内存给 32T ZFS 存储池是否足够? zfs.arc_max 是否是刚性的?如果如果突发内存占用较大,PVE 系统可用内存不足是否会 boom ?
A4: 性能会下降,但这个不是刚性的。

Q5:低内存条件下 ZFS L2ARC 是否有必要?官方推荐不大于 10 倍内存,如果分配 512G nvme 固态能否充分利用?
A5: 不清楚

Q6:PVE 自带的 ZFS 会不会有坑?只用过 ext4 的一般 Debian 用户能否维护好?
A6: 我有两台 PVE 用着自带的 ZFS ,用了好多年了,没发现什么问题。

Q7:用了 ZFS 之后如何备份 PVE 虚拟机比较优雅,如果打算异地备份,可以怎么操作?计划 导出 ZFS 的 snapshot 用 Restic 增量去重备份为一堆 128mb 大小的小文件再传输到各个备份点,减轻网络传输压力。
A7: 虚拟机可以考虑一下 zvol, 通过 zfs set snapdev=visible data/vol 可以将快照显示出来。然后 restic 直接备份 zvol 的快照文件就行, restic 本身会根据块去重的。

Q8:ZFS(RAID-Z2)不适合存放虚拟机数据,是否应将 VM 系统盘单独放在一个 SSD 上(或者两块 SSD ZFS Mirror)?
A8: 理论上肯定是 SSD Mirror 性能更好,看你的虚拟机性能要求了。

Q9:大量的小文件会影响 NFS 性能,具体需要多大的量会影响性能?
A9: 如果用 ZFS 的话,不只是大量小文件会影响性能,还有长期使用后磁盘的碎片率上升也会影响这个。我这边目前是 10.5T 共 136 万个文件,暂时没看出有多大影响。

Q10:PVE 下各个 VM 是否应该启用 SWAP ?能否使用内存膨胀替代 SWAP ?
A10: 这个不太清楚,我一般会启用 SWAP ,减少实际的物理内存占用。

Q11:我即将利用淘汰配置组一套全新的 PVE ,有什么建议给我的吗?
A11:硬盘大小最好一致,ZFS 扩容不是很方便。但考虑到你有多处备份,真要扩容的时候不如直接清空重建。电源质量要过关,这个是硬盘杀手。机箱的散热也要保证,别让硬盘的温度太高了。
wccc
241 天前
pve 根目录所在系统 不推荐 zfs.
wccc
241 天前
zfs 可以增加 ssd 缓存 提升读取性能
q10 还是建议 swap. 内存膨胀 高负载的时候 我觉得反而性能影响更大
Rendex
241 天前
我记得是有说法 Truenas 加不加缓存其实区别不大,反而会有单盘缓存损坏数据报废的风险。还是推荐大内存会更好。
totoro625
241 天前
@wccc #7 PVE 根目录用 ext4 ,单独一块 SSD ,不放任何虚拟机,只有 swap 会读写这块硬盘

@wccc #8 计划增加一块 512G 缓存,到时候看一下缓存命中率就知道值不值了(这是 Q5 )
可以单独用一块 NVME 划独立的 swap 给每台机器,这样就不用担心内存膨胀后抢了 ZFS 的 ARC 导致整机 BOOM
totoro625
241 天前
@Rendex #9 ZFS 缓存通常指的是 ZFS cache 只读缓存,又名 L2ARC ,可以随意掉盘,只影响读取命中
会报废数据的是 SLOG ,同步写入时用的写缓存
oott123
241 天前
如果你使用 PVE 并且大量使用 QEMU 虚拟机,可以考虑使用 Promxmox Backup Server 进行增量备份。

LXC 用得多的话就不推荐了,没有额外好处。
shinko
240 天前
我的 AMD5825U 已经三个 M2 盘组了 Z1 用了快 1 年了。没用 ECC 内存,一共 64G
mxT52CRuqR6o5
240 天前
我觉得要么 unraid 要么 zfs ,raid 属于不上不下的方案
如果是想组固态阵列那不太用考虑 zfs 以外的方案,zfs 阵列可以 trim
totoro625
240 天前
@mxT52CRuqR6o5 #14 unRaid 入了正版,手上一堆零碎的小硬盘可以组起来用于备份,也不在乎速度
固态阵列太贵了,目前 3 个 m2 位,后期可能加钱加 3 条 m2 位+2 个 u2 位(等国产降价)
1423
240 天前
快照是用在什么场景的? 大文件的话保留旧版本浪费空间,小文件 HDD 读取又太慢
百万的小文件我的话更倾向于做成只读 iso 挂载后读取
我是极力避免在 HDD 上存小文件的
totoro625
240 天前
@1423 #16 快照主要用于给 PVE 下 QEMU 虚拟机做备份,不在乎空间浪费
小文件都是 Seafile 的文件存储导致的,基本都是增量,不清理回收站,并设置了很长时间的文件历史记录,数据都是纯新增,没有修改
该数据盘打算转移到 HDD 上,现有 SSD 只有 2T 太小了
ltkun
240 天前
用了 zfs 就离不开 zfs 了
目前两套 pve 系统都有 zfs 区别是主力机 2t 的软 raid1 ,19 年安装的时候也没有做 raid 的概念。今年上半年 2t 的 nvme 便宜就入了第二块组了软 raid 。数据盘是八块机械组混合 zfs 系统,四块 4t 和两块 8t 组了 raid6 ,两块 16t 的组了 raid1 。随时可以热升级,比如四块 4t 升级 8t ,不用动任何数据。cache 用了 1 块 1t 的 nvme ,内存目前 128g ,z390 民用平台只能这么多了。
后面新装系统就安装的时候就 zfs 了,12 块 512g 的 ssd 直接组了 raidz3 ,也是 z390 平台,只有 128g 内存,好想要个 256g 内存的民用平台。家用性能根本体验不出来,就是稳。cpu 是 9900t 和 k ,平时 cpu 都是个位数占用率,根本没有欲望升级。
GrayXu
227 天前
@MatthewLuky #5 好奇你说的 boom 场景具体是什么
MatthewLuky
226 天前
@GrayXu 其实很简单,虚拟机开机后占用一部分系统内存,ZFS 手动调了 Max ARC size ,相对于虚拟机内存+ZFS 最大内存 过分配 了,ZFS 跑起来能把系统内存占爆,只能硬重启,其他包括 SSH 都 refuse 。
不 过分配 的话正常来说没太大影响,就是 ZFS Max 这部分内存即使 ZFS 空闲状态不占用内存也无法使用。

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

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

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

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

© 2021 V2EX