Lazy loaded image
其他资讯
🩱unRAID内存的重要性以及内存测试方法
字数 3627阅读时长 10 分钟
2023-9-10
2025-12-15
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 即可加载到内存检测界面,然后进行检测即可:
notion image
但本文着重介绍自行制作 USB 启动盘来检测内存的方法(同样也是使用的 Memtest86 )。
博主先前测试的时候发现 Unraid 自带的 Memtest86 会出现加载不了的情况,不知道是我自己的原因还是别的可能,所以如果你也出现和我一样无法使用自带的 Memtest86 ,那么你可以使用下面的方法去制作 USB 启动盘进行检测。
步骤很简单:
  1. 准备一个闲置的 U 盘(8G 大小即可,如果有重要数据记得备份,因为制作启动盘的时候会格式化)。
  1. 下载制作工具按照提示进行制作。
    1. notion image
  1. 把 U 盘插上设备,在 BIOS 中将 U 盘设置为第一启动项进行启动。
  1. 进入到 Memtest86 系统界面之后选择 (S)tart Test 开始检测,如下图所示:
    1. notion image

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
notion image
⚠️ 如果检测出来显示 FAIL ,那么也就意味着存在内存错误。
notion image
报错的内存地址
报错的内存地址
📑 测试结果/报告相关参数解读。
notion image
字段(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 硬件检测到但未被纠正的错误数量,。
notion image
notion image
notion image
notion image
上一篇
常见问题-7:共享文件夹旁边的感叹号是怎么回事
下一篇
新手教程:什么是校验盘,校验盘有什么作用

评论
Loading...