How to Get a Core Dump
Sometimes, a system core dump (also called post-mortem dump) is needed to track down a bug in the DragonFly BSD kernel.
WARNING: A core dump is obtained by triggering a kernel panic, which likes directly cutting off the power, therefore, unsaved data will be lost, recently saved data (still in the cache) might be lost, and filesystems mounted async might be destroyed.
WARNING: The saved core file (in /var/crash
) contains sensitive data, e.g., passwords, certificates, decrypted private keys. Therefore, do not upload it to somewhere that can be publicly accessed!
Requirements
A dump partition not smaller than the main (physical) memory. Usually the swap partition is used as the dump partition.
/var/crash
must be on a filesystem with enough space to hold the dump (the size of main memory)."sync on panic" should be disabled in the kernel
Configurations
Dump device
If your swap partition is as large as main memory, it can be used as a dump device.
If your swap partition is too small, you should use any partition that doesn't contain a filesystem.
Add this to
/etc/rc.conf
:dumpdev="/dev/<devicenode>"
Please refer to dumpon(8) for details.
/var/crash
If /var/crash
is residing on a filesystem without enough room to accommodate the core dump, you can move it to a different filesystem and use a symbolic link. For example:
# cpdup /var/crash /home/var.crash
# rm -rf /var/crash
# ln -s /home/var.crash /var/crash
Disable "sync on panic"
The kern.sync_on_panic
controls whether to do a sync before rebooting from a panic, which is disabled by default as we required. Otherwise, add this to /etc/sysctl.conf
:
kern.sync_on_panic=0
Get a Core Dump
Hit <Ctrl-Alt-Esc>
at the desired moment, or execute sysctl debug.panic=1
, then the system will break into the kernel debugger db>
. Then type:
db> panic
The system will dump and reboot the machine automatically. Sometimes it might require a cold reset.
If the machine has dropped to a db>
prompt by itself you can type the following to get a useful dump:
db> call dumpsys
Once the dump finished, type reset
to reboot the machine:
db> reset
During the following startup, the dumped core will be automatically saved to /var/crash
.
Create a Core Dump Automatically on Panic
Set debug.debugger_on_panic=0
or configure your kernel with options DDB_UNATTENDED
, which will create a core dump automatically and reboot on system panic.
This configuration may be useful on a remote system.
See also ddb(4)
for more details.
Tips
You can have the settings described above take effect without rebooting using the following commands:
# dumpon /dev/<devicenode> # sysctl kern.sync_on_panic=0
If a dump device is already configured but you want to change it without rebooting, then it is required to turn off the dump first by executing
dumpon off
, then usedumpon /dev/<devicenode>
to set the new dump device.If the swap partition to be also used as the dump device is encrypted (e.g., using
dm-crypt
), the underlying swap device (e.g.,/dev/serno/xxxx
) should be used to specify the dump device, instead of using the mapped device name.Core files can get quite unwieldy with large amounts of main memory. In order to temporarily limit the amount of physical memory add a line similar to the following to
/boot/loader.conf
(and remove it again once you've produced the core dump):hw.physmem="64M"
On systems derived from DEVELOPMENT branch after 20 August 2005, you can get a panic directly by pressing
<Ctrl-Alt-Shift-Esc>
if you setmachdep.enable_panic_key=1
(which is disabled by default).