MemTest86 +(Ubuntu 13.04に含まれているバージョン)によると
Failing address: 002f796c48 - 759.5 MB
どうすればよいですかmemmap
カーネルパラメータでこの領域をバイパスするように指定しますか?
memtester 770MB
を実行しようとしましたが、すべてが表示されますは問題ないので、MemTestの表示が最初から759.5MBのエラーを意味しているようには見えません。
このMemTestの表示を解釈してmemmap
?
新しいRAMを購入するお金がなく、エラーは1つだけのようですので、オーバーライドしていただければ幸いです。
コメント
- FWIW、カーネルは、不良セグメントを検出した場合、特定のページを"予約済み"としてマークします" free -m "の出力は、合計で2の累乗を示していますか? memtesterができる理由を説明する方法不良RAMは表示されませんが、memtest86 +は表示されます。
- '実際には2の累乗のようには見えません: i.stack.imgur.com/l86L1.png
- エラーが検出されるまでに(ecc ramがある場合でも)、通常は手遅れです。また、無料の-mは、BIOSとカーネルの両方がRAMを予約しているため、2の累乗を報告することはありません。
- ECCラップトップを購入することを夢見ていますが、利用可能なオファーを見つけることができませんでした。'存在しません。
- カーネルも printk 'のように見えます不良ページが見つかった場合(264〜265行目)。
回答
memmap
このチュートリアルのタイトルは Bad Memory HowTo で、memmap
引数。ハウツーによると、memmap
に関しては2つのオプションがあります:
- メモリの不良後はすべてオフにします-
(mem=###M option)
- 不良メモリ周辺のメモリのみをオフにします-
(memmap=#M$###M option)
最初のオプションでは、 memtestが600Mに不良メモリがあることを報告した場合は、次のようにして、その時点からRAMが終了するまでRAMを無効にすることができます。
mem=595M
ある場合 ” ■802Mおよび807MのRAMが不良の場合、次のように800Mから始まるRAMの10Mセクションを無効にできます。
memmap=10M$800M
注:これにより、800Mのベースアドレスの後に10Mがブラックリストに追加されます。後でmemtest86+
を実行して、この引数が正解です。
BadRAM
BadRamと呼ばれるUbuntu用のパッチがあります。この投稿のタイトルは BadRAM サイト。
そのページの詳細を使用してカーネルにパッチを適用した後、Grub2の設定を変更します。
Grub2のそのサイトからの抜粋
NattyのGRUB2構成ファイルには、カーネルの不良RAM除外を構成するための行があります。したがって、エラーが表示されているメモリのセクションをマッピングするための好ましい方法は、これであると想定します。私が設定した行は
GRUB_BADRAM = “0x7DDF0000,0xffffc000”
私が見つけたすべてのWebサイトで提案された方法は、これを設定してmemtest86を実行し、 BadRAM設定。 memtest86は、私が入力しなければならなかったであろうもののページを私にくれました。すべてのアドレスが1つの16Kブロックに含まれていることがわかったので、その16Kブロックを非アクティブにマップしたかっただけです。正しいエントリを生成する方法は次のとおりです。
最初のパラメータは簡単です。これが不良メモリのベースアドレスです。私の場合、すべての不良アドレスが0x7DDF0000より大きく0x7DDF4000より小さいことがわかりました。そのため、16Kブロックの先頭を開始アドレスとして使用しました。
2番目のパラメーターはマスクです。必要なアドレス範囲が同じ値を共有する場合は1を、異なる場合は0を入力します。これは、下位ビットのみが変化するようにアドレス範囲を選択する必要があることを意味します。私の住所を見ると、マスクの最初の部分は簡単です。 0xffffから始めたいと思います。次のニブルでは、ビットマップで説明します。 0000から0011の範囲にしたいので、badramのマスクは1100または16進数cになります。範囲全体をマップする必要があるため、最後の3つのニブルはマスク内のすべて0である必要があります。したがって、合計結果は0xffffc000になります。
/ etc / default / grubにこの行を設定した後、sudo update-grubを実行して再起動すると、不良メモリは使用されなくなりました。この方法を使用して不良メモリをマップするためにカーネルパッチは必要ありません。
フォローアップ#1
memtest86 +のウィキペディアページを見ると、次のように記載されています。
Memtest862.3から開始Memtest86 + 1.60の場合、プログラムは、LinuxカーネルのBadRAMパッチで期待される形式で不良RAM領域のリストを出力できます。この情報を使用すると、Linuxシステムは、いくつかの不良ビットがある場合でも、RAMモジュールを確実に使用できます。 Grub2は、パッチが適用されていないカーネルにこれと同じ情報を提供できるため、BadRAMパッチは不要です。
また、この 16進アドレスを使用してmemmap=...
を指定したGentooページ。次のように指定できます:
memmap=5M$0x2f796c48
5Mは単なる推測であり、明らかに、その領域の周囲のRAMの量に応じて、省略したり省略したりすることができます。
最後に、サイズを16進数で指定することもできます。
memmap=0x10000$0x2f796c48
アドレス0x2f796c48で始まる64KBを無視します。
参照
コメント
- " 800Mから804M "は" 800Mから810M " I仮定…
- 可能性はありますが、'が800Mから810Mの間で4Mよりも多くのメモリを廃棄している場合でも、私が書いたものは問題ありません。
- 1.
memmap
オプションについては知っていますが、問題はmemtest86 +出力の解釈方法に関するものです。memtest86+出力の具体例を挙げて質問します。この特定のケースでは、memmap
それに応じてを構成するためのヘルプが必要です。2。この引数が正しいことを確認するために後でmemtest86 +を実行する必要があります。" -memtest86 +はOSカーネルの前で実行されるため、私は真剣に疑っていますmemmap
Linuxカーネルオプションが影響を与える可能性があります。 - @ Ivan、1。含まれている例を考えると明らかだと思いましたが、' memtest86 +が759.5MBで失敗している場合、特定のケースでは
memmap=5M$759M
のように言う必要があります。 2.memmap=...
オプションをmemtest86 +にも渡す必要があることを意味しました。それは私によってテスト/確認されていませんでしたが、memtest86 +でできるかもしれません。 - わかりました、ありがとう。 " 002f796c48-759.5 MB "の意味がわかりませんでした(おそらく、002f796c48アドレスの後に759.5メガバイトになる可能性があります)。 )そして、LinuxカーネルパラメータをMemTest86 +に渡すことができるとは思ってもみませんでした(それ自体はLinuxとは関係ないと思いました)。
回答
Memtest86 +(4.20を使用)は、badram形式を直接出力できます。
-
「c」を押して、構成ダイアログ
-
次に、「エラーレポートモード」の場合は「4」
-
次に「BadRAMパターン」の「3」
出力は、個々のテスト失敗のリストから、それぞれにもう1つの新しい不良セクタを含む一連のbadram =行に変わります。線が隣接するセグメントを追加して合体させるため、テストをヘッドレスで一晩実行し、最終的な印刷行を使用できます(ただし、非常に悪いDIMMがある場合は、精度の低い「このポイントの周囲5メガバイト」形式はかなり短くなる可能性があります。 。
最終結果:
コメント
- これで、'手動でコピーする必要がなく、代わりにエラーを再入力せずにGRUBに渡す必要があります。これは素晴らしいことです。
- 写真を撮り(カメラ付き携帯電話)、GIMPにロードします= >グレースケール= > invert = >コントラスト/ガンマ次に
tesseract ${IMG} stdout
に渡します..次に、/ etc / defaultに挿入する前に、行を確認して修正します/ grub …おそらくすぐに手動で入力するのと同じくらい時間がかかりました^^ - 手動で入力するよりも間違いなく楽しいですugh
回答
非常に汚くて非常に良い回避策:ユーザースペースメメスターを実行し、それまで待ちますエラーを見つけます。たとえば、0xfce2ea31で実行します。
次に、memtesterを再度実行しますが、その物理アドレスで実行します。
memtester -p 0xfce20000 64k 128
確かに、問題のあるアドレスのページよりも多くを犠牲にした方がよいでしょう。ここでは、障害のあるアドレスの周囲で64kバイトを犠牲にしました。
すべてがうまくいけば、障害のあるメモリの場所をはるかに迅速に見つけることができます。
次に、ctrl / zを使用してmemtesterプロセスを一時停止します。
結果:memtesterプロセスが一時停止されるまで、それ以上の処理は行われません。リソース、ただし、他のプロセスは障害のあるメモリにアクセスできません。メモリが割り当てられるためです。
特に大規模なリモートサーバーで役立ちます。中断されたプロセスは新しいRAMが出荷されなくなるまで、またはダウンタイムがそれほど大きな問題にならない次のクリスマスまで滞在します。
コメント
- このトリックの代わりに、util-linuxの
chmem
ツールを使用して、特定のメモリ範囲をオフラインにするようにカーネルに指示することもできます(データを別の場所に移動してからページを再利用しない) 。 - @TooTeaこのツールを複数のマシンで試しましたが、できませんでした。単一のメモリブロックをアクティブにします。