64a16434d8
When using a kernel built with the GZIO config option, dumpon -z can be used to configure gzip compression using the in-kernel copy of zlib. This is useful on systems with large amounts of RAM, which require a correspondingly large dump device. Recovery of compressed dumps is also faster since fewer bytes need to be copied from the dump device. Because we have no way of knowing the final size of a compressed dump until it is written, the kernel will always attempt to dump when compression is configured, regardless of the dump device size. If the dump is aborted because we run out of space, an error is reported on the console. savecore(8) is modified to handle compressed dumps and save them to vmcore.<index>.gz, as it does when given the -z option. A new rc.conf variable, dumpon_flags, is added. Its value is added to the boot-time dumpon(8) invocation that occurs when a dump device is configured in rc.conf. Reviewed by: cem (earlier version) Discussed with: def, rgrimes Relnotes: yes Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D11723
78 lines
1.3 KiB
Bash
Executable File
78 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: dumpon
|
|
# BEFORE: disks
|
|
# KEYWORD: nojail
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="dumpon"
|
|
desc="Dump kernel corefiles from swap to disk"
|
|
start_cmd="dumpon_start"
|
|
stop_cmd="dumpon_stop"
|
|
|
|
dumpon_try()
|
|
{
|
|
local flags
|
|
|
|
flags=${dumpon_flags}
|
|
if [ -n "${dumppubkey}" ]; then
|
|
warn "The dumppubkey variable is deprecated. Use dumpon_flags."
|
|
flags="${flags} -k ${dumppubkey}"
|
|
fi
|
|
/sbin/dumpon ${flags} "${1}"
|
|
if [ $? -eq 0 ]; then
|
|
# Make a symlink in devfs for savecore
|
|
ln -fs "${1}" /dev/dumpdev
|
|
return 0
|
|
fi
|
|
warn "unable to specify $1 as a dump device"
|
|
return 1
|
|
}
|
|
|
|
dumpon_start()
|
|
{
|
|
# Enable dumpdev so that savecore can see it. Enable it
|
|
# early so a crash early in the boot process can be caught.
|
|
#
|
|
case ${dumpdev} in
|
|
[Nn][Oo] | '')
|
|
;;
|
|
[Aa][Uu][Tt][Oo])
|
|
dev=$(/bin/kenv -q dumpdev)
|
|
if [ -n "${dev}" ] ; then
|
|
dumpon_try "${dev}"
|
|
return $?
|
|
fi
|
|
while read dev mp type more ; do
|
|
[ "${type}" = "swap" ] || continue
|
|
[ -c "${dev}" ] || continue
|
|
dumpon_try "${dev}" 2>/dev/null && return 0
|
|
done </etc/fstab
|
|
echo "No suitable dump device was found." 1>&2
|
|
return 1
|
|
;;
|
|
*)
|
|
dumpon_try "${dumpdev}"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
dumpon_stop()
|
|
{
|
|
case ${dumpdev} in
|
|
[Nn][Oo] | '')
|
|
;;
|
|
*)
|
|
rm -f /dev/dumpdev
|
|
/sbin/dumpon -v off
|
|
;;
|
|
esac
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|