kexec, kdump & crashdc - solutions linux

30
Kexec, Kdump & Crashdc Solutions Linux 2010 Louis Bouchard Centre de Compétences Linux EMEA, Oambassadeur OSL

Upload: others

Post on 04-Feb-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

© 2009 Hewlett-Packard Development Company, L.P.The information contained herein is subject to change without notice

Kexec, Kdump & CrashdcSolutions Linux 2010

Louis BouchardCentre de Compétences Linux EMEA, Oambassadeur OSL

Agenda

● Kexec et Kdump : Concepts● Kdump : Implementations● Kdump : Configurations● Kdump en action● Crashdc● Questions

Vous voulez savoir la raison du crash ?

Installez kexec, kdump et crashdc !

Kexec et Kdump : Concepts

● Kexec● Dans le noyau officiel depuis 2.6.13● Un ensemble d'appels système qui fournissent

– Un mécanisme de “Fastboot”– Garde le contexte du noyau en cours d'exécution– Pas de reset des firmwares

● Un utilitaire en mode “user” : /sbin/kexec

● Kdump● Utilise les mécanismes de kexec pour capturer un dump

Comment ça marche tout ça ?● kexec réserve une zone mémoire prête à booter

un noyau si nécessaire

● Lors du panic, kexec reboote le serveur à l'aide du noyau chargé dans la zone réservée

● Ce nouveau noyau met à disposition la mémoire de l'ancien noyau dans /proc/vmcore

● Les outils de kdump lisent /proc/vmcore et sauvegardent son contenu pour analyse

Kdump

Kdump : Implementations● RHEL5

● kexec-tools● system-config-kdump

● SLES10● kexec-tools● kdump● kernel-kdump (except IA64)● yast2-kdump

● SLES11● kexec-tools● kdump● yast2-kdump

Kdump : Configuration● Configuration du noyau

● crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset]range=start-[end]('start' est inclusif et 'end' est exclusif)

● crashkernel=256M-:64M@16M (SLES11)

● Configuration en environnement utilisateur● RHEL5

– /etc/kdump.conf– /etc/sysconfig/kdump

● SLES10&11

– /etc/sysconfig/kdump

Kdump in Action

Kdump en action

Kdump en action : details

# echo c > /proc/sysrq-trigger SysRq : Trigger a crashdumpInitializing cgroup subsys cpusetInitializing cgroup subsys cpuLinux version 2.6.27.23-0.1-default (geeko@buildhost) (gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux) ) #1 SMP 2009-05-26 17:02:05 -0400BIOS-provided physical RAM map: BIOS-e820: 0000000000000100 - 000000000009f800 (usable) BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved) BIOS-e820: 00000000000dc000 - 00000000000e0000 (reserved) BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 000000001fef0000 (usable) BIOS-e820: 000000001fef0000 - 000000001feff000 (ACPI data) BIOS-e820: 000000001feff000 - 000000001ff00000 (ACPI NVS) BIOS-e820: 000000001ff00000 - 0000000020000000 (usable)

Kdump en action : detailsSysRq : Changing LoglevelLoglevel set to 1Creating device nodes with udevBoot logging started on /dev/ttyS0(/dev/console) at Thu Dec 3 13:09:20 2009Trying manual resume from /dev/sda1Invoking userspace resume from /dev/sda1resume: libgcrypt version: 1.4.1Trying manual resume from /dev/sda1Invoking in-kernel resume from /dev/sda1Waiting for device /dev/sda2 to appear: okMounting root /dev/sda2mount -o rw,acl,user_xattr -t ext3 /dev/sda2 /rootNothing to delete in /var/crash.Saving dump using makedumpfile-------------------------------------------------------------------------------Copying data : [ 100%]

The dumpfile is saved to /root/var/crash/2009-12-03-13:09/vmcore.

Makedumpfile Completed.-------------------------------------------------------------------------------Generating README Finished.Copying System.map Finished.Copying kernel Finished.Copying kernel.debug Finished.

Restarting system.Initializing cgroup subsys cpusetInitializing cgroup subsys cpuLinux version 2.6.27.23-0.1-default (geeko@buildhost) (gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux) ) #1 SMP 2009-05-26 17:02:05 -0400

crashdc

crashdc : pourquoi ?● Les fichiers vmcore grossissent ( > 16 Gb)

● Une analyse complète n'est pas toujours nécessaire

● Quelques commandes de base de crash fournissent beaucoup d'information

● C'était très efficace sur Tru64 pendant des années

crashdc : qu'est-ce que c'est ?● Un ensemble de scripts bash

● Complètement dépendant de l'utilitaire crash

● Peut être lancé automatiquement lors de la création d'un vmcore ou au reboot

● Peut être utilisé interactivement

crashdc : Comment ça marche ?● Lancement par kdump

● Lancement par /sbin/init

● Utilisation manuelle

CRASHDC FUNCTIONAL DIAGRAM : Kexec automation

KDUMP(part of linux)

run_crashdc-{distro}.sh

Legend{distro} = rhel5

sles10

sles11

crashdc.{distro}(configuration file)

Invokes

crashdc

RUNS

crash-data-[date].txt

crashdcmds(custom commands file)

CRASHDC FUNCTIONAL DIAGRAM : Init automation

/sbin/init(initscript)

/etc/init.d/crashdc

Legend{distro} = rhel5

sles10

sles11

crashdc.{distro}(configuration file)

Invokes

crashdc

RUNS

crash-data-[date].txt

crashdcmds(custom commands file)

CRASHDC FUNCTIONAL DIAGRAM : Manual

/etc/init.d/crashdc

Legend{distro} = rhel5

sles10

sles11

crashdc.{distro}(configuration file)

Invokes

crashdc

RUNS

crash-data-[date].txt

crashdcmds(custom commands file)

Mr Sysadmin

Syntax sanity checks

CRASHDC ARCHITECTURE

Verify files location

Build command

list

Custom cmdfile exists ? Use

custom cmdfile

Yes

Execute crash

commands

Write cmd result to crash-data-

[date].txt

Pré-requis de crashdc● RHEL5

● Kexec-tools

● system-config-kdump

● SLES10● kexec-tools

● kdump

● kernel-kdump (except IA64)

● yast2-kdump

● SLES11● kexec-tools

● kdump

● yast2-kdump

● kernel-debuginfo-common● kernel-debuginfo● crash

● kernel-default-debuginfo● crash

● kernel-default-debuginfo● crash

crashdc : Ça ressemble à quoi ?## Crash Data Collection (Version 0.03)# BASIC mode in use#### Tool Informationcrash> help | grep crashcrash version: 4.0-8.9.1.el5 gdb version: 6.1### Crash Context Informationcrash> sys KERNEL: /usr/lib/debug/lib/modules/2.6.18-164.el5xen/vmlinux DUMPFILE: /var/crash/2010-01-20-17:04/vmcore CPUS: 2 DATE: Wed Jan 20 17:03:33 2010 UPTIME: 00:05:28LOAD AVERAGE: 1.58, 1.03, 0.47 TASKS: 108 NODENAME: crashdc RELEASE: 2.6.18-164.el5xen VERSION: #1 SMP Tue Aug 18 15:59:52 EDT 2009 MACHINE: x86_64 (1965 Mhz) MEMORY: 539 MB PANIC: "SysRq : Trigger a crashdump"### Preserved Kernel Ring Buffercrash> logBootdata ok (command line is ro root=/dev/VolGroup00/LogVol00 console=ttyS0)Linux version 2.6.18-164.el5xen ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:59:52 EDT 2009BIOS-provided physical RAM map: Xen: 0000000000000000 - 0000000021af4000 (usable)On node 0 totalpages: 137972 DMA zone: 137972 pages, LIFO batch:31DMI present.ACPI: RSDP (v002 PTLTD ) @ 0x00000000000f6a30ACPI: XSDT (v001 INTEL 440BX 0x06040000 VMW 0x01324272) @ 0x000000002feedfd3ACPI: FADT (v004 INTEL 440BX 0x06040000 PTL 0x000f4240) @ 0x000000002fefee98ACPI: BOOT (v001 PTLTD $SBFTBL$ 0x06040000 LTP 0x00000001) @ 0x000000002feee1ddACPI: MADT (v001 PTLTD APIC 0x06040000 LTP 0x00000000) @ 0x000000002feee163ACPI: MCFG (v001 PTLTD $PCITBL$ 0x06040000 LTP 0x00000001) @ 0x000000002feee127ACPI: SRAT (v002 VMWARE MEMPLUG 0x06040000 VMW 0x00000001) @ 0x000000002feee057ACPI: DSDT (v001 PTLTD Custom 0x06040000 MSFT 0x03000001) @ 0x0000000000000000

Crashdc : les modes

BASIC (120 Kb) - crash version - sys - log - set - bt - ps - foreach bt - mount - net - mod

ADVANCED (2.6M) BASIC+ - ps -t - foreach task - foreach files - mount -f - foreach net -s - sym -l - kmem -i - kmem -s

Crashdc : les modes (cont.)

● CUSTOMReçoit les commandes d'un fichier texte

● Peut être utile pour envoyer des commandes spécifiques à exécuter

● Peut être spécifiques à certaines applications (i.e. HPTC)

crashdc : Contenu du paquet

/etc/init.d/crashdc/etc/sysconfig/crashdc.rhel5/etc/sysconfig/crashdc.sles10/etc/sysconfig/crashdc.sles11/usr/bin/crashdc/usr/bin/run-crashdc-rhel5.sh/usr/bin/run-crashdc-sles10.sh/usr/bin/run-crashdc-sles11.sh/usr/share/doc/crashdc-0.5/usr/share/doc/crashdc-0.5/INSTALL/usr/share/doc/crashdc-0.5/README/usr/share/man/man5/crashdc.5.gz/usr/share/man/man7/crashdc.7.gz/usr/share/man/man8/crashdc.8.gz

Installation et configuration

● Installation● # rpm -vih crashdc-0.6-1.noarch.rpm

● Configuration● Consulter /usr/share/doc/crashdc-0.6/INSTALL

pour les instructions complètes

● Test● Générez un crash par echo c > /proc/sysrq-trigger

crashdc : Etat actuel

● Approuvé par l'OSRB● Beta : Toutes les fonctionnalités

testées sur :– RHEL5 : i386 & x86_64– SLES10 : i386 & x86_64– SLES11 : i386 & x86_64

● Ne fonctionne que sur du stockage local

● Disponible publiquement sur : http://crashdc.sourceforge.net

crashdc : futur

● WEB● http://crashdc.sourceforge.net/● http://people.redhat.com/anderson/● http://cariblog.kamikamamak.com/category/crashdc

● Mail● [email protected] (public)

Questions

© 2009 Hewlett-Packard Development Company, L.P.The information contained herein is subject to change without notice

Thank you