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

2023-09-12 09:11:55 +08:00
 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 可以考虑,但是比较谨慎。

4432 次点击
所在节点    ZFS
34 条回复
xomix
2023-09-12 09:15:53 +08:00
裸机安装 TrueNas scale
内存给大点儿机械盘起飞
totoro625
2023-09-12 09:24:57 +08:00
@xomix #1 现有配置 32G 内存,不打算新购(成本较大不如整套扔了换 REG ECC )
虚拟机要吃 12~18G 内存
xomix
2023-09-12 09:26:38 +08:00
@totoro625 1T 机械硬盘 1g 缓存,缓存可用 ssd 或内存。你可以按需配裸机内存。反正我这边配下来机械硬盘 iSCSIWindows10 起飞
GrayXu
2023-09-12 09:45:06 +08:00
你这有的问题已经是过去式的了,像 turenas 社区很多也是二手信息。比如 Q5 ,现在 ZFS 的大 L2ARC 已经不会明显退化了,能不能充分利用也是看你的 workload pattern 。
MatthewLuky
2023-09-12 10:04:53 +08:00
Q4 实测会 boom
Q6 自带的 ZFS 性能不太好且调优比较麻烦,不如 truenas 方便
为什么不单独一个相当稳定的小机器开个 PBS 做备份,PBS 同样支持 ZFS
chronos
2023-09-12 10:22:55 +08:00
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
2023-09-12 10:25:03 +08:00
pve 根目录所在系统 不推荐 zfs.
wccc
2023-09-12 10:28:02 +08:00
zfs 可以增加 ssd 缓存 提升读取性能
q10 还是建议 swap. 内存膨胀 高负载的时候 我觉得反而性能影响更大
Rendex
2023-09-12 10:36:59 +08:00
我记得是有说法 Truenas 加不加缓存其实区别不大,反而会有单盘缓存损坏数据报废的风险。还是推荐大内存会更好。
totoro625
2023-09-12 10:37:59 +08:00
@wccc #7 PVE 根目录用 ext4 ,单独一块 SSD ,不放任何虚拟机,只有 swap 会读写这块硬盘

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

LXC 用得多的话就不推荐了,没有额外好处。
shinko
2023-09-12 15:31:12 +08:00
我的 AMD5825U 已经三个 M2 盘组了 Z1 用了快 1 年了。没用 ECC 内存,一共 64G
mxT52CRuqR6o5
2023-09-12 15:40:06 +08:00
我觉得要么 unraid 要么 zfs ,raid 属于不上不下的方案
如果是想组固态阵列那不太用考虑 zfs 以外的方案,zfs 阵列可以 trim
totoro625
2023-09-12 15:55:19 +08:00
@mxT52CRuqR6o5 #14 unRaid 入了正版,手上一堆零碎的小硬盘可以组起来用于备份,也不在乎速度
固态阵列太贵了,目前 3 个 m2 位,后期可能加钱加 3 条 m2 位+2 个 u2 位(等国产降价)
1423
2023-09-12 16:59:48 +08:00
快照是用在什么场景的? 大文件的话保留旧版本浪费空间,小文件 HDD 读取又太慢
百万的小文件我的话更倾向于做成只读 iso 挂载后读取
我是极力避免在 HDD 上存小文件的
totoro625
2023-09-12 18:13:30 +08:00
@1423 #16 快照主要用于给 PVE 下 QEMU 虚拟机做备份,不在乎空间浪费
小文件都是 Seafile 的文件存储导致的,基本都是增量,不清理回收站,并设置了很长时间的文件历史记录,数据都是纯新增,没有修改
该数据盘打算转移到 HDD 上,现有 SSD 只有 2T 太小了
ltkun
2023-09-12 21:57:57 +08:00
用了 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
2023-09-26 11:03:29 +08:00
@MatthewLuky #5 好奇你说的 boom 场景具体是什么
MatthewLuky
2023-09-26 17:08:46 +08:00
@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