路由与NAS 篇十三:解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

2022-06-05 16:38:55 59点赞 335收藏 46评论


本文字数 2900+,配图 22,预估阅读时间 7 ~ 9 分钟


写在前面

Unraid 与其他 Nas 最大的不同之一在于其特殊的阵列模式,也就是文件级别的 “RAID” 机制

  • 数据盘完全独立,单独读写也可以通过阵列读写,拔出来插到其他机器也能识别

  • 灵活的增减硬盘设置,加盘无需 rebuild 即可继续使用,拔盘也可以做到非常低成本

更详细的介绍,可以看我之前写过的文章:

路由与NAS 篇七:10分钟快速上手unRAID之基础篇(上)NOTE本文字数5000+,配图20+,预估阅读时间10~12分钟写在前面前面一篇介绍了我的NAS组装过程以及unRAID系统的安装、基础配置:这次准备分享一下我对unRAID学习上手、配置使用的过程因为篇幅原因基础篇分成上、下两篇(太长了我写得累,值友们看着也累)本篇主要分享的包括以下两大点:un丶Source| 104 评论73 收藏677查看详情

但同时,Unraid 这种特殊的阵列机制,也存在一些弊端,而其中最让人诟病的就是读写性能

接下来我以自己使用 unraid 的一些问题场景,分享一些思路以及工具,希望对大家有帮助

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

本文更多针对的是无缓存盘的情况,有缓存盘的场景自行斟酌

基础介绍及工具

系统文件盘

首先需要认识 Unraid 文件的一些细节区分(以下只是我自己随便取的名字,非官方,仅供参考)

类别存储介质说明
系统启动盘U盘系统本体及引导文件、license、用户配置等
系统文件盘建议使用 ssd 盘如容器镜像、虚拟机镜像、应用配置等等
用户数据盘通常是大容量 hdd 盘电影、电视剧、照片、音乐等等

系统启动盘与用户数据盘应该都比较好理解,那么什么是系统文件盘呢?

其主要就是 /mnt/user特定的目录:

目录 说明
appdata用于保存 docker 容器的持久化配置、数据等
isos系统安装的镜像
system/docker用于保存 dockerd 相关数据,包括模板、容器镜像、日志等等
system/libvirt用于保存 libvirt 一些相关数据
domains用于保存 kvm 系统镜像

这些目录保存的都是一些系统服务的元数据以及应用服务的配置文件等,可以比较明显的与电影、音乐、照片等区分开

unBALANCE 工具

unBALANCE 是一个为 unraid 阵列文件管理提供图形界面的插件,契合 unraid 阵列机制的多盘文件转移

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

unBALANCE 可在 unraid 社区 APP 商店中搜索并安装

安装完毕后到 PLUGINS 插件页面找到 unBALANCE 并点击图标运行

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

第一次需要配置启动 unBALANCE Server,选择 Yes 后点击 APPLY

然后就可以点击 Open Web UI 进如 unBALANCE 管理界面

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

这个插件核心就是做两件事情:

  • Scatter 文件打散,将指定硬盘目录下的文件打散到其他一块或多块硬盘上

  • Gather 文件聚集,将多块硬盘上特定目录文件聚集到一个硬盘上

unBALANCE 本质上是将你选择的文件/目录通过 rsync 命令同步指定的磁盘,而其方便之处在于:

  1. 能够与 unraid 阵列的逻辑结合,支持一到多的打散,以及多到一的聚集

  2. 支持界面化的操作,直接进度、历史查看等

具体的使用场景下文会提到,这里暂且不展开

独立系统文件盘

卡 IO 导致 CPU 100% 问题

对于大部分使用默认配置的 Unraid 玩家而言,系统文件盘与用户数据盘是合在一起的

这种情况下,系统服务的元数据读写与应用服务的数据读写其实都在 HDD 盘上

而 HDD 的读写性能是有限的,某些时候就容易出现资源争用,

导致出现卡 IO,整个系统 CPU 使用率 100%

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

实际上并不是 CPU 真的这么繁忙,大部分的 CPU 使用率是被 CPU_WAIT 占用:

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

也就是硬盘性能跟不上,导致 CPU 需要等待硬盘读写数据而被阻塞

解决方式就是用一块 IO 性能更好的 ssd 盘在存储这些数据,达到以下目的:

  1. 系统文件存在大量的小文件 IO,ssd 更强的 4k 随机读写性能更能满足这个场景

  2. 将系统文件读写与用户数据读写隔离,能同时利用上两块盘,以获取突破单盘的读写速度

使用 ssd 存储系统文件

停止 Unraid 阵列,并将新增 ssd 盘加入到阵列中:

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

之后启动阵列,如果你设置了启动阵列后自动启动 docker 及虚拟机,还需要先停掉:

  1. 停止 docker 服务:Settings -> Docker -> Enable Docker 设置为 No,点击 APPLY 保存

  2. 停止 VM 服务:Settings -> VM Manager -> Enable VMs 设置为 No,点击 APPLY 保存

以避免操作过程中出现非预期的文件读写导致异常

然后就可以通过 unBALANCE 的 GATHER 文件聚集功能,将系统文件目录转移到 ssd 盘上

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

  1. 勾选 4 个系统文件目录:appdata、domains、isos、system

  2. 点击 NEXT 进入第二步,然后选择 disk3 ssd 盘作为目标硬盘,这一步比较耗时

  3. 等 PLANING 执行完毕,就可以点击 NEXT 进入最后一步,取消 dry run,然后点击 PROCEED 开始转移

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

之后就会开始文件移动操作,可以看到相关的进度等等

设置系统文件盘独占 ssd

完成操作后,还需将系统文件目录设置为只存储在 ssd 盘上,以 system 目录为例

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

system 目录为例,在 SHARE 共享页面,选择该目录数据只存在 SSD 盘:

  • Included disk(s) 选择 Disk3

  • Excluded disk(s) 选择 Disk1, Disk2

保险起见,建议把 SMB 共享也关掉:

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

依次完成 system、appdata、isos、domains 这 4 个目录的调整

也建议调整其他的用户数据目录,把 disk3 加入到 Excluded disk(s) 里面,避免用户数据保存到 ssd 上

至此,独立系统文件盘就已经配置完毕,后续这些目录下的文件,也只会保存到 ssd 上。

系统文件盘替换

掉盘问题

在完成上述调整之后,用了快一年没啥大问题,但因为用的 ssd 拆机盘比较垃圾,最近出现了两次掉盘问题

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

具体问题就是:

  1. ssd 盘找不到了,unraid 阵列异常

  2. docker.img 是存放在这块盘上的,导致所有的容器都无法使用

  3. 可以打开 unraid 的管理后台,也可以 ssh 登录,但无法执行任何与阵列相关的操作

解决方式也很简单,直接关机重新拔插一下 ssd 盘再开机就可以识别出来,然后再启动阵列恢复

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

作为系统文件盘还是非常重要的,虽然每周都有备份,但是炸一次恢复成本还是挺高。

  • 需要停机操作,如果刚好不在家里恢复起来比较麻烦

  • 如果备份出问题,所有 docker 应用的数据全部丢失,像 transmission 几千个种子没了的话就…

把手头上新拆机的 东芝 Q 系列 pro 128G MLC 直接替换

同步数据

把新的 ssd 盘通过 sata 转 usb 加入阵列,再进行数据镜像同步(裸芯片好评)

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

停止阵列,然后将新的 USB ssd 盘加入阵列

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

启动阵列后,需要重新格式化才可使用,注意别启动 docker 及虚拟机服务

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

使用 unBALANCE 转移数据列出所有文件后,针对每个文件执行 rsync 同步,在这种硬盘对拷场景下收益太低

rsync -a /mnt/disk3/ /mnt/disk5

直接用 rsync 做硬盘目录镜像更方便,命令如上

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

替换硬盘

同步完数据,关机换盘

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

重启进入 unraid 管理后台,可以到看到阵列已经报错,这是符合预期的:

  • disk3 是原来联想 ST510 ssd 已经被拔走了

  • disk5 是新的东芝 ssd 盘,但因为连接方式从 USB 换成 Sata 导致标识符改变

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

进入 TOOLS - New Config 重新创建一个阵列配置

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

Preserve current assignments通常是选all,不过我没有校验盘缓存盘,选Data slots也行

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

回到阵列页面,可以看到之前的阵列配置已经没了,4 快盘都被当作 “新” 的硬盘处理

解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘

启动 array 之后,可看到之前设置的磁盘目录配置还是一样没有变化。 比如 appdata 目录还是在存放在 disk3 这块新的 ssd 盘上,这也是符合预期的



作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

1899元起

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

2499元起

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

1749元起

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

3499元起

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

2679元起

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

2799元起

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

2829元起

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

5899元起

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

1999元起

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

2499元起

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

4279元起

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

3279元起

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

1329元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

2190.84元起

sgwbox 拾光坞 N3 星光版V(瑞芯微RK3566,2G,支持docker)

sgwbox 拾光坞 N3 星光版V(瑞芯微RK3566,2G,支持docker)

385.78元起
46评论

  • 精彩
  • 最新
  • 还有ssd不建议放在Array里,因为unraid有bug,放在Array里的文件系统是不支持trim的,建议给ssd建一个独立的pool

    校验提示文案

    提交
    记得 6.9.x 已经修复了这个问题

    校验提示文案

    提交
    收起所有回复
  • 所以系统文件盘能不能单独RAID1呢?否则万一数据真恢复不出来怎么办?

    校验提示文案

    提交
    如果你的硬件支持 raid1 的话,可以直接在硬件层做(但大多数家用主板是不支持的)。软件层模拟的话,可以研究一下 zfs 插件,这部分我还没了解过,好像是可以做的..但不知道能不能用到系统文件盘上

    校验提示文案

    提交
    谢谢,有待学习 [害羞]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 请问使用unassign 插件挂载的远程目录,用QB下载时也是经常100%,有没办法解决?序列是用的固态盘

    校验提示文案

    提交
    unassign device 插件的方式是不经过 unraid 阵列的,直写对应设置,如果还是卡 IO 的话,要看看你的硬盘 IO 性能以及 qb 的设置了

    校验提示文案

    提交
    收起所有回复
  • 用cache不行么?

    校验提示文案

    提交
    用 cache 就是另外一个场景了,会比较复杂。用上 cache 要考虑各个目录的设置的缓存策略,并且如果你的系统文件目录最终还是跟用户数据放在一起,在 cache 写满的情况下可能会触发问题。从数据安全的角度,建议还是独立存储

    校验提示文案

    提交
    收起所有回复
  • 第一句话就说明了机制——独立存储空间 挺好的 很适合自己

    校验提示文案

    提交
    一开始没有分开,transmission 同时下载+校验就容易卡 IO [喜极而泣] 后面分开就好很多了

    校验提示文案

    提交
    收起所有回复
  • 这个和将SSD作为缓存,把系统文件只放在SSD盘中有什么区别?

    校验提示文案

    提交
    要看你目录设置的缓存策略,但实际上不太建议这么玩,如果你的系统文件目录缓存策略设置了 only,然后其他数据目录也用了缓存盘,在缓存盘写满了会导致系统文件写不进去报错。如果设置的是 prefer,在写满后会直接写回普通 sata 盘,速度降级

    校验提示文案

    提交
    可以建立多个缓存池,单独建立一个缓存池只存放系统文件不就好了,还能组raid1

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • ”把新的 ssd 盘通过 sata 转 usb 加入阵列”
    →为何要转USB后接入阵列?是没有空余的SATA接口了吗?

    校验提示文案

    提交
    是的..没错,4 口 sata 用完了(流下了没有钱的泪水.jpg

    校验提示文案

    提交
    收起所有回复
  • 打倒大傻!

    校验提示文案

    提交
    打倒大傻!

    校验提示文案

    提交
    大傻好惨... [高兴] [高兴]

    校验提示文案

    提交
    收起所有回复
  • unraid的shfs性能太差了,奔腾gold连千兆都跑不满。我一直都是关了用户共享直接开磁盘共享用的。如果想用RAID功能的话unraid也支持zfs

    校验提示文案

    提交
    是的 shfs 性能非常拉垮,目前是写入直接裸磁盘,读取再通过 shfs 目录共享做聚合读

    校验提示文案

    提交
    收起所有回复
  • 为什么拷盘要用rsync呢?

    校验提示文案

    提交
    1. 系统自带无需额外安装;2. 这种转移数据不建议直接 mv,还是复制比较稳;3. rsync 比 cp 最大的优势是能够做镜像同步、增量同步,而且是幂等操作;4. 想要绕过文件系统从底层存储对烤也行比如用 dd 命令之类的,但没必要也不推荐

    校验提示文案

    提交
    学到了,一直用unbalance,没想到还有这种操作

    校验提示文案

    提交
    收起所有回复
  • 所以这个系统还是没法和大厂的比

    校验提示文案

    提交
    也不能这么觉得,至少在 docker 方面,甩了群晖好几条街..只能说看使用场景吧

    校验提示文案

    提交
    收起所有回复
  • 我也是深受io问题困扰爱,不过我系统文件就是存在SSD上的,还是卡io

    校验提示文案

    提交
    阁下不会是千兆宽带吧... [皱眉]

    校验提示文案

    提交
    我也是系统专门放在ssd上,没有缓存盘和校验盘,千兆局域网传个文件写入不到60,读取100不到,CPU占用爆表。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 麻烦楼主,小主机mini和sata口两块硬盘已组合,如果要分开要如何操作,现在就是复制文件只有2.-30m

    校验提示文案

    提交
    确定想要保留的硬盘,然后通过 unbalance 把文件都聚集到这块硬盘上,再新建一个 array 配置,只把想要的那块盘加上,另外一个块盘不处理。最后 start

    校验提示文案

    提交
    收起所有回复
  • 青木堂众前来报道

    校验提示文案

    提交
    青木堂,是什么梗?

    校验提示文案

    提交
    这是一个神秘的组织

    校验提示文案

    提交
    收起所有回复
  • [献黄瓜] 来自青木堂的肯定

    校验提示文案

    提交
  • S佬牛*!!!来自青木堂滴关怀

    校验提示文案

    提交
  • 我一开始就是分开的,一块256G的固态专门用作系统数据存储

    校验提示文案

    提交
  • 我一直都是固态装系统文件,数据放hdd

    校验提示文案

    提交
  • 不能用usb盘直接放系统盘文件当系统盘吗?

    校验提示文案

    提交
  • 来来自小白的请教,汇聚转移domains文件夹时出现问题,unbalance提示文件夹有权限问题,而且目标硬盘列表中没有新增的那块ssd硬盘,前面三个文件夹是能正常转移到ssd中的,就这个文件夹出现问题。请问作者这个该如何处理 [喜极而泣]

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
335
扫一下,分享更方便,购买更轻松