Quando il meccanismo di crash dump di kdump è abilitato, il sistema viene avviato dal contesto di un altro kernel. Questo secondo kernel riserva una piccola quantità di memoria e il suo unico scopo è catturare l'immagine del core dump in caso di crash del sistema.
Essere in grado di analizzare il core dump in modo significativo aiuta a determinare la causa esatta dell'errore di sistema, quindi si consiglia vivamente di abilitare questa funzione. Questo capitolo spiega come configurare, testare e utilizzare il servizio kdump in Red Hat Enterprise Linux e fornisce una breve panoramica su come analizzare il core dump risultante utilizzando l'utility di debug dei crash.
Installazione del servizio kdump
Per utilizzare il servizio kdump sul tuo sistema, assicurati di avere gli kexec-tools pacchetto installato. Per farlo, digita quanto segue al prompt della shell come root:
# yum install kexec-tools
Configurazione del servizio kdump
Configurazione dell'utilizzo della memoria
Per configurare la quantità di memoria da riservare per il kernel kdump, modifica /boot/grub/grub.conf file e aggiungi crashkernel=[size]M o crashkernel=auto . Nota che l'opzione crashkernel=auto riserva la memoria solo se la memoria fisica del sistema è uguale o maggiore di:
- 2 GB su architetture x86 a 32 e 64 bit
Un esempio di file /boot/grub/grub.conf
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/sda3 crashkernel=128M initrd /initramfs-2.6.32-220.el6.x86_64.img
Configurazione del tipo di destinazione
Quando viene acquisito un arresto anomalo del kernel, il core dump può essere archiviato come file in un file system locale, scritto direttamente su un dispositivo o inviato su una rete utilizzando il protocollo NFS (Network File System) o SSH (Secure Shell). Al momento è possibile impostare solo una di queste opzioni e l'opzione predefinita è memorizzare il file vmcore in /var/crash/ directory del file system locale. Per cambiarlo, come root, apri il file di configurazione /etc/kdump.conf in un editor di testo e modifica le opzioni come descritto di seguito.
Per modificare la directory locale in cui salvare il core dump, rimuovere il segno hash ("#") dall'inizio della #path /var/crash line e sostituire il valore con il percorso della directory desiderato. Facoltativamente, se desideri scrivere il file su una partizione diversa, segui la stessa procedura anche con la riga #ext4 /dev/sda3 e cambia sia il tipo di file system che il dispositivo (un nome dispositivo, un'etichetta di file system, e UUID sono tutti supportati) di conseguenza. Ad esempio:
ext3 /dev/sda4 path /usr/local/cores
Per scrivere il dump direttamente su un dispositivo, rimuovi il segno hash ("#") dall'inizio della riga #raw /dev/sda5 e sostituisci il valore con il nome del dispositivo desiderato. Ad esempio:
raw /dev/sdb1
Per archiviare il dump su una macchina remota utilizzando il protocollo NFS, rimuovere il segno hash ("#") dall'inizio della riga #net my.server.com:/export/tmp e sostituire il valore con un nome host valido e il percorso della directory. Ad esempio:
net penguin.example.com:/export/cores
Per archiviare il dump su una macchina remota utilizzando il protocollo SSH, rimuovere il segno hash ("#") dall'inizio della riga #net [email protected] e sostituire il valore con un nome utente e un nome host validi . Ad esempio:
net [email protected]
Quando si trasferisce un file core a una destinazione remota tramite SSH, il file core deve essere serializzato per il trasferimento. Questo crea un file vmcore.flat nella directory /var/crash/ sul sistema di destinazione, che è illeggibile dall'utilità di arresto anomalo. Per convertire vmcore.flat in un file di dump leggibile in caso di arresto anomalo, esegui il seguente comando come root sul sistema di destinazione:
# /usr/sbin/makedumpfile -R */tmp/vmcore-rearranged* < *vmcore.flat*
Configurazione del Core Collector
Per ridurre la dimensione del file di dump di vmcore, kdump ti consente di specificare un'applicazione esterna (cioè un raccoglitore di core) per comprimere i dati e opzionalmente omettere tutte le informazioni irrilevanti. Attualmente, l'unico core collector completamente supportato è makedumpfile.
Per abilitare il core collector, come root, apri il file di configurazione /etc/kdump.conf in un editor di testo, rimuovi il segno hash ("#") dall'inizio del #core_collector makedumpfile -c --message-level 1 - d 31 e modificare le opzioni della riga di comando come descritto di seguito.
Per abilitare la compressione del file di dump, aggiungere il parametro -c. Ad esempio:
core_collector makedumpfile -c
Per rimuovere sia le pagine zero che quelle libere, utilizza quanto segue:
core_collector makedumpfile -d 17 -c
Fare riferimento alla pagina man di makedumpfile per un elenco completo delle opzioni disponibili.
Modifica dell'azione predefinita
Per impostazione predefinita, quando kdump non riesce a creare un core dump, il file system di root viene montato e /sbin/init viene eseguito. Per modificare questo comportamento, come root, apri il file di configurazione /etc/kdump.conf in un editor di testo, rimuovi il segno cancelletto ("#") dall'inizio della riga della shell #default e sostituisci il valore con un'azione desiderata come descritto di seguito:
Azioni supportate
Opzione | Descrizione |
---|---|
riavvia | Riavvia il sistema, perdendo il core nel processo. |
fermati | Arresta il sistema. |
spegnimento | Spegnere il sistema. |
conchiglia | Esegui la sessione msh dall'interno di initramfs, consentendo a un utente di registrare il core manualmente. |
Ad esempio:
default halt
Abilitazione del Servizio
Per avviare il demone kdump all'avvio, digita quanto segue al prompt della shell come root:
# chkconfig kdump on
Ciò abiliterà il servizio per i runlevel 2, 3, 4 e 5. Allo stesso modo, digitando "chkconfig kdump off" lo disabiliterà per tutti i runlevel. Per avviare il servizio nella sessione corrente, utilizzare il seguente comando come root:
# service kdump start
Test della configurazione
I comandi seguenti causeranno l'arresto anomalo del kernel. Prestare attenzione quando si seguono questi passaggi e non utilizzarli in alcun modo su una macchina di produzione. Per testare la configurazione, riavvia il sistema con kdump abilitato e assicurati che il servizio sia in esecuzione:
# service kdump status Kdump is operational
Quindi digita i seguenti comandi al prompt della shell:
# echo 1 > /proc/sys/kernel/sysrq # echo c > /proc/sysrq-trigger
Ciò forzerà il crash del kernel Linux e il file address-YYYY-MM-DD-HH:MM:SS/vmcore verrà copiato nella posizione che hai selezionato nella configurazione (cioè in /var/crash/ da predefinito).