1.我有一台笔记本电脑,它有数千个内存错误,甚至无法安装 ubuntu,安装过程中总是出现错误。我能够运行 4 次内存测试。它提供这些结果以使机器可用。
edit and add /etc/default/grub:
GRUB_BADRAM="0x00000005A00C000,0xFFFFFFFFFFFFE000,0x00000005A00E000,0xFFFFFFFFFFFFF000,0x00000005C00C000,0xFFFFFFFFFFFFE000,0x00000005C00E000,0xFFFFFFFFFFFFF000"
then sudo update-grub
for windows bcdedit /set {badmemory} badmemorylist 0x5A00C 0x5A00D 0x5A00E 0x5C00C 0x5C00D 0x5C00E
2.我的想法是在 ssd 上的一台完好无损的机器上安装 ubuntu,使用 sudo nautilus 修改 grub 中的新行,然后执行 sudo update-grub。然后取出 ssd 并将其插入损坏的笔记本电脑上。我做了所有这些,但在添加 GRUB_BADRAM= 行后,完好无损且没有错误的计算机拒绝启动。它从不启动,也没有菜单。
3.我看了看 我如何告诉 ubuntu 不要使用某些内存地址?
有人评论说应该使用 memmap 而不是 GRUB_BADRAM,但我从 Memtest 得到的解决方案与用户解释的不同,例如,我的 memtest 结果在第一个地址 0x00000005A00C000 上有更多字符,我不知道如何将其转换为有效的 memmap 行或 memmap 行,以告诉 ubuntu 不要使用这些区域
有人知道我该如何修复它吗? GRUB_BADRAM 应该是一个简单的修复程序,但我不知道为什么机器在添加它之后无法启动,我想尝试 memmap 方法,看看我是否至少可以使用笔记本电脑。
谢谢
更新--已修复!!
我已经根据提供的评论编辑了 grub 文件,格式如下(我希望我的格式正确)
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash memmap=8K\\\$0x00000005A00C000,4K\\\$0x00000005A00E000,8K\\\$0x00000005C00C000,4K\\\$0x00000005C00E000"
GRUB_CMDLINE_LINUX=""
然后:SUDO UPDATE-GRUB
计算机接受了它,我就能启动到 ubuntu 了,所以我去了 /proc/iomem 并打开它,我看到了 00000005A00C000 和 00000005A00E000 和 00000005C00C000 和 00000005C00E000 的保留记录
现在笔记本电脑有硬盘了,我可以启动 UBUNTU 了!我会花几个小时看 YouTube 和浏览网页来测试它
非常感谢您的帮助!您刚刚拯救了一台配备 IPS 显示屏的 RYZEN 笔记本电脑,现在它又恢复了活力
更新#2 我希望有人能再检查一下这个计算
:
现在我已经掌握了计算方法,我希望有人告诉我这是否正确。
类似这个以 FFC000 结尾的 memtest 坏内存:
0x0000000B4018000,0xFFFFFFFFFFFFC000
1)取掩码 FFC000,并将 FFC000 中的所有位翻转为 FFFFFF
2)这给了我们十进制中的 FFFC000 ^ FFFFFF = 003fff,3fff 是 16383 字节的坏 RAM。
3)我将其四舍五入到2的下一个幂,即16384字节的坏RAM。
4)因此 memmap 的值将是 16K$0x0000000B4018000
我说得对吗? 将 16k 乘以 1024,就得到 16384
更新 #3
- 我吃过苦头了,在使用 ubuntu 时,由于我添加了另一根 sodimm 棒来扩展内存,所以突然标签开始崩溃等等。
所以我启动了另一个 memtest86 扫描,新报告显示了新的错误地址,我正在修复它,因为我现在已经获得了我需要的所有信息。
然而。
当我查看 memtest86 html 报告时,我还看到该报告中列出的 2 件事。
最低错误地址 0xB2018170 (2848MB)
最高错误地址 0xB401C648 (2880MB)
这是否意味着我的内存从 2848MB 到 2880MB 有故障?
与其使用所有计算代码,不如使用更简单的代码,比如 memmap=100M$2800M (这会将我四舍五入的 2800M 地址后的 100M 列入黑名单,以尽可能避免在那个损坏区域附近使用)
在 ubuntu 中运行 memmap 后,如何再次检查 ubuntu 中是否不再有内存错误?因为如果您再次运行 memtest,它将再次扫描整个内存并给出我们已修复的错误
谢谢
答案1
有人评论说使用 memmap 代替 GRUB_BADRAM
要从 BADRAM 转换为 memmap,请执行以下操作:
您有 [地址,掩码]:
- 0x00000005A00C000,0xFFFFFFFFFFFFE000
你取掩码 FFE000 并翻转 FFE000 ^ FFFFFF 中的所有位使用异或计算器。
这给了我们 FFE000 ^ FFFFFF = 001FFF。十进制中 1FFF 代表 8191 字节的坏 RAM。
我们将其四舍五入到 2 的下一个幂,即 8192。因此,memmap 的值为8K$0x00000005A00C000
现在对于您的 0xFFFFFFFFFFFFFF000 掩码,您取 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
(等等;显然没有空格)。这可能确实有效。
最后但同样重要的一点是,为了以防万一,请尝试使用小写地址:
- 0x5a00 c000
- 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 启动的原因。
不幸的是,并非所有现代笔记本电脑都允许您关闭安全启动。如果是这种情况,那么您就完蛋了。