Por que o kdump do Linux não está gravando em / var / crash?

10

Já aconteceu de novo! Eu tenho quatro servidores que estão travando periodicamente e não há informações impressas nos logs do sistema ou no console serial.

Além disso, o serviço kdump do Linux não está gravando dumps principais no local padrão de /var/crash.

  • Você pode me ajudar a descobrir o porquê?
  • Importa se meu sistema de arquivos raiz é um volume LVM?

Aqui está o que eu tentei.

  1. Meu sistema é o Scientific Linux 6.5 com o kernel mais recente.

    [root@host1 ~]# uname -r
    2.6.32-431.11.2.el6.x86_64
    [root@host1 ~]# cat /etc/issue
    Scientific Linux release 6.5 (Carbon)
    
  2. O arquivo /etc/kdump.confé o arquivo vanilla que contém as configurações padrão. A maioria das linhas é comentada, existem apenas duas linhas ativas para pathe core_collector.

    #net my.server.com:/export/tmp
    #net [email protected]
    path /var/crash
    core_collector makedumpfile -c --message-level 1 -d 31
    #core_collector scp
    
  3. Garanto que o kdumpserviço esteja sendo executado e que kdumpnão seja necessário reconstruir o meu 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 ~]# 
    
  4. Em seguida, forço uma falha no Kernel usando esses comandos emprestados no Guia de Implantação do RHEL6: Capítulo 29. O Serviço de Recuperação de Falhas do kdump :

    Em seguida, digite os seguintes comandos em um prompt de shell:

    echo 1 > /proc/sys/kernel/sysrq
    echo c > /proc/sysrq-trigger
    

    Isso forçará o kernel do Linux a travar

  5. O sistema trava. Eu posso ver o progresso no meu console serial. Eu vejo a mensagem Saving to the local filesystem UUID=e7abcdeb-1987-4c69-a867-fabdceffghi2, mas imediatamente depois vejo a estranha mensagem de Usage: fsck.ext4, que parece que algo está chamando acidentalmente, em fsckvez do que deveria estar fazendo. Não vejo menção a um erro de falta de memória ou algo assim.

    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
    
  6. E então o sistema é reiniciado (que é o padrão).

  7. Quando o sistema volta a ficar online, não existe nada /var/crash. Presumo que o despejo de memória não foi gravado.

    [root@host1 ~]# ls -lA /var/crash/
    total 0
    [root@host1 ~]#
    
  8. Eu sei que despejos de memória podem funcionar em geral. Se eu pedir kdumppara copiar o core dump para outro sistema com a seguinte configuração, o kdump gravará com êxito o core dump em outro host:

    path vmcore
    ssh [email protected]
    sshkey /root/.ssh/kdump_id_rsa
    
  9. Se eu definir default shellno /etc/kdump.confe reconstruir initrd, e depois travar o sistema novamente eu recebo um erro um pouco mais informativo sobremount: 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 #
    
  10. Mas agora estou preso.

Stefan Lasiewski
fonte
Qual é a marca / modelo do servidor?
ewwhite
Este é um Supermicro com uma placa-mãe X9DRW4 e a mais recente bios.
Stefan Lasiewski 06/06
Vadio. Estou tendo uma falha semelhante no HP ProLiants com o kernel RHEL6 mais recente. Eu estou querendo saber se é uma questão mais profunda.
ewwhite
Para mim, parece um bug. Mas não me lembro como deveria ser a saída.
Stefan Lasiewski 06/06
1
Oi. Você resolveu esse problema? Estou enfrentando um problema muito semelhante.
Chul-Woong Yang

Respostas:

5

Um pouco atrasado para o jogo, mas se você precisar configurar o kdump para o futuro:

Acho que a diretiva path designa um caminho da partição ou sistema de arquivos designado. Por padrão, esta é a raiz fs. Se você tiver uma partição separada no fstab para / var, ele ofuscará o diretório de falha quando o sistema for inicializado normalmente. ou seja, se você inicializar normalmente e desmontar / var, verá a falha / [UniqCoreDir]. Você pode ajustar isso adicionando uma diretiva "ext4 / PATH / TO / DEVICE" no kdump.conf. Além disso, você pode usar um caminho diferente que não será montado.

Apenas um palpite, mas pode ter vários vmcores enterrados em / var.

nick
fonte
2

Desmonte seu initrd do kdump em / boot / check para ver o caminho final que ele está tentando despejar.

  • Eu acho que a opção "path" é um pouco estranha, eu provavelmente a deixaria no padrão ou a configuraria explicitamente para / var / crash

  • Você tem algum tipo de vigilância reiniciando a máquina? isso também pode impedir que o núcleo seja criado reinicializando a máquina antes do início.

Sem nome de usuário
fonte
Vou verificar o initrd e ver o que encontro. A pathopção no # 2 é o caminho padrão ( /var/crash).
Stefan Lasiewski
Não, eu não tenho um cão de guarda reiniciando a máquina. Acontece que o controlador LSI + os SSDs da Samsung estão congelando periodicamente por razões que não entendemos totalmente.
precisa saber é o seguinte
Você recebeu algum feedback, porque isso é muito louco, talvez um problema de consumo de energia diminuindo a voltagem muito baixa?
Nenhum nome de usuário