V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
totoro625
V2EX  ›  ZFS

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

  •  1
     
  •   totoro625 · 253 天前 · 3019 次点击
    这是一个创建于 253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近翻了一堆 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 )

    备份时间 10h


    现淘汰办公用机,增加部分硬件,搭建新的 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 可以考虑,但是比较谨慎。

    26 条回复    2024-03-25 08:52:32 +08:00
    xomix
        1
    xomix  
       253 天前
    裸机安装 TrueNas scale
    内存给大点儿机械盘起飞
    totoro625
        2
    totoro625  
    OP
       253 天前
    @xomix #1 现有配置 32G 内存,不打算新购(成本较大不如整套扔了换 REG ECC )
    虚拟机要吃 12~18G 内存
    xomix
        3
    xomix  
       253 天前
    @totoro625 1T 机械硬盘 1g 缓存,缓存可用 ssd 或内存。你可以按需配裸机内存。反正我这边配下来机械硬盘 iSCSIWindows10 起飞
    GrayXu
        4
    GrayXu  
       253 天前   ❤️ 1
    你这有的问题已经是过去式的了,像 turenas 社区很多也是二手信息。比如 Q5 ,现在 ZFS 的大 L2ARC 已经不会明显退化了,能不能充分利用也是看你的 workload pattern 。
    MatthewLuky
        5
    MatthewLuky  
       253 天前   ❤️ 1
    Q4 实测会 boom
    Q6 自带的 ZFS 性能不太好且调优比较麻烦,不如 truenas 方便
    为什么不单独一个相当稳定的小机器开个 PBS 做备份,PBS 同样支持 ZFS
    chronos
        6
    chronos  
       253 天前   ❤️ 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 扩容不是很方便。但考虑到你有多处备份,真要扩容的时候不如直接清空重建。电源质量要过关,这个是硬盘杀手。机箱的散热也要保证,别让硬盘的温度太高了。
    wccc
        7
    wccc  
       253 天前
    pve 根目录所在系统 不推荐 zfs.
    wccc
        8
    wccc  
       253 天前
    zfs 可以增加 ssd 缓存 提升读取性能
    q10 还是建议 swap. 内存膨胀 高负载的时候 我觉得反而性能影响更大
    Rendex
        9
    Rendex  
       253 天前
    我记得是有说法 Truenas 加不加缓存其实区别不大,反而会有单盘缓存损坏数据报废的风险。还是推荐大内存会更好。
    totoro625
        10
    totoro625  
    OP
       253 天前
    @wccc #7 PVE 根目录用 ext4 ,单独一块 SSD ,不放任何虚拟机,只有 swap 会读写这块硬盘

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

    LXC 用得多的话就不推荐了,没有额外好处。
    shinko
        13
    shinko  
       252 天前   ❤️ 1
    我的 AMD5825U 已经三个 M2 盘组了 Z1 用了快 1 年了。没用 ECC 内存,一共 64G
    mxT52CRuqR6o5
        14
    mxT52CRuqR6o5  
       252 天前
    我觉得要么 unraid 要么 zfs ,raid 属于不上不下的方案
    如果是想组固态阵列那不太用考虑 zfs 以外的方案,zfs 阵列可以 trim
    totoro625
        15
    totoro625  
    OP
       252 天前
    @mxT52CRuqR6o5 #14 unRaid 入了正版,手上一堆零碎的小硬盘可以组起来用于备份,也不在乎速度
    固态阵列太贵了,目前 3 个 m2 位,后期可能加钱加 3 条 m2 位+2 个 u2 位(等国产降价)
    1423
        16
    1423  
       252 天前
    快照是用在什么场景的? 大文件的话保留旧版本浪费空间,小文件 HDD 读取又太慢
    百万的小文件我的话更倾向于做成只读 iso 挂载后读取
    我是极力避免在 HDD 上存小文件的
    totoro625
        17
    totoro625  
    OP
       252 天前   ❤️ 1
    @1423 #16 快照主要用于给 PVE 下 QEMU 虚拟机做备份,不在乎空间浪费
    小文件都是 Seafile 的文件存储导致的,基本都是增量,不清理回收站,并设置了很长时间的文件历史记录,数据都是纯新增,没有修改
    该数据盘打算转移到 HDD 上,现有 SSD 只有 2T 太小了
    ltkun
        18
    ltkun  
       252 天前 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 都是个位数占用率,根本没有欲望升级。
    GrayXu
        19
    GrayXu  
       238 天前
    @MatthewLuky #5 好奇你说的 boom 场景具体是什么
    MatthewLuky
        20
    MatthewLuky  
       238 天前
    @GrayXu 其实很简单,虚拟机开机后占用一部分系统内存,ZFS 手动调了 Max ARC size ,相对于虚拟机内存+ZFS 最大内存 过分配 了,ZFS 跑起来能把系统内存占爆,只能硬重启,其他包括 SSH 都 refuse 。
    不 过分配 的话正常来说没太大影响,就是 ZFS Max 这部分内存即使 ZFS 空闲状态不占用内存也无法使用。
    gridsah
        21
    gridsah  
       236 天前   ❤️ 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 ,我这点数据量暂不考虑
    gridsah
        22
    gridsah  
       236 天前
    >首先,L2ARC 的独立性极强,它缓存的多是小文件,偏向于提升随机读写性能。

    改成 偏向于提升随机读的性能
    gridsah
        23
    gridsah  
       236 天前
    突然想起来,影响 L2ARC cache 行为的那个参数是 secondarycache ,primarycache 控制的是 ARC 的缓存行为....再更正一下
    winson030
        24
    winson030  
       58 天前
    @xomix 请问,我有四块盘,两块 16t ,两块 3t 。zfs 选择 raid 类型有什么建议吗?上网查到 raidz 会按照最小硬盘的容量确定 pool 的容量,四块盘组 raidz 最后只有 3t ,感觉非常亏。
    totoro625
        25
    totoro625  
    OP
       58 天前
    @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 或直接挂载为普通目录
    xomix
        26
    xomix  
       58 天前
    @winson030 不建议选择 zfs ,zfs 和软 raid 建议都选择相同容量硬盘。如果你有不同容量硬盘要用,建议是 16T 两块做条带,3T 两块做 raid0 ,重要数据放 3T ,注意 3T 报警,16T 做 iSCSI 给虚拟机用,你只需要备份几份虚机安装完再封装的信息就够了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:50 · PVG 10:50 · LAX 19:50 · JFK 22:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.