Я использую VMware 6.0.2 на хосте RHEL 4.6. Виртуальные машины - это MontaVista CGE 5.0 (ядро 2.6.21). Я пытаюсь заставить приложения, работающие на виртуальных машинах, сбрасывать любые файлы ядра на том HGFS, то есть в «общую папку». Файлы ядра создаются в соответствии с путем и форматом, указанным в / proc / sys / kernel / core_pattern, но они всегда имеют нулевую длину. Если я изменю путь на локальный (на виртуальном диске в виртуальной машине), все будет хорошо.
Есть идеи, что мне нужно сделать, чтобы основные файлы были записаны в общую папку?
Спасибо за вашу помощь!
Я подтвердил проблему здесь. Я не знаю, почему Linux отказывается выгружать содержимое ядра в общий ресурс HGFS (здесь ядро Arch Linux 2.6.32 с open-vm-tools 2010.01.19), но у меня есть решение.
Linux 2.6.19 и выше позволяет передавать дампы ядра через произвольную программу, поэтому создайте сценарий оболочки, который копирует свой стандартный ввод в файл на вашем общем ресурсе 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 будет передавать любые дампы ядра через ваш сценарий оболочки, что не вызовет проблем с записью в общий ресурс HGFS.
Если вам интересно, вы не можете просто поставить tee
непосредственно в kernel.core_pattern, потому что в ядрах старше 2.6.24 вы не можете указывать аргументы для команды канала с этим sysctl. По той же причине, к сожалению, я не могу придумать для вас хороший способ включить спецификаторы шаблона core_pattern в имена файлов дампа ядра, используя этот метод, если вы привязаны к ядру 2.6.21.