如何阻止Ubuntu使用某些内存区域?

Tom*_*son 12 boot grub2 ram

1.我有一台笔记本电脑,有数千个内存错误,甚至无法安装 ubuntu,安装过程中总是出现错误。我能够运行 4 遍内存测试。提供这些结果是为了使机器可用。

\n
      edit and add   /etc/default/grub:\n           GRUB_BADRAM="0x00000005A00C000,0xFFFFFFFFFFFFE000,0x00000005A00E000,0xFFFFFFFFFFFFF000,0x00000005C00C000,0xFFFFFFFFFFFFE000,0x00000005C00E000,0xFFFFFFFFFFFFF000"\n\n      then   sudo update-grub\n\n    \n     for windows bcdedit /set {badmemory} badmemorylist 0x5A00C 0x5A00D 0x5A00E 0x5C00C 0x5C00D 0x5C00E \n
Run Code Online (Sandbox Code Playgroud)\n

2.我的想法是在一台完美的 ssd 机器上安装 ubuntu,使用 sudo nautilus 使用新行修改 grub,然后执行 sudo update-grub。然后取出SSD并将其插入损坏的笔记本电脑上。我做了所有这些,但是在添加 GRUB_BADRAM= 行后,计算机完全正常并且没有错误拒绝启动。它永远不会启动并且根本不提供菜单。

\n

3.我看了一下\n如何告诉ubuntu不要使用某些内存地址?

\n

有人对使用 memmap 而不是 GRUB_BADRAM 发表了评论,但我从 Memtest 得到的解决方案与用户解释的不同,例如我的 memtest 结果在第一个地址 0x00000005A00C000 上有更多字符,我不知道\xc2\xb4t如何将其转换为有效的内存映射线或内存映射线,以便告诉 ubuntu 不要使用这些区域

\n

有谁知道我该如何解决这个问题? \nGRUB_BADRAM 应该是一个简单的修复,但我不知道为什么机器无法在添加的情况下启动,我想尝试 memmap 方法来看看我是否至少可以使用笔记本电脑。

\n

谢谢

\n

更新 - 已修复!

\n

感谢提供的评论,我现在已经编辑了 grub 文件,格式如下(我希望我有正确的格式)

\n
  GRUB_DEFAULT=0\n  GRUB_TIMEOUT_STYLE=hidden\n  GRUB_TIMEOUT=0\n  GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`\n  GRUB_CMDLINE_LINUX_DEFAULT="quiet splash memmap=8K\\\\\\$0x00000005A00C000,4K\\\\\\$0x00000005A00E000,8K\\\\\\$0x00000005C00C000,4K\\\\\\$0x00000005C00E000"\n  GRUB_CMDLINE_LINUX=""\n
Run Code Online (Sandbox Code Playgroud)\n

然后:SUDO 更新-GRUB

\n

计算机接受了它,我能够启动到ubuntu。所以我进入/proc/iomem并打开它,我看到了00000005A00C000和00000005A00E000和00000005C00C000和00000005C00E000的保留记录

\n

现在笔记本电脑已经有了硬盘,我可以启动 UBUNTU!\ni 将测试它几个小时,观看 YouTube 和网页浏览

\n

非常感谢你的帮助!您刚刚拯救了一台配备 IPS 显示屏的 RYZEN 笔记本电脑,现在它又恢复了生机

\n
\n

UPDATE#2 \n我希望有人可以仔细检查这个计算

\n

:

\n

现在我已经掌握了计算方法,我希望有人告诉我这是否正确。

\n

像这样以 FFC000 结尾的 memtest 坏内存:

\n

0x0000000B4018000,0xFFFFFFFFFFFFFC000

\n

1)你取掩码FFC000并将FFC000中的所有位翻转为FFFFFF

\n

2)这给了我们十进制的 FFFC000 ^ FFFFFF = 003fff 3fff 是 16383 字节的坏内存。

\n

3)我四舍五入到2的下一个幂,即16384字节的坏内存。

\n

4)所以memmap的值将是16K$0x0000000B4018000

\n

我说得对吗?\n这 16k 乘以 1024,这就是你得到 16384 的方式

\n
\n

更新#3

\n

- \n我在使用 ubuntu 时经历了惨痛的教训,突然选项卡开始崩溃等,因为我添加了另一个 sodimm 棒来扩展内存。

\n

所以我启动了另一次 memtest86 扫描,新报告显示了新的错误地址,我修复了这个问题,因为我现在得到了我需要的所有信息。

\n

然而。

\n

当我查看 memtest86 html 报告时,我还看到该报告中列出了两件事。

\n

最低错误地址 0xB2018170 (2848MB)

\n

最高错误地址 0xB401C648 (2880MB)

\n

加上图表。\n图片

\n
    \n
  1. 这是否意味着我的内存从 2848MB 到 2880MB 有故障?

    \n
  2. \n
  3. 与其使用所有计算出的代码,\xc2\xb4最好使用更简单的东西,例如 memmap=100M$2800M (这将在我四舍五入的 2800M 地址之后将 100M 列入黑名单,以便尽量不要在该损坏区域附近使用尽可能多)

    \n
  4. \n
  5. 一旦你在 ubuntu 中运行 memmap。如何仔细检查 ubuntu 中不再有内存错误?因为如果您再次运行 memtest,它将再次扫描整个内存并给出我们修复的错误

    \n
  6. \n
\n

谢谢

\n

Mat*_*erg 12

有人发表了关于使用 memmap 而不是 GRUB_BADRAM 的评论

要将 BADRAM 转换为 memmap,请执行以下操作:

您有[地址,掩码]:

  • 0x00000005A00C000,0xFFFFFFFFFFFFFE000

您采用掩码 FFE000 并使用异或计算器翻转 FFE000 ^ FFFFFF 中的所有位。

这给了我们 FFE000 ^ FFFFFF = 001FFF。十进制 1FFF 是 8191 字节的坏 RAM。

我们四舍五入到 2 的下一个幂,即 8192。因此 memmap 的值将是8K$0x00000005A00C000

现在,对于 0xFFFFFFFFFFFFF000 掩码,您采用 FFF000,翻转字节:

FFF000 ^ FFFFFF = 0x000FFF。

那是 4095 字节的坏 RAM。

所以你写4K$0x00000005A00E000

祝你好运。

更新:

我的想法是在一台完美的 ssd 机器上安装 ubuntu,使用 sudo nautilus 使用新行修改 grub,然后执行 sudo update-grub。然后取出SSD并将其插入损坏的笔记本电脑上。我做了所有这些,但是在添加 GRUB_BADRAM= 行后,计算机完全正常并且没有错误拒绝启动。它永远不会启动并且根本不提供菜单。

您可以使用自定义启动选项创建 LiveUSB ,从而在实际机器上测试 GRUB_BADRAM/memmap 选项(以防万一您的健康机器无法使用这些选项启动,但故障机器却可以)。

更新2

我明白你在语法上遇到的困难。您正在努力解决的是转义码

反斜杠字符\用于转义保留关键字。

如果你想输入$,那么你需要输入,\$因为否则$有特殊含义。

如果你想打字\,那么你就需要打字\\

如果你想输入,\$那么你需要输入\\\$

有时它会变得很奇怪,因为当您编辑 /etc/default/grub 时,某些 shell 脚本会尝试解释文本;这意味着您必须转义两次(一次用于 bash 脚本,另一次用于 grub)。这意味着您要输入的内容是(尝试直到正确的语法出现在 中cat /proc/cmdline,或者在 GRUB 中选择选项时按“e”):

  • 4K\$0x00000005A00E000
    • 以防万一,尝试一下,但我认为这不会起作用
  • 4K\\\$0x00000005A00E000
    • 这种转义将使脚本能够看到4K\$0x00000005A00E000并将其传递给 grub
    • Grub 将查看4K\$0x00000005A00E000并传递4K$0x00000005A00E000给内核。

尝试添加或删除 0

首先,我刚刚注意到您在提供给 GRUB_BADRAM 的范围中缺少一个零:

  • 0x000 0000 5A00 C000
  • 0xFFFF FFFF FFFF E000

完整的 64 位地址应该是 0x0000 0000 5A00 C000。然而,掩码正确包含所有 16 个字符。

仔细检查您的地址。

其次,如果这不起作用,请尝试将其缩减为 32 位地址:

  • 0x5A00 C000
  • 0xFFFF E000

(等等;显然没有空格)。这可能确实有效。

最后但并非最不重要的一点是,尝试小写地址以防万一:

  • 0x5a00c000
  • 0xffff e000

禁用安全启动

深入研究我发现的有关 GRUB_BADRAM 的文档

Note: The command is not allowed when lockdown is enforced (see Lockdown). This prevents removing EFI memory regions to potentially subvert the security mechanisms provided by the UEFI secure boot.

启用安全启动可能是您的系统拒绝使用 GRUB_BADRAM 启动的原因。

不幸的是,并非所有现代笔记本电脑都允许您关闭安全启动。如果这是你的情况,那么你就完蛋了。