s390 SCSI dump tool (zfcpdump)

System z machines (z900 or higher) provide hardware support for creating system
dumps on SCSI disks. The dump process is initiated by booting a dump tool, which
has to create a dump of the current (probably crashed) Linux image. In order to
not overwrite memory of the crashed Linux with data of the dump tool, the
hardware saves some memory plus the register sets of the boot cpu before the
dump tool is loaded. There exists an SCLP hardware interface to obtain the saved
memory afterwards. Currently 32 MB are saved.

This zfcpdump implementation consists of a Linux dump kernel together with
a userspace dump tool, which are loaded together into the saved memory region
below 32 MB. zfcpdump is installed on a SCSI disk using zipl (as contained in
the s390-tools package) to make the device bootable. The operator of a Linux
system can then trigger a SCSI dump by booting the SCSI disk, where zfcpdump
resides on.

The kernel part of zfcpdump is implemented as a debugfs file under "zcore/mem",
which exports memory and registers of the crashed Linux in an s390
standalone dump format. It can be used in the same way as e.g. /dev/mem. The
dump format defines a 4K header followed by plain uncompressed memory. The
register sets are stored in the prefix pages of the respective cpus. To build a
dump enabled kernel with the zcore driver, the kernel config option
CONFIG_ZFCPDUMP has to be set. When reading from "zcore/mem", the part of
memory, which has been saved by hardware is read by the driver via the SCLP
hardware interface. The second part is just copied from the non overwritten real
memory.

The userspace application of zfcpdump can reside e.g. in an intitramfs or an
initrd. It reads from zcore/mem and writes the system dump to a file on a
SCSI disk.

To build a zfcpdump kernel use the following settings in your kernel
configuration:
 * CONFIG_ZFCPDUMP=y
 * Enable ZFCP driver
 * Enable SCSI driver
 * Enable ext2 and ext3 filesystems
 * Disable as many features as possible to keep the kernel small.
   E.g. network support is not needed at all.

To use the zfcpdump userspace application in an initramfs you have to do the
following:

 * Copy the zfcpdump executable somewhere into your Linux tree.
   E.g. to "arch/s390/boot/zfcpdump. If you do not want to include
   shared libraries, compile the tool with the "-static" gcc option.
 * If you want to include e2fsck, add it to your source tree, too. The zfcpdump
   application attempts to start /sbin/e2fsck from the ramdisk.
 * Use an initramfs config file like the following:

   dir /dev 755 0 0
   nod /dev/console 644 0 0 c 5 1
   nod /dev/null 644 0 0 c 1 3
   nod /dev/sda1 644 0 0 b 8 1
   nod /dev/sda2 644 0 0 b 8 2
   nod /dev/sda3 644 0 0 b 8 3
   nod /dev/sda4 644 0 0 b 8 4
   nod /dev/sda5 644 0 0 b 8 5
   nod /dev/sda6 644 0 0 b 8 6
   nod /dev/sda7 644 0 0 b 8 7
   nod /dev/sda8 644 0 0 b 8 8
   nod /dev/sda9 644 0 0 b 8 9
   nod /dev/sda10 644 0 0 b 8 10
   nod /dev/sda11 644 0 0 b 8 11
   nod /dev/sda12 644 0 0 b 8 12
   nod /dev/sda13 644 0 0 b 8 13
   nod /dev/sda14 644 0 0 b 8 14
   nod /dev/sda15 644 0 0 b 8 15
   file /init arch/s390/boot/zfcpdump 755 0 0
   file /sbin/e2fsck arch/s390/boot/e2fsck 755 0 0
   dir /proc 755 0 0
   dir /sys 755 0 0
   dir /mnt 755 0 0
   dir /sbin 755 0 0

 * Issue "make image" to build the zfcpdump image with initramfs.

In a Linux distribution the zfcpdump enabled kernel image must be copied to
/usr/share/zfcpdump/zfcpdump.image, where the s390 zipl tool is looking for the
dump kernel when preparing a SCSI dump disk.

If you use a ramdisk copy it to "/usr/share/zfcpdump/zfcpdump.rd".

For more information on how to use zfcpdump refer to the s390 'Using the Dump
Tools book', which is available from
http://www.ibm.com/developerworks/linux/linux390.
