จะขึ้นบัญชีดำเซกเตอร์แรมที่ไม่ถูกต้องได้อย่างไรตามข้อบ่งชี้ข้อผิดพลาด MemTest86 +


28

MemTest86 + (รุ่นที่มาพร้อมกับ Ubuntu 13.04) กล่าวว่า

Failing address: 002f796c48 -    759.5 MB

ฉันควรระบุอะไรในmemmapพารามิเตอร์เคอร์เนลเพื่อข้ามพื้นที่นี้

ฉันลองใช้memtester 770MBแล้วมันก็บอกว่าทุกอย่างก็โอเคดังนั้นมันจึงไม่ได้ดูว่าตัวบ่งชี้ของ MemTest หมายถึงข้อผิดพลาดใน 759.5th MB ตั้งแต่เริ่มต้น

วิธีการตีความตัวบ่งชี้ MemTest นี้เพื่อกำหนดค่าmemmap?

ฉันไม่มีเงินที่จะซื้อ RAM ใหม่ตอนนี้และข้อผิดพลาดน่าจะเป็นโสดดังนั้นฉันหวังว่าฉันจะสามารถแทนที่ได้


FWIW เคอร์เนลจะทำเครื่องหมายหน้าเว็บบางหน้าว่า "สงวนไว้" หากตรวจพบส่วนที่ไม่ดี แต่สามารถกู้คืนได้ เอาต์พุตของ "free -m" แสดงพลังของสองสำหรับผลรวมทั้งหมดหรือไม่ ฉันพูดถึงสิ่งนี้เป็นวิธีการอธิบายว่าทำไม memtester ไม่สามารถดู RAM ที่ไม่ดี แต่ memtest86 + สามารถ
Bratchley

ดูไม่เหมือนพลังของสองคนอย่างแท้จริง: i.stack.imgur.com/l86L1.png
Ivan

เมื่อถึงเวลาที่ตรวจพบข้อผิดพลาด (ถ้าคุณมี RAM ecc) ก็จะสายเกินไป นอกจากนี้ฟรี -m ไม่เคยรายงานถึงพลังที่เท่ากันของสองเนื่องจากไบออสและเคอร์เนลทั้งสองสำรองหน่วยความจำบางส่วน
psusi

1
ฉันฝันที่จะซื้อแล็ปท็อป ECC แต่ไม่สามารถหาข้อเสนอใด ๆ ได้ดูเหมือนว่าไม่มี
Ivan

ดูเหมือนว่าเคอร์เนลจะพิมพ์ด้วยเมื่อพบหน้ากระดาษที่ไม่ดี (บรรทัดที่ 264-265)
Bratchley

คำตอบ:


26

memmap

มีบทช่วยสอนนี้: Bad Memory HowToซึ่งกล่าวถึงการปิดใช้งานหน่วยความจำผ่านเคอร์เนลโดยใช้memmapอาร์กิวเมนต์ไปยังเคอร์เนล ตามวิธีการที่คุณมี 2 ตัวเลือกเมื่อมันมาถึงmemmap:

  • ปิดทุกอย่างหลังจากหน่วยความจำไม่ดี - (mem=###M option)
  • ปิดหน่วยความจำรอบหน่วยความจำไม่ดี - (memmap=#M$###M option)

ด้วยตัวเลือกแรกหาก memtest รายงานว่ามีหน่วยความจำไม่ดีที่ 600M คุณสามารถปิดการใช้งาน RAM จากจุดนั้นจนถึงจุดสิ้นสุดของ RAM ด้วยวิธีนี้:

 mem=595M

หากมี RAM ไม่ดีที่ 802M และ 807M คุณสามารถปิดการใช้งานส่วน 10M ของ RAM เริ่มต้นที่ 800M ดังนี้:

memmap=10M$800M

หมายเหตุ:นี่จะขึ้นบัญชีดำ 10M หลังจากที่อยู่พื้นฐาน 800M คุณควรรันmemtest86+หลังจากนั้นเพื่อยืนยันว่าอาร์กิวเมนต์นี้ถูกต้อง

BadRAM

มีโปรแกรมแก้ไขสำหรับ Ubuntu ที่เรียกว่า BadRam มันครอบคลุมเป็นอย่างดีที่นี่ในโพสต์นี้ชื่อ: BadRAMบนเว็บไซต์ชุมชนอูบุนตู

หลังจากใช้แพตช์กับเคอร์เนลโดยใช้รายละเอียดจากหน้านั้นคุณทำการแก้ไขการตั้งค่า Grub2 ของคุณ:

ตัดตอนมาจากไซต์นั้นสำหรับ Grub2

ไฟล์กำหนดค่า GRUB2 ใน Natty มีบรรทัดสำหรับการกำหนดค่าการยกเว้น ram ของเคอร์เนล ดังนั้นฉันจะสมมติว่าเป็นวิธีที่ต้องการในการแมปส่วนของหน่วยความจำที่แสดงข้อผิดพลาด บรรทัดที่ฉันตั้งไว้คือ

GRUB_BADRAM = "0x7DDF0000,0xffffc000"

วิธีที่แนะนำในทุกเว็บไซต์ที่ฉันพบคือการตั้งค่านี้คือการเรียกใช้ memtest86 และให้มันแสดงการตั้งค่า BadRAM memtest86 ให้หน้าฉันกับของที่ฉันต้องเข้าไป ฉันเห็นว่าที่อยู่ทั้งหมดนั้นอยู่ในบล็อก 16K บล็อกเดียวดังนั้นฉันแค่ต้องการทำแผนที่บล็อก 16K ที่ไม่ทำงาน นี่คือวิธีที่ฉันสร้างรายการที่ถูกต้อง

พารามิเตอร์แรกนั้นง่าย นั่นคือที่อยู่ฐานของหน่วยความจำไม่ดี ในกรณีของฉันฉันเห็นว่าที่อยู่ไม่ถูกต้องทั้งหมดมีค่ามากกว่า 0x7DDF0000 และน้อยกว่า 0x7DDF4000 ดังนั้นฉันจึงเริ่มต้นบล็อก 16K เป็นที่อยู่เริ่มต้นของฉัน

พารามิเตอร์ที่สองคือมาสก์ คุณใส่ 1s โดยที่ช่วงที่อยู่ที่คุณต้องการแบ่งปันค่าเดียวกันและ 0s ซึ่งจะแตกต่างกันไป ซึ่งหมายความว่าคุณต้องเลือกช่วงที่อยู่ของคุณซึ่งจะแตกต่างกันไปเฉพาะบิตบิตต่ำ ดูที่อยู่ของฉันส่วนแรกของหน้ากากนั้นง่าย คุณต้องการเริ่มต้นด้วย 0xffff สำหรับแทะต่อไปฉันจะอธิบายด้วยบิตแมป ฉันต้องการช่วงจาก 0000 ถึง 0011 ดังนั้นหน้ากากสำหรับ badram จะเป็น 1100 หรือ hex c 3 nibbles สุดท้ายจะต้องมี 0 ทั้งหมดในรูปแบบเนื่องจากเราต้องการให้ช่วงทั้งหมดถูกแมป ดังนั้นเราจึงได้ผลลัพธ์ทั้งหมด 0xffffc000

หลังจากตั้งค่าบรรทัดนี้ใน / etc / default / grub ฉันใช้ sudo update-grub และเริ่มระบบใหม่และหน่วยความจำไม่ดีของฉันก็ไม่ได้ถูกใช้งานอีกต่อไป ไม่จำเป็นต้องใช้แพตช์เคอร์เนลในการแมปหน่วยความจำไม่ดีโดยใช้วิธีนี้

ติดตาม # 1

มองผ่านหน้าวิกิพีเดียเพื่อ memtest86 + มันระบุดังนี้

ตัดตอนมาจากหน้า Memtest86 วิกิพีเดีย

เริ่มจาก Memtest86 2.3 และ Memtest86 + 1.60 โปรแกรมสามารถแสดงรายการของขอบเขต RAM ที่ไม่ดีในรูปแบบที่คาดไว้โดยแพทช์ BadRAM สำหรับเคอร์เนล Linux; การใช้ข้อมูลนี้ระบบ Linux สามารถใช้โมดูล RAM ได้อย่างน่าเชื่อถือแม้ว่าจะมีบิตที่ไม่ดีเล็กน้อย Grub2 สามารถส่งข้อมูลเดียวกันนี้ไปยังเคอร์เนลที่ไม่ได้รับการคัดค้านทำให้ไม่ต้องใช้แพตช์ BadRAM

ฉันเจอหน้า Gentoo นี้ซึ่งระบุการmemmap=...ใช้เลขฐานสิบหกดังนั้นคุณสามารถระบุได้ดังนี้:

memmap=5M$0x2f796c48

5M เป็นเพียงการคาดเดาอย่างชัดเจนว่าคุณสามารถปรับได้ต่ำกว่าหรือสูงกว่าขึ้นอยู่กับจำนวน RAM ในพื้นที่นั้นที่คุณต้องการ / ไม่ต้องการ

ในที่สุดคุณสามารถระบุขนาดเป็น hex ได้เช่นกัน:

memmap=0x10000$0x2f796c48

จะเพิกเฉยต่อการเริ่มต้นของ 64KB ตามที่อยู่ 0x2f796c48

อ้างอิง


"800M ถึง 804M" ควรจะเป็น "800M ถึง 810M" ฉันถือว่า ...
Hauke ​​Laging

อาจเป็นได้ แต่สิ่งที่ฉันเขียนก็โอเคเหมือนกันแม้ว่ามันจะโยนหน่วยความจำมากกว่า 4M ระหว่าง 800M ถึง 810M ก็ตาม
slm

1
1. ฉันรู้เกี่ยวกับmemmapตัวเลือก แต่คำถามคือเพิ่มเติมเกี่ยวกับวิธีตีความ memtest86 + output ฉันได้ให้ตัวอย่างเฉพาะของ memtest86 + output และขอความช่วยเหลือในการกำหนดค่าให้memmap เหมาะสมในกรณีพิเศษนี้ 2. "คุณควรรัน memtest86 + หลังจากนั้นเพื่อยืนยันว่าอาร์กิวเมนต์นี้ถูกต้อง" - memtest86 + ทำงานก่อนเคอร์เนลระบบปฏิบัติการดังนั้นฉันจึงสงสัยว่าmemmapตัวเลือกเคอร์เนล Linux อาจส่งผลกระทบต่อมันได้
อีวาน

@Ivan, 1. ฉันคิดว่ามันเป็นตัวอย่างที่ชัดเจนที่ฉันได้รวมไว้ แต่คุณต้องพูดอะไรบางอย่างเช่น: memmap=5M$759Mสำหรับกรณีของคุณ, memtest86 + ไม่สามารถใช้งานได้ที่ 759.5MB 2. ฉันหมายความว่าคุณควรผ่านmemmap=...ตัวเลือกเพื่อ memtest86 + เช่นกัน นั่นคือฉันยังไม่ได้ยืนยัน / ไม่ยืนยัน แต่เป็นสิ่งที่คุณสามารถทำได้ด้วย memtest86 +
slm

1
โอเคขอบคุณ. ฉันไม่แน่ใจว่า "002f796c48 - 759.5 MB" หมายถึงอะไร (อาจเป็น 759.5 megs หลังจากที่อยู่ 002f796c48 หรืออะไรทำนองนั้น) และฉันไม่เคยสงสัยเลยว่าฉันจะผ่านพารามิเตอร์เคอร์เนลของ Linux ไปยัง MemTest86 + (ฉันคิดว่ามันไม่ได้เป็นอะไร ทำอย่างไรกับ Linux)
Ivan

14

Memtest86 + (ฉันใช้ 4.20) สามารถแสดงผลรูปแบบ badram ได้โดยตรง

  1. กด 'c' เพื่อเข้าถึงกล่องโต้ตอบการกำหนดค่า กล่องโต้ตอบการกำหนดค่า memtest

  2. จากนั้น '4' สำหรับ "โหมดรายงานข้อผิดพลาด"

    กล่องโต้ตอบรายงานโหมดข้อผิดพลาด memtest

  3. จากนั้น '3' สำหรับ "รูปแบบ BadRAM"

ผลลัพธ์จะเปลี่ยนจากรายการความล้มเหลวในการทดสอบแต่ละรายการเป็นชุดของบรรทัด badram = ซึ่งแต่ละรายการจะมีเซกเตอร์เสียใหม่อีกหนึ่งรายการ เนื่องจากบรรทัดต่อท้ายและรวมกลุ่มที่อยู่ติดกันคุณสามารถเรียกใช้การทดสอบหัวขาดข้ามคืนและใช้บรรทัดสุดท้ายที่พิมพ์ (แม้ว่าคุณจะมีสลัวที่ไม่ดีจริง ๆ รูปแบบ "5 megs รอบจุดนี้" ที่มีความแม่นยำน้อยกว่านี้ )

ผลสุดท้าย:

Memtest86 + แสดงเอาต์พุต badram


4
ตอนนี้ถ้าฉันไม่ต้องคัดลอกสิ่งนั้นด้วยมือและส่งมอบให้กับด้วงแทนโดยไม่มีข้อผิดพลาดการพิมพ์ซ้ำที่จะยอดเยี่ยม
Ehtesh Choudhury

8
สิ่งที่ฉันทำคือถ่ายภาพของมัน (โทรศัพท์กล้อง) โหลดมันเข้าไปใน GIMP, => grayscale => invert => contrast / gamma จากนั้นส่งให้tesseract ${IMG} stdout.. ยืนยันแล้วและแก้ไขบรรทัดก่อนที่จะใส่เข้าไปใน / etc / default / grub ... อาจใช้เวลานานแค่ป้อนเองด้วยตนเองทันที ^^
eMPee584

3
สนุกกว่าการเล่นด้วยตนเองแน่นอน
flying sheep
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.