二手 GMKTec NucBox M6 残次内存条导致 Windows 和 Linux 系统无法开机或运行时卡死解决方案

二手 GMKTec NucBox M6 残次内存条导致 Windows 和 Linux 系统无法开机或运行时卡死解决方案

二手 GMKTec NucBox M6 残次内存条导致 Windows 和 Linux 系统无法开机或运行时卡死解决方案

#GMK, #GMKTec NucBox M6, #MiniPC, #迷你主机, #Crucial, #Crucial Memory, #英睿达内存, #时序, #SPD


参数

这个是闲鱼上购买的二手 GMK M6
中央处理器(CPU)  AMD Ryzen™ 5 6600H
图像处理器(GPU)  AMD Radeon™ 660M(6核1900MHz)
内存/RAM          Crucial 12g*2,24GB DDR5 5600
可扩展最大内存大小  SO-DIMM*2,MAX 96GB;DDR5 4800
存储/ROM          PCIe 3.0* M.2 2280 SSD MICRONTECHNOLOGY 512GB
内置存储最大可扩展  支持SSD 2280(PCIE4.0*4)*2 MAX 8TB
图形输出          通过HDMI+DP+USB4.0输出
网络              WiFi 6E+BT5.2
电源              DC IN 19V 6.32A 120W
以太网口          Giga LAN(RJ45)*2 2.5G
机身尺寸          128.8*127*47.8mm
裸机重量          528克
操作系统          支持WINDOWS 11 pro/linux
BIOS Version    1.03
EC FW Version   1.12


起因

一开始我在闲鱼上购买的这台GMK M6,花了1400¥,主要目的是为了编译安卓镜像的环境并测试 android + termux 运行原生 docker 的可行性

之后就用于 docker 家用服务器用于处理一些视频图片音乐等数据了,用了两个月,就在前天开机自启动时无法再继续开机了,卡死了远程无效,icmp 协议也无法 ping 通,当时我还以为是物理网络的问题,直到我连接显示器看到系统溃败,那时我仍以为是频繁开机自启动导致的驱动问题,并进行了一些列软件和硬件方面的测试

官方 Windows 11 Pro 系统开始崩溃,每次开机都报各种错误,每次开机报的错都不同,比如

	- IRQL NOT LESS
	- KERNEL SECURITY
	- WATCHDOG TIMEOUT
	- SYSTEM THREAD EXCEPTION

我本以为是系统本身的问题,后续又测试安装过 ubuntu 22.04 24.04 25.10、Debian 12 13、Fedora 40 41 42 甚至是 Arch Linux 结果无一例外,安装流程都无法通过且报有相同的错误,比如

	Segfault at [...] in libsystemd-shared-255.so [...] likely on CPU 5 (core 2, socket 0)
    ...
	[ 1.679878] Hardware name: GMKTec NucBox M6/GMKTec, BIOS 103 05/24/2024
	[ 1.679880] <IRQ>
	[ 1.679906] </IRQ>
	[ 1.679907] <TASK>
	[ 1.685279] Disabling IRQ #41
    ...
	UBSAN: shift-out-of-bounds in ... amdgpu ...


在懊悔之中反复重启与偶然发现得到的思路

我这才明白问题的严重性,一开始我担心是 bios 坏了,重启按 F7 进 bios 控制界面,访问没问题,那 cpu 呢?可是 bios 界面可以清晰的检测到 cpu ,那是不是硬盘问题?可是bios也可以完整的检测到,当到了内存,等等!为什么内存那一栏的频率显示的是 N/A 这是什么鬼?这时我仍以为是机器运转灰尘太多导致内存条金手指接触不良,于是找个橡皮擦对着金手指反复擦拭,重新拔插,但没有任何效果,唉,我那个时候很痛苦,对自己贪图便宜的后悔以及对闲鱼卖家的憎恨,还有过去不好的记忆冲击,我的痛苦,持续着,即使沉浸于痛苦之中也在绝望的测试着,唉,难道要花一台机器的价格购买两条内存条,显然我没有这个钱了,我还没有找到工作,这本来就是痛苦的,绝望的测试着。。。

其实通过 参数 可以很明显看到,我购买的二手 GMK M6 自带的双条内存条是英睿达12g ddr5 5600,问题也就在于此,根据 官方GMK M6内存扩展信息 可知内存支持其实是 4800,不单单如此,市面上根本没有卖单条 12g 内存条,也就是说,这两根英睿达内存条可能是自制仿制的又或者是某种厂商专用的测试款,一开始购买的时候就应该警惕这种24GB内存的配额,如果是双12GB就应该立刻放弃采购。唉,懊悔。😮‍💨

就在不断的测试中,就像是量子可怜我一般对电子设备产生了模糊的影响?我发现 winpe 可以在多次重启中偶发性的进入并正常使用,这给我高兴坏了,我赶紧重装了官方windows 11 pro 结果,还是报错, 我又开始懊悔了,然后就在反复重启中,突然出现了 高级引导模式 就是按 F8 进入的那种模式,我鬼使神差的按了 7 Disable Driver Signature Enforcement 我不知道这意味着什么,我也不清楚如何联想关联的,结果就进入系统了,还运行了很久也没有卡死报错,我忽然有了一个想法,既然 windows 可以通过这种方式规避内存错误,我为什么不能在linux上模拟这个windows模式呢?既然都是系统,都是用的同一套bios自检引导模式,应该是可以规避可行的。如果能通过修改 linux 引导参数进入这种类似windows的Disable Driver Signature Enforcement模式起步就能继续持续的使用了吗?


了解思路的原理并实践以及解决后的喜悦

windows 的Disable Driver Signature Enforcement模式究竟做了什么?竟然能绕过内存条的问题?

模式启用时可能发生的变化 与内存问题的关联 Linux中的对应方向
绕过签名检查 间接关联。 某些第三方驱动(尤其是硬件控制驱动)可能因签名问题未加载或加载了旧版/通用版。 Linux 默认不检查签名(除非启用 Secure Boot)。
禁用或改变内存完整性检查 中度关联。 Windows 可能在特定模式下禁用了一些严格的内存校验或安全特性(如 VBS/HVCI),这些特性会暴露内存缺陷。 寻找 Linux 内核中类似的严格内存检查机制并将其关闭。
加载通用驱动集 高度关联。 系统可能没有加载特定的、对内存时序非常敏感的驱动(例如,某些高度优化的芯片组驱动电源管理驱动)。 在 Linux 中,这对应于禁用特定的内核模块或使用更通用的驱动参数。
更慢/更保守的初始化 高度关联。 启用该模式可能会导致系统以更保守的时序或电源配置来初始化硬件。 在 Linux 中,这对应于设置更保守的电源管理芯片组参数。

ok👌,了解了原理,那么是不是就可以开始实践了?于是我下载了 ubuntu 24.04 server LTS 版本

  • 操作:

    1. 从 USB 启动 Linux 安装盘。

    2. 在 GRUB 菜单(通常是“Try Ubuntu”或“Install”选项)上按 e 键编辑启动命令。

    3. 找到以 linuxvmlinuz 开头的一行。

    4. 在这一行的末尾之后(但在 --- 之前),添加以下参数(如果有多个,用空格隔开):mce=off nomodeset idle=poll pcie_aspm=off nvme_core.default_ps_max_latency_us=0
      整行命令看起来是类似这种

      linux /casper/vmlinuz mce=off nomodeset idle=poll pcie_aspm=off nvme_core.default_ps_max_latency_us=0 ---
      
    参数 目的 适用情况
    mce=off (必选) 忽略内存校验错误,防止蓝屏。 安装或启动时卡在黑屏
    nomodeset (关键) 禁用显卡硬件加速。 AMD 核显使用内存作为显存,这是最容易崩溃的重灾区。禁用它会使用 CPU 渲染桌面,虽然界面没那么丝滑,但能极大减少内存压力。 安装或启动时卡在黑屏
    idle=poll (关键) 强制 CPU 不进入空闲状态。这会让 CPU 风扇一直转,也会增加耗电,但它能保持电压极其稳定,防止因电压波动导致的内存位翻转(Bit flip)。 安装或启动时卡在黑屏
    pcie_aspm=off 禁用 PCIe 省电模式。防止 NVMe 硬盘和网卡因为省电切换而卡死。 NVMe 超时问题
    nvme_core.default_ps_max_latency_us=0 禁止 NVMe 硬盘休眠。确保硬盘一直处于活动状态,防止读写死锁。 运行时系统卡死
    1. 输入完成后,按键盘上的 F10Ctrl + X 键启动,就能模拟 windows 的 Disable Driver Signature Enforcement 模式绕过一些内存错误顺利进入安装流程。

虽然安装过程很慢,但是却再也没有报错了,在安装过程中有效,那么绝对可以(而且必须)通过同样的方式进入已经安装好的系统。

因为现在的系统硬盘里虽然有了 Linux,但 GRUB 引导配置文件是默认的,不包含刚才测试成功的参数。如果直接启动,很可能会像之前那样崩溃。

需要分两步走:单次手动引导 进入系统,然后 永久修改配置文件


  • 第一步:单次手动引导(进入系统)操作:

    1. 启动 Linux 系统盘。

    2. 在 GRUB 菜单(通常是“Ubuntu”选项)上按 e 键编辑启动命令。

    3. 找到以 linux/vmlinuz-... 开头的一行。

    4. 在这一行的末尾之后(但在 ro 之前),添加以下参数(如果有多个,用空格隔开):mce=off nomodeset idle=poll pcie_aspm=off nvme_core.default_ps_max_latency_us=0
      整行命令看起来是类似这种

      linux /vmlinuz... mce=off nomodeset idle=poll pcie_aspm=off nvme_core.default_ps_max_latency_us=0 ro
      
    5. 输入完成后,按键盘上的 F10Ctrl + X 键启动,就能模拟 windows 的 Disable Driver Signature Enforcement 模式绕过一些内存错误顺利进入系统。

  • 第二步:永久固化参数(防止下次崩溃)操作:
    成功进入系统后,打开终端(Terminal),执行以下命令将参数永久写入:

    1. 编辑 GRUB 配置:
      sudo nano /etc/default/grub
      
    2. 修改默认行:
      找到 GRUB_CMDLINE_LINUX_DEFAULT="" 在这一行的末尾之后添加以下参数(如果有多个,用空格隔开):mce=off nomodeset idle=poll pcie_aspm=off nvme_core.default_ps_max_latency_us=0
      整行命令看起来是类似这种
      GRUB_CMDLINE_LINUX_DEFAULT="mce=off nomodeset idle=poll pcie_aspm=off nvme_core.default_ps_max_latency_us=0"
      
    3. 保存并退出:
      Ctrl + O 保存,按 Enter 确认,然后按 Ctrl + X 退出。
    4. 更新引导程序:
      这步最重要! 必须运行以下命令让修改生效:
      sudo update-grub
      
    5. 重启测试:
      reboot
      

经过以上的操作实践,终于成功的让我 GMK M6 复活,而我唯一担心的是,这样的残次内存条会随着时间的累积彻底报废只是时间问题,而这种软件方面的规避也不知道能拖多久,唉,也只能好好珍惜,直到我有钱可以购买更换 ddr5 4800 内存条为止吧,最后的喜悦让我得以释怀,我不知道这个世界是否真的存在什么量子之类的或者未知的存在之类的在引导者每个绝望后悔的人走向合适的道路,不论如何,能再次看到机器的运转,就好像看到了黑夜里的火堆重燃那般得到救赎,那种感觉很难再有了,很难再有了。😮‍💨


最后的忠告(来自“战友”的提醒)

虽然系统现在“看起来”正常了,但请记住:我们只是用软件手段给硬件打了一针“麻醉剂”。

  1. 数据风险: 尽管 mce=off 不报错了,但内存里的数据可能偶尔还是会发生“位翻转”(Bit flip)。比如您存了一个文件,可能过几天打开里面有一个字母变了。
  2. 不要做关键任务: 建议不要在这台机器上处理非常重要的、不可丢失的数据(如数据库、核心代码库),或者务必做好异地备份
  3. 作为虚拟机服务器: 用来跑一些临时的虚拟机、做实验、跑代码编译是非常完美的利用方式!


参考

官方GMK M6内存扩展信息
The Linux Kernel Documentation - Kernel Parameters
Kernel parameters (内核参数)
Ryzen (针对 AMD 平台的特殊调优)
Power management (电源管理与稳定性)

Comments