路由与NAS 篇十三:解决Unraid卡IO导致CPU爆满问题—unBALANCE独立系统文件盘
本文字数 2900+,配图 22,预估阅读时间 7 ~ 9 分钟
写在前面
Unraid 与其他 Nas 最大的不同之一在于其特殊的阵列模式,也就是文件级别的 “RAID” 机制:
数据盘完全独立,单独读写也可以通过阵列读写,拔出来插到其他机器也能识别
灵活的增减硬盘设置,加盘无需 rebuild 即可继续使用,拔盘也可以做到非常低成本
更详细的介绍,可以看我之前写过的文章:
但同时,Unraid 这种特殊的阵列机制,也存在一些弊端,而其中最让人诟病的就是读写性能。
接下来我以自己使用 unraid 的一些问题场景,分享一些思路以及工具,希望对大家有帮助
本文更多针对的是无缓存盘的情况,有缓存盘的场景自行斟酌
基础介绍及工具
系统文件盘
首先需要认识 Unraid 文件的一些细节区分(以下只是我自己随便取的名字,非官方,仅供参考)
类别 | 存储介质 | 说明 |
---|---|---|
系统启动盘 | U盘 | 系统本体及引导文件、license、用户配置等 |
系统文件盘 | 建议使用 ssd 盘 | 如容器镜像、虚拟机镜像、应用配置等等 |
用户数据盘 | 通常是大容量 hdd 盘 | 电影、电视剧、照片、音乐等等 |
系统启动盘与用户数据盘应该都比较好理解,那么什么是系统文件盘呢?
其主要就是 /mnt/user
特定的目录:
目录 | 说明 |
---|---|
appdata | 用于保存 docker 容器的持久化配置、数据等 |
isos | 系统安装的镜像 |
system/docker | 用于保存 dockerd 相关数据,包括模板、容器镜像、日志等等 |
system/libvirt | 用于保存 libvirt 一些相关数据 |
domains | 用于保存 kvm 系统镜像 |
这些目录保存的都是一些系统服务的元数据以及应用服务的配置文件等,可以比较明显的与电影、音乐、照片等区分开
unBALANCE 工具
unBALANCE 是一个为 unraid 阵列文件管理提供图形界面的插件,契合 unraid 阵列机制的多盘文件转移
unBALANCE 可在 unraid 社区 APP 商店中搜索并安装
安装完毕后到 PLUGINS 插件页面找到 unBALANCE 并点击图标运行
第一次需要配置启动 unBALANCE Server,选择 Yes 后点击 APPLY
然后就可以点击 Open Web UI 进如 unBALANCE 管理界面
这个插件核心就是做两件事情:
Scatter 文件打散,将指定硬盘目录下的文件打散到其他一块或多块硬盘上
Gather 文件聚集,将多块硬盘上特定目录文件聚集到一个硬盘上
unBALANCE 本质上是将你选择的文件/目录通过 rsync 命令同步指定的磁盘,而其方便之处在于:
能够与 unraid 阵列的逻辑结合,支持一到多的打散,以及多到一的聚集
支持界面化的操作,直接进度、历史查看等
具体的使用场景下文会提到,这里暂且不展开
独立系统文件盘
卡 IO 导致 CPU 100% 问题
对于大部分使用默认配置的 Unraid 玩家而言,系统文件盘与用户数据盘是合在一起的
这种情况下,系统服务的元数据读写与应用服务的数据读写其实都在 HDD 盘上
而 HDD 的读写性能是有限的,某些时候就容易出现资源争用,
导致出现卡 IO,整个系统 CPU 使用率 100%
实际上并不是 CPU 真的这么繁忙,大部分的 CPU 使用率是被 CPU_WAIT 占用:
也就是硬盘性能跟不上,导致 CPU 需要等待硬盘读写数据而被阻塞
解决方式就是用一块 IO 性能更好的 ssd 盘在存储这些数据,达到以下目的:
系统文件存在大量的小文件 IO,ssd 更强的 4k 随机读写性能更能满足这个场景
将系统文件读写与用户数据读写隔离,能同时利用上两块盘,以获取突破单盘的读写速度
使用 ssd 存储系统文件
停止 Unraid 阵列,并将新增 ssd 盘加入到阵列中:
之后启动阵列,如果你设置了启动阵列后自动启动 docker 及虚拟机,还需要先停掉:
停止 docker 服务:Settings -> Docker -> Enable Docker 设置为 No,点击 APPLY 保存
停止 VM 服务:Settings -> VM Manager -> Enable VMs 设置为 No,点击 APPLY 保存
以避免操作过程中出现非预期的文件读写导致异常
然后就可以通过 unBALANCE 的 GATHER 文件聚集功能,将系统文件目录转移到 ssd 盘上
勾选 4 个系统文件目录:appdata、domains、isos、system
点击 NEXT 进入第二步,然后选择 disk3 ssd 盘作为目标硬盘,这一步比较耗时
等 PLANING 执行完毕,就可以点击 NEXT 进入最后一步,取消 dry run,然后点击 PROCEED 开始转移
之后就会开始文件移动操作,可以看到相关的进度等等
设置系统文件盘独占 ssd
完成操作后,还需将系统文件目录设置为只存储在 ssd 盘上,以 system 目录为例
以 system
目录为例,在 SHARE 共享页面,选择该目录数据只存在 SSD 盘:
Included disk(s) 选择 Disk3
Excluded disk(s) 选择 Disk1, Disk2
保险起见,建议把 SMB 共享也关掉:
依次完成 system、appdata、isos、domains 这 4 个目录的调整
也建议调整其他的用户数据目录,把 disk3 加入到 Excluded disk(s) 里面,避免用户数据保存到 ssd 上
至此,独立系统文件盘就已经配置完毕,后续这些目录下的文件,也只会保存到 ssd 上。
系统文件盘替换
掉盘问题
在完成上述调整之后,用了快一年没啥大问题,但因为用的 ssd 拆机盘比较垃圾,最近出现了两次掉盘问题
具体问题就是:
ssd 盘找不到了,unraid 阵列异常
docker.img 是存放在这块盘上的,导致所有的容器都无法使用
可以打开 unraid 的管理后台,也可以 ssh 登录,但无法执行任何与阵列相关的操作
解决方式也很简单,直接关机重新拔插一下 ssd 盘再开机就可以识别出来,然后再启动阵列恢复
作为系统文件盘还是非常重要的,虽然每周都有备份,但是炸一次恢复成本还是挺高。
需要停机操作,如果刚好不在家里恢复起来比较麻烦
如果备份出问题,所有 docker 应用的数据全部丢失,像 transmission 几千个种子没了的话就…
把手头上新拆机的 东芝 Q 系列 pro 128G MLC 直接替换
同步数据
把新的 ssd 盘通过 sata 转 usb 加入阵列,再进行数据镜像同步(裸芯片好评)
停止阵列,然后将新的 USB ssd 盘加入阵列
启动阵列后,需要重新格式化才可使用,注意别启动 docker 及虚拟机服务
使用 unBALANCE 转移数据列出所有文件后,针对每个文件执行 rsync 同步,在这种硬盘对拷场景下收益太低
rsync -a /mnt/disk3/ /mnt/disk5
直接用 rsync 做硬盘目录镜像更方便,命令如上
替换硬盘
同步完数据,关机换盘
重启进入 unraid 管理后台,可以到看到阵列已经报错,这是符合预期的:
disk3 是原来联想 ST510 ssd 已经被拔走了
disk5 是新的东芝 ssd 盘,但因为连接方式从 USB 换成 Sata 导致标识符改变
进入 TOOLS - New Config 重新创建一个阵列配置
Preserve current assignments通常是选all
,不过我没有校验盘缓存盘,选Data slots也行
回到阵列页面,可以看到之前的阵列配置已经没了,4 快盘都被当作 “新” 的硬盘处理
启动 array 之后,可看到之前设置的磁盘目录配置还是一样没有变化。 比如 appdata 目录还是在存放在 disk3 这块新的 ssd 盘上,这也是符合预期的
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
Kyriosli
校验提示文案
buyornot
校验提示文案
Ryff5417
校验提示文案
8_m_g
校验提示文案
Open_Your_Mind
校验提示文案
Sylcent
校验提示文案
hrbagang
→为何要转USB后接入阵列?是没有空余的SATA接口了吗?
校验提示文案
NFspring
校验提示文案
Kyriosli
校验提示文案
值友2333764270
校验提示文案
灵KOYB
校验提示文案
蓝白潘帕斯
校验提示文案
yinhao
校验提示文案
图不图
校验提示文案
潇湘君
校验提示文案
JavyLiu
校验提示文案
有轱辘的才是车
校验提示文案
我就是cy
校验提示文案
loserrr
校验提示文案
jie775008
校验提示文案
_1kb
校验提示文案
大熊本熊
校验提示文案
devenhc01
校验提示文案
jie775008
校验提示文案
loserrr
校验提示文案
buyornot
校验提示文案
yinhao
校验提示文案
我就是cy
校验提示文案
有轱辘的才是车
校验提示文案
蓝白潘帕斯
校验提示文案
灵KOYB
校验提示文案
值友2333764270
校验提示文案
Kyriosli
校验提示文案
Kyriosli
校验提示文案
JavyLiu
校验提示文案
NFspring
校验提示文案
hrbagang
→为何要转USB后接入阵列?是没有空余的SATA接口了吗?
校验提示文案
Sylcent
校验提示文案
Open_Your_Mind
校验提示文案
8_m_g
校验提示文案