2022-12-01 12:12:42 -03:00
|
|
|
load_kdump_config
|
2021-12-29 16:26:41 -03:00
|
|
|
|
2022-12-28 13:15:36 -03:00
|
|
|
MAIN_FOLDER="${MOUNT_FOLDER}"
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2022-11-25 14:10:04 -03:00
|
|
|
if [ ! -d "${MAIN_FOLDER}" ]; then
|
|
|
|
|
logger "kdump: invalid folder (${MAIN_FOLDER}) - aborting..."
|
2022-11-25 11:26:14 -03:00
|
|
|
exit 1
|
2022-01-12 18:38:32 -03:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Use UTC timezone to match kdump collection
|
|
|
|
|
CURRENT_TSTAMP=$(date -u +"%Y%m%d%H%M")
|
2023-01-19 11:17:52 -03:00
|
|
|
KDUMP_TMP_FOLDER="${MAIN_FOLDER}/.tmp"
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
# By default, pstore is mounted in this location; if it isn't, we move on.
|
2022-12-19 14:24:52 -03:00
|
|
|
# Notice we currently only support the logs generated by the ramoops backend.
|
2023-01-19 11:17:52 -03:00
|
|
|
LOGS_FOUND=0
|
|
|
|
|
PSTORE_FOLDER="${KDUMP_TMP_FOLDER}/pstore"
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
while IFS= read -r log
|
|
|
|
|
do
|
|
|
|
|
if [[ "${log}" == *"dmesg-ramoops"* ]]; then
|
|
|
|
|
SAVED_FILE="${PSTORE_FOLDER}/dmesg-pstore.${CURRENT_TSTAMP}-${LOGS_FOUND}"
|
|
|
|
|
mkdir -p "${PSTORE_FOLDER}"
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
cat "${log}" > "${SAVED_FILE}"
|
|
|
|
|
sync "${SAVED_FILE}"
|
|
|
|
|
rm -f "${log}"
|
|
|
|
|
LOGS_FOUND=$((LOGS_FOUND + 1))
|
|
|
|
|
fi
|
|
|
|
|
done <<< "$(find /sys/fs/pstore/ -type f 2>/dev/null)"
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
if [ "${LOGS_FOUND}" -gt 0 ]; then
|
2022-12-19 14:24:52 -03:00
|
|
|
# Logs should live on <...>/.tmp folder, due to the zip compression.
|
|
|
|
|
mv "${PSTORE_FOLDER}"/* "${KDUMP_TMP_FOLDER}/" 2>/dev/null
|
|
|
|
|
rm -rf "${PSTORE_FOLDER}"
|
2021-12-29 16:26:41 -03:00
|
|
|
fi
|
|
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
# Now, proceed the same way if there are kdump data.
|
|
|
|
|
CRASHES_FOUND=0
|
2022-11-25 14:10:04 -03:00
|
|
|
KDUMP_CRASH_FOLDER="${MAIN_FOLDER}/crash"
|
2022-12-19 14:24:52 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
while IFS= read -r crash
|
|
|
|
|
do
|
|
|
|
|
# When collecting the vmcore/dmesg during kdump, folder is
|
|
|
|
|
# saved with its name == the timestamp of the collection.
|
|
|
|
|
CRASH_TSTAMP=$(basename "${crash}")
|
|
|
|
|
if [[ ! "${CRASH_TSTAMP}" =~ ^[0-9]{12}$ ]]; then
|
|
|
|
|
continue
|
|
|
|
|
fi
|
|
|
|
|
|
2022-12-19 14:24:52 -03:00
|
|
|
KD_FOLDER="${KDUMP_TMP_FOLDER}/kdump"
|
|
|
|
|
mkdir -p "${KD_FOLDER}"
|
|
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
if [ -s "${crash}/dmesg.txt" ]; then
|
|
|
|
|
SAVED_FILE="${KD_FOLDER}/dmesg-kdump.${CRASH_TSTAMP}"
|
|
|
|
|
mv "${crash}/dmesg.txt" "${SAVED_FILE}"
|
|
|
|
|
sync "${SAVED_FILE}"
|
|
|
|
|
CRASHES_FOUND=$((CRASHES_FOUND + 1))
|
|
|
|
|
fi
|
2022-12-19 14:24:52 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
# We won't pack vmcores in the zip blob, but let's save
|
|
|
|
|
# it in case it was collected as well.
|
|
|
|
|
if [ -s "${crash}/vmcore.compressed" ]; then
|
|
|
|
|
SAVED_FILE="${KDUMP_CRASH_FOLDER}/vmcore.${CRASH_TSTAMP}"
|
|
|
|
|
mv "${crash}/vmcore.compressed" "${SAVED_FILE}"
|
|
|
|
|
sync "${SAVED_FILE}"
|
|
|
|
|
fi
|
2022-12-19 14:24:52 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
rm -rf "${crash}"
|
|
|
|
|
done <<< "$(find "${KDUMP_CRASH_FOLDER}"/ -mindepth 1 -type d 2>/dev/null)"
|
2022-12-19 14:24:52 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
if [ "${CRASHES_FOUND}" -gt 0 ]; then
|
2022-12-19 14:24:52 -03:00
|
|
|
# Logs should live on .tmp folder, due to the zip compression.
|
|
|
|
|
mv "${KD_FOLDER}"/* "${KDUMP_TMP_FOLDER}/" 2>/dev/null
|
|
|
|
|
rm -rf "${KD_FOLDER}"
|
2023-01-19 11:17:52 -03:00
|
|
|
LOGS_FOUND=$((LOGS_FOUND + CRASHES_FOUND))
|
2022-12-19 14:24:52 -03:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# If we have pstore and/or kdump logs, let's process them...
|
2022-11-25 14:10:04 -03:00
|
|
|
LOGS_FOLDER="${MAIN_FOLDER}/logs"
|
2022-12-19 14:24:52 -03:00
|
|
|
|
2023-01-19 11:17:52 -03:00
|
|
|
if [ "${LOGS_FOUND}" -ne 0 ]; then
|
2022-11-25 14:10:04 -03:00
|
|
|
mkdir -p "${LOGS_FOLDER}"
|
2021-12-29 16:26:41 -03:00
|
|
|
|
2022-12-19 14:24:52 -03:00
|
|
|
# First we collect some more info, like DMI data, os-release, etc;
|
|
|
|
|
DMI_FNAME="${KDUMP_TMP_FOLDER}/dmidecode.${CURRENT_TSTAMP}"
|
|
|
|
|
dmidecode > "${DMI_FNAME}"
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2022-12-19 14:24:52 -03:00
|
|
|
BUILD_FNAME="${KDUMP_TMP_FOLDER}/build.${CURRENT_TSTAMP}"
|
2022-02-02 16:43:41 -03:00
|
|
|
cp "/etc/os-release" "${BUILD_FNAME}"
|
|
|
|
|
|
2022-12-19 14:24:52 -03:00
|
|
|
VERSION_FNAME="${KDUMP_TMP_FOLDER}/version.${CURRENT_TSTAMP}"
|
2022-02-02 16:43:41 -03:00
|
|
|
uname -r > "${VERSION_FNAME}"
|
|
|
|
|
|
2022-12-19 14:24:52 -03:00
|
|
|
sync "${DMI_FNAME}" "${BUILD_FNAME}" "${VERSION_FNAME}"
|
2022-01-26 13:25:15 -03:00
|
|
|
|
|
|
|
|
# Create the dump compressed pack.
|
2022-12-19 14:24:52 -03:00
|
|
|
LOG_FNAME="kdump-${CURRENT_TSTAMP}.zip"
|
2022-11-25 14:10:04 -03:00
|
|
|
LOG_FNAME="${LOGS_FOLDER}/${LOG_FNAME}"
|
2022-12-19 14:24:52 -03:00
|
|
|
zip -9 -jq "${LOG_FNAME}" "${KDUMP_TMP_FOLDER}"/* 1>/dev/null
|
2022-01-12 18:38:32 -03:00
|
|
|
|
2022-02-02 16:43:41 -03:00
|
|
|
sync "${LOG_FNAME}" 2>/dev/null
|
|
|
|
|
if [ ! -s "${LOG_FNAME}" ]; then
|
2022-11-24 17:18:21 -03:00
|
|
|
logger "kdump: couldn't create the compressed log archive"
|
|
|
|
|
logger "kdump: check folder \"${KDUMP_TMP_FOLDER}\" for logs"
|
2023-01-19 11:17:52 -03:00
|
|
|
exit 0
|
2022-12-19 14:24:52 -03:00
|
|
|
else
|
2022-11-25 14:10:04 -03:00
|
|
|
logger "kdump: logs saved in \"${LOGS_FOLDER}\""
|
2022-02-02 16:43:41 -03:00
|
|
|
fi
|
2021-12-29 16:26:41 -03:00
|
|
|
fi
|
2022-12-19 14:24:52 -03:00
|
|
|
|
|
|
|
|
rm -rf "${KDUMP_TMP_FOLDER}"
|