NAME
cckd - Hercules Compressed CKD DASD image file
DESCRIPTION
Hercules DASD image file that emulates IBM mainframe DASD devices on a
(usually) non-mainframe platform. Specified in the Hercules
configuration file (default name hercules.cnf) to describe the DASD
devices Hercules is to emulate. Also specified as input and/or output
file to several Hercules utilities. Hercules compressed DASD devices
are frequently referred to as CCKD. Hercules uncompressed DASD devices
are frequently referred to as CKD. Hercules CKD DASD image files are
largely compatible with P/390 AWS DASD files.
TECHNICAL OVERVIEW
The following provides a technical overview of CCKD internal
structures. Except as indicated below, data in the following
structures is stored in the byte order indicated by the CDEVHDR.options
CCKD_BIGENDIAN bit (the 0x02 bit). This bit is 1 when data is big-
endian byte order, 0 when data is little-endian byte order.
DEVHDR
occupies the first 512 bytes of a CKD or CCKD DASD file. The DEVHDR
contains the device type and the number of heads per cylinder. Its
contents are the same whether the DASD image is compressed (CCKD) or
not (CKD). Described by the CKDDASD_DEVHDR struct; 512 bytes in size.
CDEVHDR
immediately follows the DEVHDR, and contains fields describing the
number of L1ENTs in the L1TAB, the number of L2ENTs in each L2TAB, and
anchors the free space chain. Described by the CCKDDASD_DEVHDR struct;
512 bytes in size.
L1TAB
immediately follows the CDEVHDR, and consists of L1ENT entries, each of
which points to an L2TAB. Each L1ENT is an U32 (4 bytes) offset into
the CCKD DASD file. The CDEVHDR numl1tab field describes how many
L1ENTs are in the L1TAB. L1ENTs are described by the CCKD_L1ENT
typedef; the L1TAB is of variable size. Conceptually each L1ENT
describes cdevhdr.numl2tab tracks.
L2TAB
is pointed to by an L1ENT, and is composed of L2ENT entries, the number
of which is described by the CDEVHDR numl2tab field; currently 256
L2ENTs in each L2TAB. L2ENTs contain the offset to the TRKHDR, and the
combined length of the TRKHDR and (optionally) compressed track data.
The CDEVHDR numl2tab field describes how many L2ENTs are in each L2TAB.
Currently, there are 256 L2ENTs in each L2TAB. Described by the
CCKD_L2ENT struct; (256 * 8) bytes in size. Conceptually each L2ENT
describes one track.
FREEBLK
describes free space in the CCKD DASD image, anchored by the CDEVHDR
free field. Consists of a 4 byte offset to the next free space (or
zero for end of free space chain), and a 4 byte length of the free
space (which length includes the 8 bytes occupied by the FREEBLK
itself), followed by zero or more bytes of residual data. Described by
the first 8 bytes of the CCKD_FREEBLK struct; 8 bytes in size.
TRKHDR
Occurs once at the beginning of each track. contains flag (one byte),
CC (two bytes), and HH (two bytes) of the track. When the flag byte =
0x00, TRKHDR is the same as the Home Address on real DASD. Flag bits
are described in hercules.h, and are of the format nlllllcc where n=1
for new track header format, lllll is used for track recovery purposes,
and cc describes the track compression algorithm. The compression
algorithms are: B’00’ = uncompressed, B’01’ = zlib, B’10’ = bzip2,
B’11’ is currently invalid. Data in TRKHDR is stored in big-endian
byte order. Described by the CKDDASD_TRKHDR struct; 5 bytes in size.
COUNT field
8 bytes, containing CC (two bytes), HH (two bytes), R (one byte), KL
(one byte), and DL (two bytes). CC is the (relative zero) cylinder
number. HH is the (relative zero) head number. R is the (relative
zero) record number on the track. KL is the key length; if zero no key
is present. DL is the length of the data record. Data in the COUNT
field is stored in big-endian byte order. Described by the
CKDDASD_RECHDR struct; 8 bytes in size.
KEY field
if present, KL bytes of record key; immediately follows the COUNT
field. Byte order is not a factor for the KEY field; to the extent it
is examined by Hercules code it is simply a byte stream. Size varies.
DATA field.
if present, DL bytes of record data; immediately follows the KEY field
for keyed record, else immediately follows the COUNT field for unkeyed
records. Byte order is not a factor for the DATA field; to the extent
it is examined by Hercules code it is simply a byte stream. Size
varies.
GLOSSARY
CKD
Count, Key, Data - contents of an track. Also refers to the Hercules
uncompressed DASD image file.
CCKD
Compressed Count, Key, Data - compressed contents of a track. Also
refers to the Hercules compressed DASD image file.
DASD
Direct Access Storage Device - term the IBM mainframe world uses to
refer to hard drives.
EOT
End Of Track - indicated by 8X’FF’ in the COUNT field.
SEE ALSO
http://www.hercules-390.org/ the Hercules emulator homepage.
http://www.hercules-390.org/cckddasd.html which describes
the Hercules CCKD DASD facility.
http://www.hercules-390.org/hercconf.html which describes
the Hercules configuration file.
HISTORY
2003-02-07 originally written by James M. Morrison
2003-02-03 cckd(4)