type
status
date
slug
summary
tags
category
icon
password
如需技术支持,请点击 👉 联系方式
1. Unraid 的根文件系统运行在内存中
Unraid 系统与其它的 NAS 系统相比,最大的一个区别是 Unraid 的根文件系统(Root Filesystem)完全加载在内存中。也就是说,Unraid 每次启动时,它都会从 U 盘重新解压系统镜像到内存,并实时加载当前硬件所需的驱动。
当你开机时,Unraid 会在你的内存里划出一块区域,模拟成一个硬盘。然后,它把 U 盘里的压缩包解压,把所有的系统文件(
/ 目录下的所有东西)都释放到这个内存盘里。对于 Unraid 来说,内存就有点类似于 Windows 系统下的“C 盘”。你在系统里安装插件、修改非用户目录的文件,实际上都是在改内存里的数据。一旦断电重启,内存清空,这个“C 盘”就重置了。由于系统是加载到内存中运行,所以 Unraid 平时几乎不写入 U 盘。只有当你修改系统设置(比如添加用户、修改网络配置)时,它才会把配置写入其中。因此 U 盘的读写速度不影响系统的运行速度。U 盘不管是
2.0 还是 3.0 都对系统的运行速度没有实质影响,所以大家完全没有必要花钱买贵的 U 盘,即使是官方也推荐使用 2.0 的 U 盘来避免一些兼容性的问题。也没必要购买大容量的 U 盘,一般使用 8G 或者 16G 就完全够用了。
2. 为什么需要检测内存
由于 Unraid 运行在内存,内存的质量对 Unraid 的稳定性至关重要,甚至比对普通台式机或某些传统 NAS 系统更为敏感。因此如果你的内存质量不好或者出现问题,那么会直接导致系统出现不稳定的情况(例如 WebUI 界面加载缓慢或者停滞),严重的话会甚至会出现系统崩溃(常见如失联问题)或者数据丢失。
举例来说,如果内存有一小块坏了,正好那里存的是一个不重要的网页缓存,可能只是浏览器崩一下,系统还能跑;但如果坏块刚好位于存储系统指令的区域,整个系统可能会瞬间内核恐慌(Kernel Panic)、死机,或者 Web 管理页面打不开,导致你无法正常关机。这也是为什么不少朋友在内存出错的时候会发现,WebUI 无法正常打开或运行异常,但 Docker 或者虚拟机却不受影响。
由于内存问题容易被忽视,加上不了解 Unraid 的朋友不知道 Unraid 是运行在内存中的,因此在排查问题的时候往往没有从内存下手,从而造成了极大的困扰。
内存问题往往会造成系统莫名巧妙的崩溃或者无响应,所以如果你的 Unraid 系统时不时出现宕机或者没有反应,那么首要考虑的是硬件层面的问题,而硬件层面的问题你需要重点关注内存。
同时,如果说内存检测发现错误,那么就必须更换内存,即使只有一个坏块。
RANDOM REBOOTS - NO INFORMATION IN LOGS:Server restarting on its own, versus crashing or hanging, it's usually always a hardware or power issue, I would try with just one stick of RAM, if the same try a different one, that will basically rule out a RAM issue.
给大家介绍个案例,一位朋友的 Unraid 系统出现了系统崩溃的情况,找到我时他已经折腾了两三个星期,检测了系统的方方面面但都没有找出来是什么问题,最后通过内存检测才知道是内存不过关造成的。


3. 如何检测内存
需要特别说明的是,内存错误有时候只会在特定的条件下才会出现,因此内存错误检测是一门“不完美的科学”,换句话说,MemTest86 这个工具也不一定能百分百揪出内存错误。大家可以去参考博主的另一篇文章:《换了3个U盘还是提示损坏:因内存而导致的罕见Unraid崩溃问题》。
MemTest86 以及它的相关说明。
MemTest86 是一款专业的内存测试工具:
- 它是一个独立程序,它运行时不需要任何操作系统的支持(无论设备安装了何种操作系统或是否安装了操作系统),因此它能够运行在任何 PC 上。
- 该工具支持在 UEFI 系统上运行,并支持 Intel/AMD x86 和 x86-64 架构,以及 ARM64 架构。此外,它支持多线程,能够并发使用多个核心来测试内存。
- 需要注意的是,由于 UEFI 平台限制,MemTest86 无法重新映射自身来测试其当前占用的那部分内存区域。
- 目前根据官方说明,MemTest86 只支持运行在 UEFI 模式。
- 尽管 MemTest86 主要测试内存,但它在运行过程中也同时对其他关键硬件组件(如 CPU、L1/L2 缓存以及主板)进行压力测试。如果 MemTest86 成功运行了多次测试且没有报告错误,这间接保证了 CPU 在一定程度上运行正常。
- 当发现内存错误时,大多数情况是内存模块本身的问题。但有时,主板问题或组件不兼容也可能导致内存错误,。如果重新插拔内存模块无法解决问题,,通常需要更换内存模块来排除故障。
Unraid 自带有内存检测功能,在系统启动时选择 Memtest86+ 即可加载到内存检测界面,然后进行检测即可:

但本文着重介绍自行制作 USB 启动盘来检测内存的方法(同样也是使用的 Memtest86 )。
博主先前测试的时候发现 Unraid 自带的 Memtest86 会出现加载不了的情况,不知道是我自己的原因还是别的可能,所以如果你也出现和我一样无法使用自带的 Memtest86 ,那么你可以使用下面的方法去制作 USB 启动盘进行检测。
步骤很简单:
- 准备一个闲置的 U 盘(8G 大小即可,如果有重要数据记得备份,因为制作启动盘的时候会格式化)。
- 下载制作工具按照提示进行制作。

- 把 U 盘插上设备,在 BIOS 中将 U 盘设置为第一启动项进行启动。
- 进入到 Memtest86 系统界面之后选择
(S)tart Test开始检测,如下图所示:

4. 检测过程各项参数说明

运行参数说明
1️⃣ 系统与硬件基本信息 (左上角)
- PassMark MemTest86 V10.2 Free:软件版本。Free 版通常限制了一些高级功能(如 ECC 错误注入),但对于标准内存测试已足够。
- Clk/Temp (1390 MHz / 43C): CPU 当前的主频和温度。注意: 如果在测试过程中温度急剧上升,说明散热系统存在瓶颈,高温本身也会导致内存产生位翻转(Bit Flip)错误。
- L1/L2/L3 Cache:CPU 的三级缓存容量及其读写带宽。带宽数值(如 L1 的 128.7 GB/s)用于确认 CPU 缓存是否工作在正常性能水平。
- Memory (31.7G / 13.7 GB/s): 系统识别到的可用物理内存总量及当前内存带宽。如上图所示,总量 31.7G 说明系统安装了 32GB 内存(部分被硬件保留)。带宽 13.7 GB/s 是衡量内存吞吐量的关键指标。
2️⃣ 内存模组详细规格 (RAM Info)
此行信息直接读取自内存条的 SPD (Serial Presence Detect) 芯片:
- PC4-25600: 内存带宽标准,对应 DDR4-3200。
- DDR4 3200MHz: 内存代数及等效频率。
- 20-20-20-47: 内存主时序 (Primary Timings)。
- 依次代表:CL (CAS Latency) - tRCD - tRP - tRAS 。
- 这些数值越低,理论延迟越低,但对电压和颗粒体质要求越高。此处为 JEDEC 标准宽松时序,稳定性较高。
- SK Hynix HMAA2GU6CJR8N-XN: 内存颗粒制造商(海力士)及具体的模组型号。
3️⃣ CPU 信息 (右上角与中间)
- Intel 0000 1.40GHz: CPU 型号标识。
- 显示为
0000通常意味着这是一颗 工程样品 (ES - Engineering Sample) CPU,或者该版本的 MemTest86 数据库尚未收录此 CPU 的具体 ID 字符串。
- CPU Map (0123456789AB): 逻辑核心的映射图,共 12 个逻辑核心(对应 0-B)。
- CPUs Found:CPU 核心数。
- State (DWDWDWDWDWDW): 每个核心当前的测试状态。
- Started / Active(6): 当前有 6 个核心正在并发执行内存测试任务。MemTest86 在某些测试阶段会轮询核心或仅使用物理核心以避免超线程带来的资源争抢干扰测试准确性。
4️⃣ 测试进度与状态 (右上角与进度条)
- Pass 8%: 总进度。表示当前设定的所有测试循环(一共 4 轮)完成了 8%。
- Test 54%: 当前子项测试进度。表示正在进行的 “Test 1” 完成了 54%。
- Test 1 [Address test, own address, 1 CPU]: 当前正在运行的具体测试算法。
- Test 1 是地址测试,用于快速检测内存地址线的物理连通性,通常能迅速发现严重的硬件故障。
- Pattern: 当前写入内存用于比对的十六进制数据模式。
- RAM Temp:内存温度。
5️⃣ 统计与结果 (底部)
- Time (0:00:43): 测试已运行的持续时间。
- AddrMode: 64-bit:寻址模式,确认软件正以 64 位模式运行,能够访问 4GB 以上的内存空间。
- Pass: 1 / 4: 当前处于第 1 轮测试,计划总共运行 4 轮。
- 运维建议: 对于生产环境服务器,建议至少完成 1 个完整的 Pass。若需排查间歇性故障,建议运行 24 小时以上。
- Errors: 0: 最核心的指标。
- 此数值必须为 0。
- 任何非零数值均代表物理内存存在硬件故障、接触不良或频率/电压设置不稳定。MemTest86 发现的错误是不可接受的硬性错误。
如上图所示,显示测试刚刚开始(运行 43 秒),主要硬件参数识别正常(32GB DDR4 RAM @ 3200MHz),目前未发现错误。需等待至少一个完整的 Pass 完成(Pass 进度条到达 100% 且 Pass 计数变为 2/4)才能初步确认内存无故障。
MemTest86 的免费版本最多可以循环测试 4 遍,理论上来说,完整的跑完 4 轮测试基本就能保证结果了。
5. 检测结果说明
内存的检测时间通常会比较长(因为会检测很多遍),不同的内存大小、内存速度、CPU 速度、配置和软件等因素会影响检测所需的时间。在下面的例子中,16G 的内存花费了 4 个半小时,32G 的内存容量花费了大概 10 小时。
💯 如果检测顺利,内存检测出来没有问题,那么检测会提示 PASS 。

⚠️ 如果检测出来显示 FAIL ,那么也就意味着存在内存错误。


📑 测试结果/报告相关参数解读。

字段(Field) | 描述(Description) |
Test Start Time (测试开始时间) | 显示测试开始时的日期和时间。 |
Elapsed Time (耗时) | 显示测试运行的总时长(以秒为单位)。 |
CPUs Active (活跃 CPU 核心数) | 显示参与测试的 CPU 核心数量。 |
CPU Temperature Min/Max/Ave (CPU 温度) | 显示测试期间 CPU 的最低、最高和平均温度(如果可用)。 |
RAM Temperature Min/Max/Ave (内存温度) | 显示测试期间 RAM 的最低、最高和平均温度(如果 DIMM 支持且可用)。 |
# Tests Passed (通过的测试数量) | 显示测试序列中通过的测试数量及其百分比(例如:8/8 (100%))。 |
Lowest Error Address (最低错误地址) | 显示测试序列中通过的测试数量及其百分比(例如:8/8 (100%))。 |
Highest Error Address (最高错误地址) | 报告检测到的最高错误地址,。 |
Bits in Error Mask (错误位掩码) | 所有出现错误的比特位的掩码(十六进制表示)。 |
Bits in Error (错误比特数) | 针对所有错误实例,显示总错误比特数,以及每次独立错误发生的最小、最大和平均错误比特数。 |
Max Contiguous Errors (最大连续错误数) | 报告具有错误的最大连续地址数量,。 |
CPUs in Error (出错的 CPU 核心) | 列出检测到内存错误的 CPU 核心,。 |
ECC Correctable Errors (ECC 可纠正错误) | (如果是 ECC 内存,那么会列出该字段)ECC 硬件检测并已纠正的错误数量,。 |
ECC Uncorrectable Errors (ECC 不可纠正错误) | (如果是 ECC 内存,那么会列出该字段)ECC 硬件检测到但未被纠正的错误数量,。 |




6. 常见问题
Q:内存测试需要花多少时间?
A:具体时间没有一个统一衡量标准。内存的检测时间通常会比较长(因为会检测很多遍),不同的内存大小、内存速度、CPU 速度、配置和软件等因素会影响检测所需的时间。根据以往的一些案例,16G 的内存大概需要 4 个半小时,32G 大概 10 小时(如果快的话,32G 内存 6 小时也能够完成)。
Q:内存检测出错误,是不是就说明是内存自身的问题?
A:不一定。虽然大多数错误确实是由内存条本身故障引起的,但不排除以下几种情况会导致内存出现错误:
- 接触不良:很多内存问题是由接触不良引起的。尝试关机并重新安装内存条(最好擦一下金手指),然后再次运行测试。
- 非内存硬件问题: MemTest86 在测试时会隐式地对 CPU、L1/L2 缓存以及主板进行压力测试。如果这些组件不稳定,也可能导致内存测试报错。
- 兼容性或设置问题: 内存条本身可能没坏,但由于与主板不兼容,或者主板的内存时序设置过于激进,导致在全速运行时产生间歇性错误。读者可以查阅主板的用户手册,了解主板的内存支持列表(QVL),通常里面会列出主板测试通过的内存类型(DDR3/DDR4/DDR5)、最大容量、支持频率 (MHz),以及电压等信息,这是选择内存条最可靠的方式,确保与 CPU 和主板完美匹配,避免混用不同代的内存,并尽量匹配相同规格以发挥最佳性能。
Q:如果内存检测出错误,我如何知道是哪一根内存条的问题?
A:定位具体的故障内存条主要有软件自动识别和物理手动排查两种方式:
- 软件自动识别(针对 Pro/Site 版本):MemTest86 V10 及更高版本支持 DIMM 解码功能。它通过解析错误地址,尝试直接锁定物理插槽。
- 图形化摘要: 测试完成后,屏幕和 HTML 报告会显示一个图形化的摘要,标明每个插槽(如 DIMM_A1)的错误计数。
- ECC 信息: 如果你的硬件支持并启用了 ECC,系统可能会直接报告发生错误的通道(Channel)和插槽号(Slot)。
- 物理排查法(通用方法):如果你使用的是免费版,或者软件无法自动解码,建议按以下步骤操作:
- 重新插拔: 很多内存问题是由接触不良引起的。尝试关机并重新安装内存条,然后再次运行测试。
- 逐一测试: 这是最可靠的方法。如果系统有两根或更多内存,请将它们全部拔出,然后每次只插一根内存条进行测试。如果某一根报错而另一根不报错,即可确定故障点。
- 交叉验证: 有时问题出在主板插槽上。如果某根内存在 A 插槽报错,可以换到 B 插槽再试,以排除主板因素。
需要注意的是,虽然 MemTest86 报错通常意味着内存损坏,但也可能是因为主板兼容性或 CPU 缓存问题导致的,正如上面第二个问题所述。
Q:如果测试结果中出现一条检测错误,是不是就说明只有一根内存条存在问题?
A:不一定。虽然大多数错误确实是由内存条本身故障引起的,但出现一个错误并不意味着可以简单地断定“只有一根内存条坏了”。
以下是几种可能的情况:
- 非内存硬件问题: MemTest86 在测试时会隐式地对 CPU、L1/L2 缓存以及主板进行压力测试。如果这些组件不稳定,也可能导致内存测试报错。
- 兼容性或设置问题: 内存条本身可能没坏,但由于与主板不兼容,或者主板的内存时序设置过于激进,导致在全速运行时产生间歇性错误。
- 多条交互: 在多通道内存系统中,地址是交错分布的。一个逻辑地址的错误可能涉及多根内存条的协同工作。
- 工具限制: 除非你使用的是支持“DIMM 解码”的 Pro 或 Site 版本,否则免费版工具通常无法直接指出是哪根物理插槽报错。而且即使是专业版,在运行 Test 6(块移动)或 Test 14(DMA 测试)时也无法精确定位具体的内存条。
建议: 如果你看到了错误,最可靠的确认方法依然是我们在上一步讨论过的“物理排查法”:每次只插一根内存条进行完整测试。
Q:测试一段时间之后显示“PASS”是不是就证明内存没有问题?
A:不一定。
首先,先看一下界面是不是已经完成了所有测试,因可能“PASS”可能只是针对某一轮测试的结果,而不是全部。例如:

如上图所示,当前测试的总进度仅为
1% (Pass 1%),所以界面上显示的 PASS 只是对于 Test #1 这个测试子项而言(当前图片中正在进行的是测试子项 Test #2)。正常来说需要达到 Pass 100% 才代表整个测试已经完成。下图和上图是同一个测试,下图中就在测试进度达到 28%(
Pass 28%)时检测出了内存错误:
Test #2 测试子项中检测出了错误,并且错误的内存地址是 000d043f7f20 。如下图,
Pass 100% 才表示完成了所有的内存测试,并且最终提示 PASS 才意味着内存测试没有发现内存错误。但同样的,内存通过测试不代表不是内存的问题,上图出自博主的另一篇关于内存案例的文章——《换了3个U盘还是提示损坏:因内存而导致的罕见Unraid崩溃问题》。

Pass 100% 且最终显示 PASS 即表示测试过程中没有检测出内存错误。- 作者:JackieWu
- 链接:https://www.jackiewu.top/article/how-to-test-memory-on-unraid
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。











