再び起こった!定期的にクラッシュする4台のサーバーがあり、システムログやシリアルコンソールに情報が出力されません。
さらに、Linux kdump service はコアダンプをデフォルトの場所/var/crash
に書き込みません。
これが私が試したものです。
私のシステムは最新のカーネルを備えたScientific Linux 6.5です。
[root@Host1 ~]# uname -r
2.6.32-431.11.2.el6.x86_64
[root@Host1 ~]# cat /etc/issue
Scientific Linux release 6.5 (Carbon)
ファイル/etc/kdump.conf
は、デフォルト設定を含むVanillaファイルです。ほとんどの行はコメント化されており、path
とcore_collector
のアクティブな行は2つだけです。
#net my.server.com:/export/tmp
#Net [email protected]
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31
#core_collector scp
kdump
サービスが実行されていること、およびkdump
がinitrd
を再構築する必要がないことを確認します。
[root@Host1 ~]# chkconfig --list kdump
kdump 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@Host1 ~]# /etc/init.d/kdump restart
Stopping kdump: [ OK ]
Starting kdump: [ OK ]
[root@Host1 ~]#
次に、 RHEL6 Deployment Guide:Chapter 29. kdump Crash Recovery Service から借用したこれらのコマンドを使用して、カーネルクラッシュを強制します。
次に、シェルプロンプトで次のコマンドを入力します。
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
これにより、Linuxカーネルが強制的にクラッシュします。
システムがクラッシュします。進行状況をシリアルコンソールで確認できます。メッセージSaving to the local filesystem UUID=e7abcdeb-1987-4c69-a867-fabdceffghi2
が表示されますが、その直後にUsage: fsck.ext4
の奇妙なメッセージが表示されます。これは、何かが誤ってfsck
を呼び出しているように見えます。メモリ不足エラーなどについては何も触れられていません。
Host1.example.org login: SysRq : Trigger a crash
BUG: unable to handle kernel NULL pointer dereference at (null)
...
... skipping 50 lines of output
...
Creating block device ram8
Creating block device ram9
Creating Remain Block Devices
Making device-mapper control node
Scanning logical volumes
Reading all physical volumes. This may take a while...
No volume groups found
No volume groups found
Activating logical volumes
No volume groups found
No volume groups found
Free memory/Total memory (free %): 58272 / 116616 ( 49.9691 )
Saving to the local filesystem UUID=e7abcdeb-1987-4c69-a867-fabdceffghi2
Usage: fsck.ext4 [-panyrcdfvtDFV] [-b superblock] [-B blocksize]
[-I inode_buffer_blocks] [-P process_inode_size]
[-l|-L bad_blocks_file] [-C fd] [-j external_journal]
[-E extended-options] device
Emergency help:
-p Autom
その後、システムが再起動します(これがデフォルトです)。
システムがオンラインに戻ったとき、/var/crash
には何もありません。クラッシュダンプが書き込まれていないと思います。
[root@Host1 ~]# ls -lA /var/crash/
total 0
[root@Host1 ~]#
クラッシュダンプは一般的に機能することがわかっています。コアダンプを次の構成で別のシステムにコピーするようにkdump
に指示すると、kdumpはコアダンプを別のホストに正常に書き込みます。
path vmcore
ssh [email protected]
sshkey /root/.ssh/kdump_id_rsa
default Shell
に/etc/kdump.conf
を設定してinitrdを再構築し、システムを再度クラッシュさせると、mount: can't find /mnt in /etc/fstab
についてもう少し詳しいエラーが表示されます
Free memory/Total memory (free %): 58272 / 116616 ( 49.9691 )
Saving to the local filesystem UUID=e720481b-1987-4c69-a867-f2b4cba3b312
Usage: fsck.ext4 [-panyrcdfvtDFV] [-b superblock] [-B blocksize]
[-I inode_buffer_blocks] [-P process_inode_size]
[-l|-L bad_blocks_file] [-C fd] [-j external_journal]
[-E extended-options] device
Emergency help:
-p Automatic repair (no questions)
-n Make no changes to the filesystem
-y Assume "yes" to all questions
-c Check for bad blocks and add them to the badblock list
-f Force checking even if filesystem is marked clean
-v Be verbose
-b superblock Use alternative superblock
-B blocksize Force blocksize when looking for superblock
-j external_journal Set location of the external journal
-l bad_blocks_file Add to badblocks list
-L bad_blocks_file Set badblocks list
mount: can't find /mnt in /etc/fstab
dropping to initramfs Shell
exiting this Shell will reboot your system
/sys/block #
しかし、今、私は行き詰まっています。
ゲームには少し遅れますが、将来のためにkdumpを構成する必要がある場合:
パスディレクティブは、指定されたパーティションまたはファイルシステムからのパスを指定していると思います。デフォルトでは、これはルートfsです。/varのfstabに別のパーティションがある場合、システムが正常に起動するとクラッシュディレクトリが難読化されます。つまり、正常に起動して/ varをアンマウントすると、crash/[UniqCoreDir]が表示されます。これを調整するには、kdump.confに「ext4/PATH/TO/DEVICE」ディレクティブを追加します。また、マウントされない別のパスを使用することもできます。
単なる推測ですが、/ varの下に多数のvmcoreが埋め込まれている可能性があります。
/ boot /でkdump initrdを分解して、ダンプ先の最終的なパスを確認します。
「パス」オプションは少し変だと思います。おそらくデフォルトのままにするか、明示的に/ var/crashに設定します
マシンを再起動する何らかのウォッチドッグがありますか?これにより、が起動する前にマシンを再起動してコアが作成されない場合もあります。