解决
添加参数--memory-only
完整指令
virsh dump --memory-only openEuler openEuler-memonly.dump
可选择gzip压缩
cat openEuler-memonly.dump | gzip > openEuler-memonly.dump.gz
大小对比(注意,压缩过程非常耗时,考验IO及CPU单核能力)
故障过程
开启虚拟机
virsh start openEuler
导出内核转储文件
virsh dump openEuler openEuler.dump
虚拟机内安装kernel-debuginfo,crash
yum install crash kernel-debuginfo
拷贝openEuler.dump到虚拟机,执行crash调试,故障出现
验证看kdump自身可用性
根据以往经验:配置系统自身kdump,生成vmcore后,可以正常调试。此处是在宿主服务器上virsh dump出来的内核转储文件,出现此故障。
先验证一遍kdump产生的vmcore
查看kdump状态
手动触发一次crash
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
重启后,产生了vmcore
crash 可以正常加载
由此,可以确定为virsh dump产生的转储文件内容不对。
file查看文件信息如下
尝试解决(成功 解决方案--memory-only)
查看help
根据网上搜索的资料,启用--memory-only参数
加上此参数后,导出的文件大小与内存限制相当
参考
Fedora 31 Linux 部署nfs服务_hkNaruto的博客-CSDN博客
客户端、服务器均安装nfs-utils, 采用nfs共享方式访问宿主服务器上的大文件
crash加载测试
成功
附:crash源码分析
从rpm源或者openEuler-20.03-LTS-SP3-source-dvd.iso中获取crash-7.2.8-3.oe1.src.rpm
解压,并手动打上patch
cp Packages/crash-7.2.8-3.oe1.src.rpm /tmp/
cd /tmp/
mkdir crash
cd crash
rpm2cpio ../crash-7.2.8-3.oe1.src.rpm | cpio -di
tar -xvf crash-7.2.8.tar.gz
cd crash-7.2.8
patch -p1 < ../add-SDEI-stack-resolution.patch
patch -p1 < ../fix-bitmap_len-calculation-overflow-problem-in-large.patch
patch -p1 < ../lzo_snappy.patch
patch -p1 < ../use_system_readline_v3.patch
code crash-7.2.8
由于是ARM64平台编译,因此宏被定义,源码写死了只支持X86、X86_64
!machine_type("X86") && !machine_type("X86_64")
kdump产生的vmcore为什么可以?
推测未调用该方法。
附:一个可用的dump文件,类型为data
安装过程参考
FT2000+ openEuler 20.03 virsh创建qemu kvm虚拟机 启动qemu kvm_hkNaruto的博客-CSDN博客
参考资料
QEMU: virsh/qemu-kvm 总结_page_per_vq_mzhan017的博客-CSDN博客
DebuggingKernelWithQEMU - Ubuntu Wiki
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)