CARASH工具使用

安装

apt install linux-crashdump 

vim /etc/default/grub.d/kexec-tools.config
# change reserved memory from 128M to 256M
# 测试起来只有512能work, 多了少了都是奇怪的报错。本质上应该没有什么意义


#重新编译内核,主要是减小内核和驱动部分的大小
make -j10
objcopy --strip-debug ./vmlinux.o
make INSTALL_MOD_STRIP=1 modules_install
make install

# in one
make -j10 && objcopy --strip-debug ./vmlinux.o && make INSTALL_MOD_STRIP=1 modules_install && make install

#查看状态
kdump-config show

# 重启后进行功能测试
# 手动触发内核崩溃
echo c > /proc/sysrq-trigger


# 设置死锁自动panic以便搜集信息,实际上是最后一个,其他事开启检测,一般都是自动开的
echo 1 > /proc/sys/kernel/watchdog
echo 1 > /proc/sys/kernel/soft_watchdog
echo 1 > /proc/sys/kernel/softlockup_panic


# 然而实际上有时候会一直卡在重启界面,没有提示,不过实际上能够备份。只是看机器要等一段时间。。。我一般是为了确保能work,等10分钟。

仍然有bug

看起来是crash后msr寄存器状态错误。 corrupted hw-pmu resource msr 38d is b0

极度迷惑性的信息。实际上毫不相干,维护内核那帮人都直呼懒得管。

不管,再加上取消debug信息

# make -j10
objcopy --strip-debug ./vmlinux.o

看起来就能work了,但是有因为我们是在linux内核上,使用fastswap的内核原本必须要装载那个内核模块才能用swap。

但是这里crash过程中也要用,直接爆炸。

把同步接口去掉即可。

内存容量 预留内存容量
0GB~12GB 64MB
12GB~48GB 128MB
48GB~128GB 512MB
128GB~256GB 512MB/768MB/896MB

看见保存好在reboot了可以直接硬重启,因为我这里等了一个小时都没重启起来,直接冲了是可以的

复活后

# 第一个参数为内核符号。可以在编译内核的地方找到,我这里就是用的这个。
crash /home/lt/lightswap/linux-4.11-hmtt/vmlinux   /var/crash/202201121743/dump.202201121743

可以进入crash控制台

WARNING: kernel relocated [418MB]: patching 92251 gdb minimal_symbol values

      KERNEL: /home/lt/lightswap/linux-4.11-hmtt/vmlinux               
    DUMPFILE: /var/crash/202201121743/dump.202201121743  [PARTIAL DUMP]
        CPUS: 40
        DATE: Wed Jan 12 17:37:13 2022
      UPTIME: 00:03:57
LOAD AVERAGE: 9.47, 2.81, 0.97
       TASKS: 848
    NODENAME: 54
     RELEASE: 4.11.0-hmttv1+
     VERSION: #196 SMP Wed Jan 12 16:42:02 CST 2022
     MACHINE: x86_64  (2200 Mhz)
      MEMORY: 127.7 GB
       PANIC: "sysrq: SysRq : Trigger a crash"
         PID: 4965
     COMMAND: "bash"
        TASK: ffff98c68603bb00  [THREAD_INFO: ffff98c68603bb00]
         CPU: 1
       STATE: TASK_RUNNING (SYSRQ)

crash> bt
PID: 4965   TASK: ffff98c68603bb00  CPU: 1   COMMAND: "bash"
 #0 [ffffb0778d947a60] machine_kexec at ffffffff9b25deda
 #1 [ffffb0778d947ac0] __crash_kexec at ffffffff9b31d71d
 #2 [ffffb0778d947b88] __crash_kexec at ffffffff9b31d7f5
 #3 [ffffb0778d947ba0] crash_kexec at ffffffff9b31d83b
 #4 [ffffb0778d947bc0] oops_end at ffffffff9b23089b
 #5 [ffffb0778d947be8] no_context at ffffffff9b26d5ee
 #6 [ffffb0778d947c48] __bad_area_nosemaphore at ffffffff9b26d8b1
 #7 [ffffb0778d947c88] bad_area_nosemaphore at ffffffff9b26d9f4
 #8 [ffffb0778d947c98] __do_page_fault at ffffffff9b26dd9e
 #9 [ffffb0778d947d00] do_page_fault at ffffffff9b26e1d2
#10 [ffffb0778d947d20] page_fault at ffffffff9baea268
    [exception RIP: sysrq_handle_crash+22]
    RIP: ffffffff9b77c626  RSP: ffffb0778d947dd0  RFLAGS: 00010282
    RAX: 000000000000000f  RBX: 0000000000000063  RCX: 0000000000000000
    RDX: 0000000000000000  RSI: ffff98c73ea4dc28  RDI: 0000000000000063
    RBP: ffffb0778d947dd0   R8: 00000000000832b8   R9: 000000000000060c
    R10: 0000000000000001  R11: ffffffff9c46276d  R12: 0000000000000004
    R13: 0000000000000000  R14: ffffffff9c116040  R15: 0000000000000000
    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
#11 [ffffb0778d947dd8] __handle_sysrq at ffffffff9b77ce0a
#12 [ffffb0778d947e08] write_sysrq_trigger at ffffffff9b77d28f
#13 [ffffb0778d947e20] proc_reg_write at ffffffff9b4d3962
#14 [ffffb0778d947e40] __vfs_write at ffffffff9b459297
#15 [ffffb0778d947ec8] vfs_write at ffffffff9b459bd8
#16 [ffffb0778d947f08] sys_write at ffffffff9b45b1e5
#17 [ffffb0778d947f50] entry_SYSCALL_64_fastpath at ffffffff9bae8e3b
    RIP: 00007fed5a6013c0  RSP: 00007ffc9db851b8  RFLAGS: 00000246
    RAX: ffffffffffffffda  RBX: 00007fed5a8cf620  RCX: 00007fed5a6013c0
    RDX: 0000000000000002  RSI: 00000000020f5008  RDI: 0000000000000001
    RBP: 0000000000000001   R8: 00007fed5a8d0780   R9: 00007fed5af08700
    R10: 0000000000000001  R11: 0000000000000246  R12: 0000000000000001
    R13: 000000000226ef38  R14: 0000000000000000  R15: 00000000004d0af9
    ORIG_RAX: 0000000000000001  CS: 0033  SS: 002b
crash> 

关闭

修改: /etc/default/kdump-tools

查看状态

kdump-config show

参考资料

https://zhuanlan.zhihu.com/p/104292358

https://www.cnblogs.com/lshs/p/6038935.html

https://askubuntu.com/questions/805617/kdump-config-show-gives-not-ready-to-kdump-but-memory-was-reserved