[server] Linux kdump가 / var / crash에 쓰지 않는 이유는 무엇입니까?

다시 일어났다! 주기적으로 충돌하는 4 대의 서버가 있으며 시스템 로그 나 직렬 콘솔에 인쇄 된 정보가 없습니다.

또한 Linux kdump 서비스 는 코어 덤프를 기본 위치 인에 쓰지 않습니다 /var/crash.

  • 왜 그런지 알아낼 수 있습니까?
  • 루트 파일 시스템이 LVM 볼륨 인 경우 문제가됩니까?

여기 내가 시도한 것이 있습니다.

  1. 내 시스템은 최신 커널을 갖춘 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)
    
  2. 파일 /etc/kdump.conf은 기본 설정이 포함 된 바닐라 파일입니다. 대부분의 라인에만 두 개의 활성 라인이있다, 주석 처리 path하고 core_collector.

    #net my.server.com:/export/tmp
    #net user@my.server.com
    path /var/crash
    core_collector makedumpfile -c --message-level 1 -d 31
    #core_collector scp
    
  3. 나는 수 있도록 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 ~]#
    
  4. 그런 다음 RHEL6 배포 가이드 : 29 장 에서 빌린 다음 명령을 사용하여 커널 충돌을 강제합니다 . kdump Crash Recovery Service :

    그런 다음 쉘 프롬프트에서 다음 명령을 입력하십시오.

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

    Linux 커널이 강제 종료됩니다.

  5. 시스템이 충돌합니다. 시리얼 콘솔에서 진행 상황을 볼 수 있습니다. 나는 메시지가 표시 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
    
  6. 그런 다음 시스템이 재부팅됩니다 (기본값).

  7. 시스템이 다시 온라인 상태가되면에 아무것도 없습니다 /var/crash. 충돌 덤프가 작성되지 않았다고 가정합니다.

    [root@host1 ~]# ls -lA /var/crash/
    total 0
    [root@host1 ~]#
    
  8. 크래시 덤프가 일반적으로 작동 할 수 있다는 것을 알고 있습니다. 내가 말할 경우 kdump다음과 같은 구성으로 다른 시스템에 코어 덤프를 복사, kdump에 성공적으로 다른 호스트에 코어 덤프를 작성합니다 :

    path vmcore
    ssh user@hostb.example.org
    sshkey /root/.ssh/kdump_id_rsa
    
  9. 내가 설정 한 경우 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 #
    
  10. 그러나 지금, 나는 붙어 있습니다.



답변

게임에 조금 늦었지만 미래에 kdump를 구성 해야하는 경우 :

경로 지시어는 지정된 파티션 또는 파일 시스템의 경로를 지정한다고 생각합니다. 기본적으로 루트 fs입니다. fstab에 / var 용 별도의 파티션이 있으면 시스템이 정상적으로 부팅 될 때 충돌 디렉토리가 난독 화됩니다. 즉, 정상적으로 부팅하고 / var를 마운트 해제하면 crash / [UniqCoreDir]이 표시됩니다. kdump.conf에 “ext4 / PATH / TO / DEVICE”지시문을 추가하여이를 조정할 수 있습니다. 또한 마운트되지 않은 다른 경로를 사용할 수 있습니다.

단지 추측이지만 / var 아래에 많은 vmcore가 묻혀있을 수 있습니다.


답변

/ boot /에서 kdump initrd를 분리하여 덤프하려는 최종 경로를 확인하십시오.

  • “path”옵션이 약간 이상하다고 생각합니다. 기본값으로 두거나 명시 적으로 / var / crash로 설정합니다.

  • 컴퓨터를 재부팅하는 일종의 워치 독이 있습니까? 또한 시작하기 전에 머신을 재부팅하여 코어가 생성되지 않을 수도 있습니다.


답변