メモリが一部分壊れたときのしのぎかた
256MB のメモリをはずしてもやはりへんな動作をすることがあったので、もう一度 memtest86+ を実行してみたところ、512MB のメモリのほうも一箇所壊れていました。
Tst Pass Failing Address Good Bad Err-Bits Count Chan
--- ---- --------------------- -------- -------- --------- ----- ----
4 0 00016caf4f0 - 364.9MB 5611fbfd 5611fb7d 000000080 431
一時間ほど流して 364.9MB の辺りの一箇所で 431 回もエラーを検出していました。このまま使いつづけるとファイルシステムまで壊してしまう恐れがあるので、メモリを取り換えるまで起動するのはよくないのですが、つぎのようなブートオプションを指定すれば、しばらくしのぐことができるかもしれません。
1. mem=360M
mem= ブートオプションを与えてメモリエラーのある箇所を使わないようにします。ただし、 360MB 以上のアドレスは全部つかえないのはもったいないかもしれません。また、もしメモリエラーがもっと低位のアドレスに起こっていたら、もっと少ないメモリしか使えません。
2. crashkernel=10M@360M
CONFIG_KEXEC を有効にしてカーネルをビルドすると crashkernel= ブートオプションが使えます。本来はクラッシュがおこったときに起動するカーネルを配置するアドレスを指定するためのものなのですが、このようにして 360MB-370MB の部分を予約して使われないようにします。
3. memmap=exactmap memmap=359M@1M memmap=141M@370M
memmap ブートオプションで利用するメモリマップを明示的に指定して 360MB-370MB を使わないようにします。ちょっとうまく説明できないので説明を省略しますが、 grub に次のようなオプションを追加しておかないと initrd の読み込みに失敗しました。
uppermem 500000



コメント