Linux 上的 VMware Workstation:将核心文件放在共享文件夹中

Linux 上的 VMware Workstation:将核心文件放在共享文件夹中

我在 RHEL 4.6 主机上使用 VMware 6.0.2。虚拟机是 MontaVista CGE 5.0(2.6.21 内核)。我尝试让虚拟机中运行的应用程序将所有核心文件放在 HGFS 卷上,即“共享文件夹”中。核心文件根据 /proc/sys/kernel/core_pattern 中给出的路径和格式创建,但它们的长度始终为零。如果我将路径更改为本地路径(在虚拟机中的虚拟磁盘上),则一切正常。

有什么想法我必须做什么才能将核心文件写入共享文件夹?

感谢您的帮助!

答案1

我在这里确认了这个问题。我不知道为什么 Linux 拒绝将核心内容转储到 HGFS 共享(此处为带有 open-vm-tools 2010.01.19 的 Arch Linux 内核 2.6.32),但我确实有一个解决方案。

Linux 2.6.19 及更高版本将允许您通过任意程序传输核心转储,因此请创建一个 shell 脚本,将其标准输入复制到 HGFS 共享上的文件中,例如:

#!/bin/sh

# Where do you want the core to go?
COREFILE=/mnt/hgfs/vmshare/core

tee $COREFILE >/dev/null

当然,您可能希望实现一些逻辑,以便$COREFILE每个后续的核心转储不会覆盖上一个。

将脚本保存为/usr/local/bin/core.sh,然后设置文件的可执行位并配置 core_pattern 如下:

# chmod +x /usr/local/bin/core.sh
# sysctl -w kernel.core_pattern='|/usr/local/bin/core.sh'

Linux 将通过你的 shell 脚本传输所有核心转储,这样写入 HGFS 共享本身就不会有任何问题。

如果您感到疑惑,您不能简单地将tee命令直接放在 kernel.core_pattern 中,因为在 2.6.24 之前的内核中,您无法使用此 sysctl 为管道命令指定参数。出于同样的原因,不幸的是,如果您使用的是 2.6.21 内核,我想不出一个好方法让您使用此方法将 core_pattern 模板说明符合并到核心转储文件名中。

相关内容