[Debian FAQ]増設したメモリが認識しない
Debian FAQ


256MB+512MBのメモリをつんだサーバ(PowerEdge 600SC)を運用していたが、DBを使った試験に使うため、512MB×2を増設した。
問題なく立ち上がってきたが、freeコマンドで見ても886MBしか認識していない。増設前は768MBだったので、1GBのメモリを追加したにも関わらず、118MBしか増えなかったことになる。なんと1/10である。

「さて問題はどこか?」ともう一度再起動する。BIOSの画面を表示させると、1792MBすべて認識していることが判明。
ということは、Linux側の制限で認識しないことになるが...。

ちょっと調べてみるとgrubの設定で、mem=[メモリ容量] を設定すれば認識すると書いてあったので、早速設定してみる。

# vi /boot/grub/menu.lst
--------中略--------
title           Debian GNU/Linux, kernel 2.6.8-2-386
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro mem=1792M
initrd          /boot/initrd.img-2.6.8-2-386
savedefault
boot

### END DEBIAN AUTOMAGIC KERNELS LIST


再起動したが、全く変わらなかった。


あれこれ考えていると、「そういえば以前、HIMEM利用云々があったような~」と思い出した。
「カーネル2.6系なのにそんなことあるのかな?」と不思議に思いながらも、cat /proc/meminfo でメモリの状態を確認してみる。

# cat /proc/meminfo
--------中略--------
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 906744 kB
LowFree: 633048 kB
--------後略--------



案の定、HIMEMが認識していなかった。

再度確認のため、カーネルの設定を見てみる。
/boot/grub/menu.lst を確認すると、/boot/vmlinuz-2.6.8-2-386 が起動されることがわかる。

# cat /boot/grub/menu.lst
--------中略--------
title           Debian GNU/Linux, kernel 2.6.8-2-386
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro
initrd          /boot/initrd.img-2.6.8-2-386
savedefault
boot

### END DEBIAN AUTOMAGIC KERNELS LIST


起動するカーネルパッケージがわかるので、今度はカーネルのコンフィグファイルを見てみる。

# vi /boot/config-2.6.8-2-386
--------中略--------
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
--------後略--------


見事に、HIMEMを使用しないことになっている。 んん~。
そういえば、Pentium4機なのに、Intel386系互換カーネルがインストールされているのは何故か?
もう過去のことは覚えていないが、もう方法は2つしかない。カーネルのアップグレードを行なうか、カーネルの再構築を行なうかになるが、このサーバは運用中のアプリケーションが稼動しているので、なるべくkernel panicは避けなくてはならない。

ということで、686系のイメージにアップグレードすることにした。

カーネルのアップグレード は、apt-getコマンド で行なえる。
最近、updateを行なっていないので、updateを行なってから、インストールできるカーネルイメージのリストを取得する。

# apt-get update
# apt-get install kernel-image
Reading Package Lists... Done
Building Dependency Tree... Done
Package kernel-image is a virtual package provided by:
kernel-image-2.6.8-2-k7-smp 2.6.8-16sarge1
kernel-image-2.6.8-2-k7 2.6.8-16sarge1
kernel-image-2.6.8-2-686-smp 2.6.8-16sarge1
kernel-image-2.6.8-2-686 2.6.8-16sarge1
kernel-image-2.6.8-2-386 2.6.8-16sarge1
kernel-image-2.6.8-11-em64t-p4-smp 2.6.8-16sarge1
kernel-image-2.6.8-11-em64t-p4 2.6.8-16sarge1
kernel-image-2.6.8-11-amd64-k8-smp 2.6.8-16sarge1
kernel-image-2.6.8-11-amd64-k8 2.6.8-16sarge1
kernel-image-2.6.8-11-amd64-generic 2.6.8-16sarge1
kernel-image-2.4.27-speakup 2.4.27-1.1
kernel-image-2.4.27-2-k7-smp 2.4.27-10sarge1
kernel-image-2.4.27-2-k7 2.4.27-10sarge1
kernel-image-2.4.27-2-k6 2.4.27-10sarge1
kernel-image-2.4.27-2-686-smp 2.4.27-10sarge1
kernel-image-2.4.27-2-686 2.4.27-10sarge1
kernel-image-2.4.27-2-586tsc 2.4.27-10sarge1
kernel-image-2.4.27-2-386 2.4.27-10sarge1
You should explicitly select one to install.
E: Package kernel-image has no installation candidate


686系は、kernel-image-2.6.8-2-686だとわかる。kernel-image-2.6.8-2-686-smpはマルチプロセッサ用なので、シングルプロセッサの今回は関係ない。

さて、ここからカーネルのアップグレードとなるが、バイナリインストールだとはいえ、何があるか分からないので、必要なユーザデータや、システムのコン フィグ、ハードウェアの情報などを保存しておこう。マザーボードやネットワークカードなどの情報はlspciコマンド で取得できる。

# apt-get install kernel-image-2.6.8-2-686
Reading Package Lists... Done
Building Dependency Tree... Done
Suggested packages:
  lilo kernel-doc-2.6.8 kernel-source-2.6.8
The following NEW packages will be installed:
  kernel-image-2.6.8-2-686
0 upgraded, 1 newly installed, 0 to remove and 45 not upgraded.
Need to get 15.5MB of archives.
After unpacking 45.2MB of additional disk space will be used.
Get:1 ftp://ftp.jp.debian.org stable/main kernel-image-2.6.8-2-686 2.6.8-16sarge1 [15.5MB]
Fetched 15.5MB in 17s (904kB/s)                                                                                  
Selecting previously deselected package kernel-image-2.6.8-2-686.
(Reading database ... 25795 files and directories currently installed.)
Unpacking kernel-image-2.6.8-2-686 (from .../kernel-image-2.6.8-2-686_2.6.8-16sarge1_i386.deb) ...
Setting up kernel-image-2.6.8-2-686 (2.6.8-16sarge1) ...
Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Searching for splash image... none found, skipping...
Found kernel: /boot/vmlinuz-2.6.8-2-686
Found kernel: /boot/vmlinuz-2.6.8-2-386
Updating /boot/grub/menu.lst ... done



ダウンロードの速度にもよるが、10秒程度でさりげなく終わってしまう。
メッセージの最後にもあるが、/boot/grub/menu.lst にも新しいカーネルイメージのアサインが書き込まれているので、このまま再起動がすれば新しいカーネルで立ち上がることになる。

再起動

無事立ち上がり、freeコマンドでメモリを確認すると、1792MBすべて認識しているのが確認できた。
自動起動するサーバプロセスにも特に問題はなく、カーネルの入れ替えは無事成功したことになる。