在实际操作体验中,产生了一些疑问,在 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 可以考虑,但是比较谨慎。
1
xomix 2023-09-12 09:15:53 +08:00
裸机安装 TrueNas scale
内存给大点儿机械盘起飞 |
2
totoro625 OP @xomix #1 现有配置 32G 内存,不打算新购(成本较大不如整套扔了换 REG ECC )
虚拟机要吃 12~18G 内存 |
3
xomix 2023-09-12 09:26:38 +08:00
@totoro625 1T 机械硬盘 1g 缓存,缓存可用 ssd 或内存。你可以按需配裸机内存。反正我这边配下来机械硬盘 iSCSIWindows10 起飞
|
4
GrayXu 2023-09-12 09:45:06 +08:00 1
你这有的问题已经是过去式的了,像 turenas 社区很多也是二手信息。比如 Q5 ,现在 ZFS 的大 L2ARC 已经不会明显退化了,能不能充分利用也是看你的 workload pattern 。
|
5
MatthewLuky 2023-09-12 10:04:53 +08:00 1
Q4 实测会 boom
Q6 自带的 ZFS 性能不太好且调优比较麻烦,不如 truenas 方便 为什么不单独一个相当稳定的小机器开个 PBS 做备份,PBS 同样支持 ZFS |
6
chronos 2023-09-12 10:22:55 +08:00 1
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 扩容不是很方便。但考虑到你有多处备份,真要扩容的时候不如直接清空重建。电源质量要过关,这个是硬盘杀手。机箱的散热也要保证,别让硬盘的温度太高了。 |
7
wccc 2023-09-12 10:25:03 +08:00
pve 根目录所在系统 不推荐 zfs.
|
8
wccc 2023-09-12 10:28:02 +08:00
zfs 可以增加 ssd 缓存 提升读取性能
q10 还是建议 swap. 内存膨胀 高负载的时候 我觉得反而性能影响更大 |
9
Rendex 2023-09-12 10:36:59 +08:00
我记得是有说法 Truenas 加不加缓存其实区别不大,反而会有单盘缓存损坏数据报废的风险。还是推荐大内存会更好。
|
10
totoro625 OP |
11
totoro625 OP @Rendex #9 ZFS 缓存通常指的是 ZFS cache 只读缓存,又名 L2ARC ,可以随意掉盘,只影响读取命中
会报废数据的是 SLOG ,同步写入时用的写缓存 |
12
oott123 2023-09-12 11:12:41 +08:00 1
如果你使用 PVE 并且大量使用 QEMU 虚拟机,可以考虑使用 Promxmox Backup Server 进行增量备份。
LXC 用得多的话就不推荐了,没有额外好处。 |
13
shinko 2023-09-12 15:31:12 +08:00 1
我的 AMD5825U 已经三个 M2 盘组了 Z1 用了快 1 年了。没用 ECC 内存,一共 64G
|
14
mxT52CRuqR6o5 2023-09-12 15:40:06 +08:00
我觉得要么 unraid 要么 zfs ,raid 属于不上不下的方案
如果是想组固态阵列那不太用考虑 zfs 以外的方案,zfs 阵列可以 trim |
15
totoro625 OP @mxT52CRuqR6o5 #14 unRaid 入了正版,手上一堆零碎的小硬盘可以组起来用于备份,也不在乎速度
固态阵列太贵了,目前 3 个 m2 位,后期可能加钱加 3 条 m2 位+2 个 u2 位(等国产降价) |
16
1423 2023-09-12 16:59:48 +08:00
快照是用在什么场景的? 大文件的话保留旧版本浪费空间,小文件 HDD 读取又太慢
百万的小文件我的话更倾向于做成只读 iso 挂载后读取 我是极力避免在 HDD 上存小文件的 |
17
totoro625 OP @1423 #16 快照主要用于给 PVE 下 QEMU 虚拟机做备份,不在乎空间浪费
小文件都是 Seafile 的文件存储导致的,基本都是增量,不清理回收站,并设置了很长时间的文件历史记录,数据都是纯新增,没有修改 该数据盘打算转移到 HDD 上,现有 SSD 只有 2T 太小了 |
18
ltkun 2023-09-12 21:57:57 +08:00 via Android 1
用了 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 都是个位数占用率,根本没有欲望升级。 |
19
GrayXu 2023-09-26 11:03:29 +08:00
@MatthewLuky #5 好奇你说的 boom 场景具体是什么
|
20
MatthewLuky 2023-09-26 17:08:46 +08:00
@GrayXu 其实很简单,虚拟机开机后占用一部分系统内存,ZFS 手动调了 Max ARC size ,相对于虚拟机内存+ZFS 最大内存 过分配 了,ZFS 跑起来能把系统内存占爆,只能硬重启,其他包括 SSH 都 refuse 。
不 过分配 的话正常来说没太大影响,就是 ZFS Max 这部分内存即使 ZFS 空闲状态不占用内存也无法使用。 |
21
gridsah 2023-09-28 16:51:14 +08:00 1
Q1:对于特别热衷于备份的 PVE 用户,RAID or ZFS 是否有必要?
RAID 是高可用方案,不是备份方案。 如果你的服务不能中断,至少上个 raid5 ,掉一块盘可以以降级模式跑,服务不中断。况且有足够的备份,也不怕 raid5 连炸 2 块盘,无非整个机器掉线一两天用备份重建一下。多出的一块盘能多出好多空间。 raid 可以用 ZFS 来做。rsync.net 这家专做数据备份的公司从 2012 年就把 ZFS 用于生产了。用来存数据还是很稳的。 当然我主要看重 ZFS 的快照和文件系统级别的 checksum (防止 bit rotate)。 我对数据完整性要求高,所以即使只有单盘也会上 ZFS 的 raid0 (strip)。 Q2:不适用 ECC 内存、RAID 卡的情况下,4 硬盘 RAID10 对比 ZFS(RAID-Z2)哪个好? ZFS 并不一定需要 ECC 内存,而且 ZFS 并不推荐使用 RAID 卡。但是推荐使用 HBA 卡或者 RAID 卡的 HBA 模式。 需要读写性能 raid10 ,需要安全性 raidz2 。我自己是 4 盘 raidz2 ,但是如 Q1 所说,我有足够的备份,也可以接受 raid5 连炸两盘的情况。所以我准备在 raidz2 的磁盘空间使用 70% 以后,用冷备数据重建为 4 盘 raidz (raid5)。 Q3:不适用 ECC 内存、RAID 卡的情况下,2 块硬盘 ZFS(Mirror)+1 块硬盘 ext4 备份 对比 2 块硬盘 RAID1+1 块硬盘 ext4 备份哪个好? 推荐 ZFS 。我需要 ZFS 的快照和文件系统级别的 checksum (防止 bit rotate)。 我对数据完整性要求高,所以即使只有单盘也会上 ZFS 的 raid0 (strip)。我自己用两年多了。没啥毛病。 Q4:不启用重复数据删除的情况下,预留 8G 内存给 32T ZFS 存储池是否足够? zfs.arc_max 是否是刚性的?如果如果突发内存占用较大,PVE 系统可用内存不足是否会 boom ? Q5:低内存条件下 ZFS L2ARC 是否有必要?官方推荐不大于 10 倍内存,如果分配 512G nvme 固态能否充分利用? 如果你加 L2ARC 的话,要把 ARC 和 L2ARC 一起考虑。 首先,L2ARC 的独立性极强,它缓存的多是小文件,偏向于提升随机读写性能。L2ARC 和 ARC 的联系并不是特别紧密。但是,L2ARC 的索引在内存里,所以它会和 ARC 抢内存。 现在假设你的 4*8T 硬盘创建出的存储池有 15T (raid10 或 raidz2),但是你只有 8G 内存可以用作 ARC+L2ARC 。 primarycache=all 下 8G ARC 的命中率会比较难看。我推荐把 primarycache 的值改成 metadata 这样 ARC 的内存占用就比较小,可以把内存匀给 L2ARC ,然后 L2ARC 设置 primarycache=all 。 我的 raidz2 (4*8t) 15T 左右,配 30G ARC (primarycache=all) 才有 80%+ 的命中率。raidz2 也有 L2ARC ,给了 180G ,命中率 20% 左右。可以看到 ARC 利用率很高。L2ARC 利用率不高,可以接受,因为我的 raidz2 上随机读写比较少,多数是顺序读写。 你这个 15T 可用空间配 8G ARC..... 命中率有多难看我都不敢想 hhhhhh https://note.lishouzhong.com/article/wiki/zfs/ZFS%20%E9%92%88%E5%AF%B9%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF%E7%9A%84%E4%BC%98%E5%8C%96%E6%96%B9%E6%B3%95.html 你可以在这看到我写的关于 primarycache 相关的东西。 其实你不用太关心那个 10 倍的数据。 https://note.lishouzhong.com/article/wiki/zfs/ZFS%20%E6%8A%80%E5%B7%A7%E4%B8%8E%E7%9F%A5%E8%AF%86.html#org7c13e2d 这是计算 L2ARC 占多少内存的方法,你可以用这个算法算出你的 L2ARC 要用多少内存。 Q6:PVE 自带的 ZFS 会不会有坑?只用过 ext4 的一般 Debian 用户能否维护好? 我目前有一台 DELL R220 装了 PVE ,系统盘默认的 raid0 在跑,小问题有一点,出在 ZFS 和 systemd 的配合上面,影响数据的问题没有。 Q7:用了 ZFS 之后如何备份 PVE 虚拟机比较优雅,如果打算异地备份,可以怎么操作?计划 导出 ZFS 的 snapshot 用 Restic 增量去重备份为一堆 128mb 大小的小文件再传输到各个备份点,减轻网络传输压力。 不了解,我一直是 PVE 本地的第二个 raid1 的 zpool 存备份文件。 Q8:ZFS(RAID-Z2)不适合存放虚拟机数据,是否应将 VM 系统盘单独放在一个 SSD 上(或者两块 SSD ZFS Mirror)? 没有什么不适合存放虚拟机数据的,担心性能的话,加个 SLOG 就行。我只是把数据库之类对 I/O 敏感的 VM 放在了 SSD 上,跑应用的都放在 raidz2 上了。后来给 raidz2 配了 SLOG 之后,把数据库 VM 放在 raidz2 上的性能表现也变得可以接受了。 看这里 https://note.lishouzhong.com/article/wiki/zfs/ZFS%20ZIL(SLOG)%20%E7%BB%84%E4%BB%B6.html Q9:大量的小文件会影响 NFS 性能,具体需要多大的量会影响性能? 注:目前 1.2T 共计 182 万文件,如果 500 万小文件,会有影响吗? 我是 NFS 重度用户,没这个说法。NFS 的瓶颈在于硬盘或者网络。小文件影响硬盘 I/O 进而影响 NFS 效能,并不是小文件直接对 NFS 产生影响。 FreeBSD 上 NFS 几个核心服务的文档是我翻译的,你需要可以看这里。文档里压根没提小文件。 https://note.lishouzhong.com/article/translation/sitemap-index.html Q10:PVE 下各个 VM 是否应该启用 SWAP ?能否使用内存膨胀替代 SWAP ? 我的使用经验是,SWAP 可以搞小点。一般我只给 VM 最大 2G SWAP (8G ram 1G swap, 16G ram 2G swap),作用是降低一下突发的大内存申请、或者大量内存操作带来的压力。如果 VM 真的开始杀进程了,SWAP 根本救不回来,重启吧。 Q11:我即将利用淘汰配置组一套全新的 PVE ,有什么建议给我的吗? 讲道理,如果你的新 PVE 够用的话,淘汰的配置可以装 PBS 专门用作备份。定时开机,定时跑任务,但是这确实有点浪费。 注:优先计划增加 UPS UPS 很重要很重要很重要很重要很重要很重要 一定要优先 (我手里两台 APC bk650m2-ch) 注 2:已有 1 块 16T 机械硬盘,计划增加 3 块。当前重要数据 1.2T ,归档存储数据 0.5T ,不重要数据 6T ,备份数据若干 注 3:看了 DELL R730XD ,我这点数据量暂不考虑 |
22
gridsah 2023-09-28 16:59:31 +08:00
>首先,L2ARC 的独立性极强,它缓存的多是小文件,偏向于提升随机读写性能。
改成 偏向于提升随机读的性能 |
23
gridsah 2023-09-28 21:42:30 +08:00
突然想起来,影响 L2ARC cache 行为的那个参数是 secondarycache ,primarycache 控制的是 ARC 的缓存行为....再更正一下
|
24
winson030 277 天前
@xomix 请问,我有四块盘,两块 16t ,两块 3t 。zfs 选择 raid 类型有什么建议吗?上网查到 raidz 会按照最小硬盘的容量确定 pool 的容量,四块盘组 raidz 最后只有 3t ,感觉非常亏。
|
25
totoro625 OP @winson030 #24 你找的 raidz 教程不对,一般不推荐人用 zfs
如果需要相关教程的话可以看一下这两个: A. https://dapeng.li/learning/zfs/index.html B. https://note.lishouzhong.com/article/wiki/sitemap-index.html 多块盘容量不一致不推荐使用 ZFS ,比较推荐你使用 Unraid ,如果一定要 ZFS 可以 两块 16T 的可以分为 2 个 3T 分区,2 个 13T 分区 这样你可以用 4 个 3T 分区组 ZFS ,raidz1 可用空间是 9T ,raidz2 可用空间是 6T 剩下两个 13T 分区随意折腾,可以 raid1 或直接挂载为普通目录 |
26
xomix 276 天前
@winson030 不建议选择 zfs ,zfs 和软 raid 建议都选择相同容量硬盘。如果你有不同容量硬盘要用,建议是 16T 两块做条带,3T 两块做 raid0 ,重要数据放 3T ,注意 3T 报警,16T 做 iSCSI 给虚拟机用,你只需要备份几份虚机安装完再封装的信息就够了。
|
27
dilidilid 138 天前
@winson030 上面都回的什么呀,你这种情况可以两块 16T 一个 vdev ,两块 3T 一个 vdev ,总空间 19T ,任何一个 vdev 两块盘一起挂整个 pool 就挂了。但说句实话你那两块 3T 太鸡肋了,不如卖了,就用两块 16T 做 ZFS 镜像。
|
29
xinmans 113 天前
上万兆网卡的话,sata 盘组 zfs ( 16T*8 ),能跑满万兆吗?是否需要加 nvme ssd 的 cache ?
|
30
totoro625 OP @xinmans #29 16T*4 RAID-Z2 + 写缓存 32G*2 + 读缓存 1T + 内存 64G
磁盘测速:fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --size 100GB --bs=4m --iodepth=1 --readwrite=write (第二次 read ) WRITE: bw=265MiB/s (278MB/s), 265MiB/s-265MiB/s (278MB/s-278MB/s), io=100GiB (107GB) READ: bw=365MiB/s (383MB/s), 365MiB/s-365MiB/s (383MB/s-383MB/s), io=100GiB (107GB) 测试了一下固态,读 3G 写 400M |
31
xinmans 112 天前
@totoro625 16T*8 ,RAIDZ2 ,ARC 缓存 9.8G ,内存 20G ,Swap 15G
WRITE: bw=265MiB/s (278MB/s), 265MiB/s-265MiB/s (278MB/s-278MB/s), io=100GiB (107GB), run=386739-386739msec READ: bw=799MiB/s (838MB/s), 799MiB/s-799MiB/s (838MB/s-838MB/s), io=100GiB (107GB), run=128115-128115msec 写性能和你差不多,读性能翻倍了,可能是 8 盘位的原因(盘位翻倍了)。 |
32
xinmans 112 天前
看来组个万兆局域网,可以轻松跑慢万兆吧,读文件和编辑视频文件都会很爽
|