linux - 分析接管原始磁盘的 vmcore

标签 linux linux-kernel crash-dumps

我有一个 Red Hat Linux 机器的核心转储 (vmcore) 接管了原始磁盘分区。 vmcore 已生成,我可以在我的串行控制台输出中看到它。我使用 echo c >/proc/sysrq-trigger 触发了核心转储过程,但我不知道如何分析它。

/etc/kdump.conf 文件中指定的选项是 "raw/dev/sda5"。我事先使用 fdisk 命令创建了/dev/sda5 分区,并将其作为转储文件的位置。我还做了其他事情,比如为崩溃保留内存等。

谷歌搜索给出了如下信息:-

“原始磁盘分区和专用文件系统选项允许您仍然转储到本地系统,但无需重新安装可能损坏的文件系统, 从而减少 vmcore 不会被捕获的机会。假设/dev/sda5 未格式化,kdump.conf 可以配置为'raw/dev/sda5',vmcore 文件将通过dd 直接复制到分区/dev/sda5。

机器重启后(进行转储后)我找不到 /proc/vmcore。有人可以为我提供任何线索/步骤来分析该转储吗?我需要做“dd”或“mknod”或类似的事情吗(在谷歌上得到一些不清楚的提示)。

最佳答案

嘿,我碰巧看到了你的问题。不知道你是否已经得到答案..无论如何..

vmcore 将被复制到/var/crash/或路径参数中定义的位置,如果有的话..

由于定义了 save_raw 函数。

function save_raw()
{
        local raw_part=$(awk '$1 ~ /^raw$/ { print $2; }' $KDUMP_CONFIG_FILE)
        local kdump_dir
        if [ "$raw_part" ]; then
                [ -b "$raw_part" ] || {
                        echo "raw partition $raw_part not found"
                        return 1
                }
                kdump_dir=`grep ^path $KDUMP_CONFIG_FILE | cut -d' '  -f2-`
                if [ -z "${kdump_dir}" ]; then
                        coredir="/var/crash/`date +"%Y-%m-%d-%H:%M"`"
                else
                        coredir="${kdump_dir}/`date +"%Y-%m-%d-%H:%M"`"
                fi
                mkdir -p "$coredir"
                [ -d "$coredir" ] || {
                        echo "failed to create $coredir"
                        return 1
                }
                if makedumpfile -R $coredir/vmcore <$raw_part >/dev/null 2>&1; then
                        # dump found
                        echo "Dump saved to $coredir/vmcore"
                        # wipe makedumpfile header
                        dd if=/dev/zero of=$raw_part bs=1b count=1 2>/dev/null
                else
                        rm -rf "$coredir"
                fi
        fi
        return 0
}

该函数在重启后kdump启动时调用。

function start()
{
        save_raw

关于linux - 分析接管原始磁盘的 vmcore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192522/

相关文章:

linux - 检查是否可以从linux内核空间访问内存地址

c++ - 在进程外调用时 MiniDumpWriteDump 中的访问冲突

winapi - MiniDumpWriteDump 并为同一个崩溃写入多个转储?

linux - 在字符 bash 第二次出现后替换子字符串

c++ - 使用 G++ 强制链接到 pthread

c - 为什么我必须使用 gnu99 而不是 c99 来编译内核模块?

windows - 在 Windows 7 上安装调试工具来分析小型转储

c - 如何在运行时确定哪个版本的 libc-lock.h 使用了 : NPTL or stub?

linux - nginx 的 apt-get 安装留下 root 拥有的文件

android - 查找 git commit 产生的一些代码