滚滚红尘56

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Linux内核崩溃转存机制

kdump概念:
    当系统崩溃时,kdump 使用 kexec 启动到第二个内核,第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。
    继续学习:https://link.jianshu.com?t=http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html#major3

kdump正常运行的条件:
    1. 系统中开启kdump服务
    2. 启动文件配置中,合理分配了崩溃内存容量
    
检查系统中kdump状态的方法:
    CentOS6:    service kdump status
    CentOS7:    systemctl status kdump.service
    
开启系统中kdump的方法:
    1. Centos6.x操作说明:
        (1) grub修改预留内存
            a. 切换至root用户
            b. vi /etc/grub.conf
            c. 找到title 条目后我们要使用的系统及内核项
            d. 找到条目中kernel配置项下的“crashkernel=????”字段(如果没有则手动添加)
            e. 将=????修改为合适的大小
                可选大小:
                    crashkernel=128M:
                    crashkernel=256M:     建议值
                    crashkernel=512M:
                    crashkernel=auto:     如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容(等同于关闭kdump),如果系统的内存> 8 GB但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M,如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M.
            f. 保存文件后退出
        (2) 开启kdump服务
            a. 设置开机启动:    chkconfig kdump on
            b. 启动kdump:         service kdump start
            c. 查看dkump状态:    service kdump status
        (3) 检查
            a. 重新启动系统
            b. 查看dkump状态:    service kdump status
            c. 检查grub:        cat /proc/cmdline 内容与步骤1中修改的内容相同即为操作成功
        (4) 测试
            a. 查看log目录内容:    ls /var/crash/
            b. 触发系统崩溃:    echo c > /proc/sysrq-trigger
                                此时系统崩溃,进行转储,转储后系统自动重启
            c. 查看是否生成新的崩溃文件,同步骤a,有新文件生成则kdump运行正常
    
    2. Centos7.x操作说明:
        (1) grub修改预留内存
            a. 切换至root用户
            b. vi /etc/default/grub
            c. 找到GRUB_CMDLINE_LINUX项
            d. 将配置项中的“crashkernel=????”字段(如果没有则手动添加)
            e. 将=????修改为合适的大小
                可选大小:
                    crashkernel=128M:
                    crashkernel=256M:     建议值
                    crashkernel=512M:
                    crashkernel=auto:     如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容(等同于关闭kdump),如果系统的内存> 8 GB但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M,如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M.
            f. 保存文件后退出
            g. 执行命令:    grub2-mkconfig -o /boot/grub2/grub.cfg
            h. 再执行命令:    grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
            (g和h为冗余项,分别对应不同的系统安装方式,这里为了简化操作,所以全部执行)
        (2) 开启kdump服务
            a. 启动kdump:         systemctl start kdump.service
            b. 设置开机启动:    systemctl enable kdump.service
            c. 查看dkump状态:    systemctl status kdump.service
        (3) 检查
            a. 重新启动系统
            b. 查看dkump状态:    systemctl status kdump.service
            c. 检查grub:        cat /proc/cmdline 内容与步骤1中修改的内容相同即为操作成功
        (4) 测试
            a. 查看log目录内容:    ls /var/crash/
            b. 触发系统崩溃:    echo c > /proc/sysrq-trigger
                                此时系统崩溃,进行转储,转储后系统自动重启
            c. 查看是否生成新的崩溃文件,同步骤a,有新文件生成则kdump运行正常

修改kdump默认配置:
    vim /etc/kdump.conf
        coredump文件目录                path /var/crash
        加上-c表示压缩,原文件中没有    core_collector makedumpfile -c -l -message-level 1 -d 31
        生成coredump后,重启系统        default reboot
        
        
        echo 1 > /proc/sys/kernel/sysrq
        echo c > /proc/sysrq-trigger

posted on 2021-03-06 14:17  DavidPP  阅读(1860)  评论(0编辑  收藏  举报