🏷️为什么我的 UNRAID 不稳定、总出问题 —— 针对近期论坛反馈我的感受
00 分钟
2023-8-10
2023-8-27
type
status
date
slug
summary
tags
category
icon
password
本文章原文是我发布在 Unraid 中文板块的帖子
这些天在论坛看了不少关于 Unraid “失联”的问题,也有不少 2.5G 网卡使用上出现问题的情况,比如:
这里我想跟大家聊一针对近期这些问题的一些情况,如果你有注意过的话,基本上每一次版本更新,论坛上都会随之出现关于 2.5G 网卡的问题求助帖(尤其是 Realtek 的 2.5G 网卡),尤其是近期 6.12 版本出来之后,论坛上关于网络这一块的问题出现的更频繁了。
为什么会这样,为什么每一次系统新版本就会导致我系统出现问题,Unraid 系统做的就这么差么?
为了解答这个问题,这里我尝试从 Unraid 系统的背景开始把我知道的告诉大家,可能内容会有点长,但我觉得可能你看完之后会对 Unraid 有一个更全面的了解。
需要声明的是,我个人很喜欢 Unraid 系统,下面的表述多少会有带有个人情感的倾向,但我会尽可能站在中立的角度去描述事实。另一个我想表达的观点是,我从来不会无脑向别人推荐 Unraid,适合自己的才是最好的,我曾很认真的向别人推荐使用 Windows 系统来作为家庭 NAS 系统去使用,也有曾在我的建议下放弃 Unraid 而去使用群晖的例子。

1、首先,Unraid 系统诞生于 2005 年,是基于一个叫做 Slackware 的 Linux 发行版系统。

Slackware 诞生于 1993,是最早的 Linux 发行版之一,在官网上是这么来介绍这个系统的:
notion image
原文就不翻译了,我把上面官网的介绍进行总结,大家只需要知道以下几点:
  • 设计目标:Slackware 以易用性稳定性为双重首要目标,精心平衡了现代化和 Unix 系统的传统体验。
  • 设计哲学:从诞生之初,Slackware 一直致力于生产最具“UNIX风格”的Linux发行版,它不但符合已发布的 Linux 标准,而且一直以简单性稳定性为核心。
  • 使用体验:Slackware 不仅包括了最新流行的软件,还保留了经典的 Unix 风格,从而实现了简单易用灵活强大的完美结合。
  • 特点:Slackware Linux 可以在 Pentium (奔腾)系统上运行,一直到最新的 x86 和 x86_64 机器。
既然 Unraid 是基于 Slackware 的,我们对比来看下 Unraid 的官方介绍
notion image
Unraid 是一款嵌入式操作系统 ….. 通过使用具有最新硬件驱动程序的现代 Linux 内核,Unraid几乎可以在任何64位系统(x86_64)上运行,系统内存消耗最小 … Unraid自动选择适合大多数人需求的默认设置,但也允许您根据自己的喜好调整设置。这使 Unraid 在您需要的地方直观,在您需要的地方可调整
我们不难看出,Unraid 继承了 Slackware 的设计理念和优点:
  • 易用且灵活:不知道大家在使用 Unraid 的时候有没有这样的体会,就是 Unraid 在使用上是很直观的,就比如说给阵列添加存储、安装 Docker 或者虚拟机等。但与此同时,Unraid 也给高级用户提供了更多的可自定义的地方。比如除了基础的阵列功能,用户还可以通过缓存池(User-definded pool)创建多个 ZFS Raidz 阵列、BTRFS Raid 阵列等;除了从 CA 应用市场安装 Docker,还可以借助 Docker Compose 插件来进一步管理和部署 Docker ;对于虚拟机,我们还通过 XML 模板对虚拟机的各项配置进行调优,甚至还可以借助 Unraid 上的 Tips and Tweaks 插件对虚拟机性能进行优化(vm.dirty_ratio & vm.dirty_background_ratio)。这就是为什么说“这使 Unraid 在您需要的地方直观,在您需要的地方可调整”。
  • 简洁稳定:Unraid 保持了 Slackware 系统简洁稳定的特性。Unraid 的系统安装包只有几百兆的大小(最新的 6.12.3 版本 420M 大小,6.9.1 版本只有 244M 大小),但却可以运行在几乎所有 x86 的机器上。至于稳定性,我曾在 Unraid 官方论坛中看过一位国外用户使用四代的 Intel CPU 跑了十几年的 Unraid,我群里也有朋友稳定跑了一年多没关机的案例。Unraid 之所以能保持简洁稳定,是因为相较于其他发行版本的 Linux 系统,Unraid 去掉了很多不必要的功能,这使得 Unraid 保持了简洁的同时也更易于维护(当然,可能会有朋友不认为 Unraid 是稳定的,就比如最近常见“失联”问题,我后面会解释)。
综上,你可以看到 Unraid 作为 Slackware 这个系统的一个定制化系统,很好的继承了 Slackware 系统的设计理念和良好传统,这也是为什么 Unraid 作为一个收费的 NAS 系统能立足商业市场这么多年。

2、既然 Unraid 是简洁稳定的,那为什么我的系统经常出问题

这不是一个容易回答的问题,就好像我问你为什么我的 Windows 系统会蓝屏一样,而且“稳定”具体的定义也是一个比较大的话题。作者没办法解答所有的问题,但我会从一个比较典型的角度去尝试解释其中的原因,那就是硬件驱动

2.1、那么第一个问题,Unraid 是否在硬件驱动这一块做的不好导致了我的系统不稳定?

你会看到很多很多硬件在 Windows 系统上运行是没有任何问题的,但是放到 Unraid(或者其他 Linux )系统上时,就会出现不兼容、功能异常甚至直接不能用的情况,大多数情况下都是因为这个硬件的 Linux 驱动有问题或者没有得到优化。
前面说过,Unraid 几乎可以在任何 64 位系统(x86_64)上运行,这得益于 Unraid 系统的简洁。一个简洁的系统可以更好的去使用、维护和更新 Linux 内核,而越新的内核意味着可以编译越新的硬件驱动,从而可以支持更新的硬件(这符合 Slackware 系统的特点)。
Unraid 内核中的硬件驱动是从硬件厂商提供的 Linux 驱动编译而来,不管是 Intel 还是 Realtek(抑或是其他的硬件厂商),Unraid 每一次发布新版本都会将各个厂家发布的 Linux 驱动编译到内核中。
但这也会造成一个问题,那就是新的驱动有可能不对旧的设备进行兼容了,这也是为什么有些用户在更新 Unraid 版本之后发现某些硬件设备不能正常使用。但是从另一个角度考虑,如果你是驱动开发人员,你在开发驱动的时候是否会兼容过往的所有设备?
我有一台 iPhone 8 手机用了很多年,并且今年还能更新到最新的 IOS 系统,但我很清楚再往后苹果公司推出新的 IOS 系统的时候,很可能 iPhone 8 就不在新版 IOS 系统的硬件适配列表中了。
除了兼容性问题,还有可能是硬件厂商没有投入精力维护来 Linux 驱动。几乎每一次新版本发布,都会有不少人出现硬件驱动的问题,而其中以 Realtek 的 2.5G 网卡最为典型(我几乎可以肯定地说,每一次新版本出来,论坛上就一定会有关于 Realtek 网卡不能使用的求助帖)。
为什么 Realtek 的网卡会出现这种问题,Unraid 的官方是这么解释的:
It's because Realtek does not keep up properly with Linux kernel releases and they do not maintain the in-kernel driver. This has always been problematic. 这是因为Realtek没有与Linux内核版本保持适当同步,他们也没有维护内核驱动程序。这一直是个问题。
道理很简单,因为在硬件驱动上,Linux 是二等公民,一等公民是 Windows。
这涉及到厂商的市场策略,因为目标客户客户不一样。一个面向普通消费者的硬件产品,使用 Windows 系统的用户才是主要的消费群体,站在厂商的角度,保证这一群体用户的正常使用才是首要的任务。
因此在这个 2.5G 网卡的例子中,你就不难理解为什么 Realtek 的 Linux 驱动维护得不好了,这个道理同样适用于其他的硬件厂商 。
我想要说的是,当你选择一个面向普通消费者的硬件产品(以 Windows 用户为首),用在了以服务器领域为主的 Linux 操作系统上,就必然会存在因驱动出问题的可能性。
我见过太多类似的例子了,我曾经处理过一个因使用游戏主板而无法使用 CPU 核显的问题,因为只要一插上显卡主板就会自动屏蔽核显,并且 BIOS 中也没有提供选项来开启核显,最终跟厂商的技术工程师要了一个 BIOS 固件刷入之后才解决。

2.2、那么第二个问题,Unraid 是否有能力去替厂家来解决这个问题?

为了做对比,我们换个角度,如果一个硬件产品不是面对普通个人消费者的,比如同样是网卡,会是什么样的情况?
站在厂家的角度,当厂家在研发硬件产品的时候,比如说网卡,假设销售对象是数据中心市场,就不得不考虑去组建或者与驱动团队合作来研发高性能驱动,以便能够将其产品销售给数据中心市场。如果你只是造出了出色的芯片组,但是驱动程序不合格,那么数据中心的消费者会如何抉择是显而易见的。
所以,大家看到这里能理解这两者的区别了么?
Unraid 尽可能的去跟进最新的内核和最新的驱动,来保证用户能使用最新的设备,但当厂家提供的设备驱动一言难尽的时候,你认为 Unraid 是否有能力去替厂家来解决这个问题?
顺便一提,养驱动团队是一笔巨大的成本。
另外,在关于 2.5G 网卡的问题上,我曾在 TrueNAS 论坛上看到过一个这样一个观点,那就是“ 2.5G 网卡并不是技术的进步,而是一个市场骗局”,结合目前中国内地市场上大量商家推销 2.5G 网卡的情况,这个观点值得一看:
https://www.truenas.com/community/threads/nic-options-for-2-5gbe.93318/

3、你说得 Unraid 这么好,那为什么其他 XXX 系统就没有这个问题呢?

前面说过,Unraid 是一个简洁的系统,相比于其他的 Linux 发行版去掉了很多“不必要”的功能,你可以理解为这是一种取舍,因为精简不是没有代价的,所以我一直人为不能简单进行比较从而得出好不好的结论。
很多人都问过我 Unraid 与其他 XXX 系统比起来怎么样?哪个好用?哪个更稳定?
我的观点永远只有一个,适合自己的就是最好的。
如果你非得问哪个更好用,我只能说都好用

4、那 2.5G 网卡问题到底如何解决?

关于失联问题,可以参考这里
关于 2.5G 网卡跑不满速率的情况,如果你用的是 Intel 的 I-225 或者 I-226 网卡,目前这两个网卡在 Unraid 上会存在跑不满速率的问题,这个问题据我了解跟微码有关(参考文章)。目前解决办法可以通过更新厂商的 BIOS 版本来解决,或者在系统上安装微码(比如 apt install -y intel-microcode),但是 Unraid 不支持直接安装微码(不能的原因参考 HELP: UPGRADE CPU WITH MICROCODE.DAT FILE)。
举个实际例子,我去年买了台畅网的 N5105 V3 版(225 网卡),实测 Unraid 虚拟化 iKuai 直通网卡,会随机出现断流、跑不满速率的情况,而且是在我已经更新了厂家 BIOS (解决微码问题后)后依然存在。
但如果直接在设备上裸装 iKuai 则上述的现象就消失了,目前 N5105 上的 iKuai 已经稳定运行几个月了,再也没有出现断流、跑不满速率的情况,因为这个问题其实 ikuai 官方专门处理过,所以系统上就没有问题。因此总的来说,我猜测还是跟 Unraid 上的 Intel 网卡驱动有关系。
 

评论