如標題所示。
自從我購買了新的 RAM 晶片後,我的電腦就出現了一些奇怪的問題,這讓我想知道是否是 RAM 晶片造成的。
為了測試它,我想將 ubuntu 配置為僅使用一個晶片,然後再使用另一個晶片。我不介意執行複雜的程序(也許手動分配未使用的晶片上的所有內存,以便所有進程都駐留在另一個晶片上?),但會介意嘗試危險的程序
最簡單的解決方案可能是打開電腦並實際移除晶片,但我想盡可能避免這種情況(因為擔心打開和關閉機器造成損壞/困難)
如何告訴 ubuntu 不要使用某些記憶體位址?提供了部分解決方案:給定要避免的地址,我們可以將其關閉。但還是需要知道什麼位址在什麼晶片上
答案1
記憶體測試
首先,轉到https://www.memtest86.com/並免費下載/運行它們memtest
來測試您的記憶力。至少完成一次所有 4/4 測試,以確認良好的記憶力。這可能需要幾個小時才能完成。
我懷疑那memtest
會失敗。取出新的 SODIMM/DIMM 並重新運作memtest
。如果通過,則取出通過的SODIMM/DIMM,自行重新插入另一個SODIMM/DIMM,然後重新運行memtest
。
巴德拉姆
看如何在具有已損壞電池的焊接 RAM 模組的筆記型電腦上安裝 Ubuntu
如果您查看/etc/default/grub
,您會發現一個GRUB_BADRAM=
參數,您可以在其中識別存在哪些錯誤記憶體位置。
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
來源:https://help.ubuntu.com/community/BadRAM#BADRAM_setting_in_Grub2
Grub2 中的 BADRAM 設定
Natty中的 GRUB2 設定檔有一行用於設定核心壞記憶體排除。因此,我假設這是映射顯示錯誤的記憶體部分的首選方法。我設定的線是
GRUB_BADRAM="0x7DDF0000,0xffffc000"
我能找到的每個網站上的建議方法是將其設定為運行memtest86
並讓它顯示 BadRAM 設定。memtest86
給了我一頁我必須輸入的內容。我可以看到所有地址都在一個 16K 區塊中,所以我只想映射該 16K 區塊以使其停止工作。這是我產生正確條目的方法。
第一個參數很簡單。那是壞記憶體的基底位址。就我而言,我可以看到所有錯誤位址都大於 0x7DDF0000 且小於 0x7DDF4000。所以,我把16K塊的開頭當作我的起始位址。
第二個參數是遮罩。在您想要的位址範圍共用相同值的地方輸入 1,在不同的位址範圍內輸入 0。這表示您需要選擇位址範圍,以便僅低位元發生變化。看看我的地址,面具的第一部分很簡單。您想以 0xffff 開頭。對於下一個半字節,我將用點陣圖進行解釋。我想要的範圍是從 0000 到 0011。遮罩中的最後 3 個半位元組需要全為 0,因為我們希望映射出整個範圍。所以,我們得到的總結果是 0xffffc000。
設定此行後/etc/default/grub
,我運行sudo update-grub
並重新啟動,我的壞記憶體不再被使用。使用此方法不需要內核補丁來映射壞記憶體。
更新#1:
如果記憶體錯誤沒有出現在較低的記憶體中,您可以新增「mem=##MB」核心選項來暫時停用高於該點的記憶體。例如:根據memtest86
,我的記憶體有 315MB 到 325MB 之間的錯誤。透過添加“mem=314MB”,我告訴核心假裝我只有 314MB。我的系統將足夠穩定來構建補丁,此時我可以傳遞一個參數以僅跳過 315MB 和 325MB 之間的部分(這為我提供了 502MB 的可用內存)。
IE:啟動Ubuntu Live,在GRUB選單下,點選e進入編輯模式,使用方向鍵找到“quietsplash”,改為“quietsplashmem=2048MB”,CTRL+x或F10繼續啟動。