MemTest86+(Ubuntu 13.04に付属のバージョン)は次のように言います。
Failing address: 002f796c48 - 759.5 MB
memmap
この領域をバイパスするには、カーネルパラメータに何を指定する必要がありますか?
私は実行してみましたmemtester 770MB
が、すべてが大丈夫だと思いますので、MemTestの指示は759.5MBで最初からエラーがあるという意味ではないようです。
このMemTestディレクティブ設定を解釈するにはmemmap
?
今は新しいメモリを買うお金がなく、エラーが単一であるようで無視できることを願っています。
答え1
メモリマップ
次のタイトルのチュートリアルがあります。記憶力が良くない場合はどうすればいいですか?カーネルパラメータを使用してカーネルを介してメモリを無効にする方法について説明しますmemmap
。 Howtoによると、2つのオプションがありますmemmap
。
- 悪い記憶の後にはすべてを消す——
(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というUbuntu用のパッチがあります。この記事には、次のような良い紹介があります。悪い記憶Ubuntuコミュニティのウェブサイトから。
このページの詳細を使用してカーネルにパッチを適用した後、Grub2設定を変更できます。
このウェブサイトのGrub2から抜粋
NattyのGRUB2設定ファイルには、カーネル不良メモリ除外を設定する行があります。だから私はこれがエラーを示すメモリ部分をマッピングするのに好ましい方法であると仮定します。私が設定した行は
GRUB_BADRAM="0x7DDF0000,0xffffc000"
私が見つけることができるすべてのウェブサイトで提案する方法は、memtest86を実行してBadRAM設定を表示することです。 memtest86は私が入力する必要があるページを私に提供しました。すべてのアドレスが16Kブロックにあることがわかるので、対応する16Kブロックをマッピングして動作を停止したいと思います。これが正しい項目を生成する方法です。
最初のパラメータは簡単です。これが不良メモリのベースアドレスです。私の場合、すべてのエラーアドレスが0x7DDF0000より大きく、0x7DDF4000より小さいことがわかります。だから私は16Kブロックの先頭を開始アドレスにしました。
2番目のパラメータはマスクです。目的のアドレス範囲が同じ値を共有する場合は1を入力し、異なる場合は0を入力します。これは、低いビットのみが変更されるようにアドレス範囲を選択する必要があることを意味します。私の住所を見てください。マスクの最初の部分は簡単です。 0xffffで始めたいです。次のニブルではビットマップの側面で説明します。私が望む範囲は0000から0011です。したがって、バードラムのマスクは1100または16進数cになります。フルレンジをマッピングするには、マスクの最後の3つのニブルがすべてゼロである必要があります。したがって、我々が得た合計結果は0xffffc000です。
/etc/default/grubにこの行を設定した後、sudo update-grubを実行して再起動しましたが、不良メモリは使用されなくなりました。この方法を使用して不良メモリをマッピングするためにカーネルパッチは必要ありません。
フォローアップ#1
memtest86+のWikipediaページを見ると、説明は次のとおりです。
Memtest86 2.3およびMemtest86+ 1.60以降、プログラムはこの情報を使用して、LinuxカーネルのBadRAMパッチで予想される形式で不良RAM領域のリストを出力できます。 Linuxシステムは、不良ビットがあってもRAMモジュールを安定して使用できます。 Grub2はパッチのないカーネルに同じ情報を提供できるため、BadRAMパッチは必要ありません。
私もこのようなことを経験しました。Gentooページ16進アドレスを使用するように指定するため、memmap=...
次のように指定できます。
memmap=5M$0x2f796c48
5Mは単なる推測に過ぎず、省略したいまたは省略する必要がある領域の周りのRAMの量に応じて、より低くしたり高くしたりすることができます。
最後に、サイズを16進数で指定することもできます。
memmap=0x10000$0x2f796c48
アドレス 0x2f796c48 で始まる 64 KB は無視されます。
引用する
答え2
Memtest86+(4.20を使用)はbadram形式を直接出力できます。
「c」を押して設定ダイアログに入ります。
「4」は「エラー報告モード」を示します。
そして、「3」は「BadRAMモード」を示す。
出力は個々のテスト失敗リストから一連のbadram =ラインに変更され、各ラインには新しい不良セクタが含まれます。線が隣接するセグメントを追加してマージするため、一晩ヘッドなしでテストを実行し、最終的な印刷線を使用できます(明るさが本当に悪い場合は精度が低下する「この点の周りの5メガ」形式が短くなる可能性があります)。
最終結果:
答え3
非常に厄介ですが、非常に良い回避策:userspace memtesterを実行し、エラーが見つかるまで待ちます。たとえば、0xfce2ea31 にあるとします。
その後、memtesterを再実行しますが、その物理アドレスで次の操作を行います。
memtester -p 0xfce20000 64k 128
確かに、問題の住所にあるページよりも多くを犠牲にした場合は良いでしょう。ここでは、エラーアドレスの周りの64kByteを犠牲にしています。
すべてがうまくいったら、間違ったメモリ位置をすばやく見つけることができます。
次に、ctrl / zを使用してmemtesterプロセスを一時停止します。
結果:memtesterプロセスが一時停止される前にリソースが奪われなくなりました。ただし、他のどのプロセスも欠陥のあるメモリにアクセスできません。。 memtesterによって割り当てられるからです。
特に大規模なリモートサーバーに便利です。中断されたプロセスは、新しいRAMが出荷されるまで残っている可能性があります。または、次のクリスマスまでダウンタイムがそれほど問題にならない可能性があります。
答え4
Linux 2.6 以降、CONFIG_MEMTEST=y を使用してカーネルを構築できます。
カーネルコマンドラインで "memtest"を使用して起動した後、起動するたびにシステムRAMのクイックテストが実行され、明らかな不良ピクセルが自動的に削除されます。
memtest86はより徹底的で複数のパスを実行するため、すべてをキャプチャすることはできませんが、ほとんどの場合は機能し、他のいくつかのセクタが失われる場合は手動介入が必要ないという利点があります。