1cckd(4) Kernel Interfaces Manual cckd(4)
2
3
4
6 cckd - Hercules Compressed CKD DASD image file
7
8
10 Hercules DASD image file that emulates IBM mainframe DASD devices on a
11 (usually) non-mainframe platform. Specified in the Hercules configura‐
12 tion file (default name hercules.cnf) to describe the DASD devices Her‐
13 cules is to emulate. Also specified as input and/or output file to
14 several Hercules utilities. Hercules compressed DASD devices are fre‐
15 quently referred to as CCKD. Hercules uncompressed DASD devices are
16 frequently referred to as CKD. Hercules CKD DASD image files are
17 largely compatible with P/390 AWS DASD files.
18
19
21 The following provides a technical overview of CCKD internal struc‐
22 tures. Except as indicated below, data in the following structures is
23 stored in the byte order indicated by the CDEVHDR.options CCKD_BIGEN‐
24 DIAN bit (the 0x02 bit). This bit is 1 when data is big-endian byte
25 order, 0 when data is little-endian byte order.
26
27 DEVHDR
28 occupies the first 512 bytes of a CKD or CCKD DASD file. The DEVHDR
29 contains the device type and the number of heads per cylinder. Its
30 contents are the same whether the DASD image is compressed (CCKD) or
31 not (CKD). Described by the CKDDASD_DEVHDR struct; 512 bytes in size.
32
33 CDEVHDR
34 immediately follows the DEVHDR, and contains fields describing the num‐
35 ber of L1ENTs in the L1TAB, the number of L2ENTs in each L2TAB, and
36 anchors the free space chain. Described by the CCKDDASD_DEVHDR struct;
37 512 bytes in size.
38
39 L1TAB
40 immediately follows the CDEVHDR, and consists of L1ENT entries, each of
41 which points to an L2TAB. Each L1ENT is an U32 (4 bytes) offset into
42 the CCKD DASD file. The CDEVHDR numl1tab field describes how many
43 L1ENTs are in the L1TAB. L1ENTs are described by the CCKD_L1ENT type‐
44 def; the L1TAB is of variable size. Conceptually each L1ENT describes
45 cdevhdr.numl2tab tracks.
46
47 L2TAB
48 is pointed to by an L1ENT, and is composed of L2ENT entries, the number
49 of which is described by the CDEVHDR numl2tab field; currently 256
50 L2ENTs in each L2TAB. L2ENTs contain the offset to the TRKHDR, and the
51 combined length of the TRKHDR and (optionally) compressed track data.
52 The CDEVHDR numl2tab field describes how many L2ENTs are in each L2TAB.
53 Currently, there are 256 L2ENTs in each L2TAB. Described by the
54 CCKD_L2ENT struct; (256 * 8) bytes in size. Conceptually each L2ENT
55 describes one track.
56
57 FREEBLK
58 describes free space in the CCKD DASD image, anchored by the CDEVHDR
59 free field. Consists of a 4 byte offset to the next free space (or
60 zero for end of free space chain), and a 4 byte length of the free
61 space (which length includes the 8 bytes occupied by the FREEBLK
62 itself), followed by zero or more bytes of residual data. Described by
63 the first 8 bytes of the CCKD_FREEBLK struct; 8 bytes in size.
64
65 TRKHDR
66 Occurs once at the beginning of each track. contains flag (one byte),
67 CC (two bytes), and HH (two bytes) of the track. When the flag byte =
68 0x00, TRKHDR is the same as the Home Address on real DASD. Flag bits
69 are described in hercules.h, and are of the format nlllllcc where n=1
70 for new track header format, lllll is used for track recovery purposes,
71 and cc describes the track compression algorithm. The compression
72 algorithms are: B'00' = uncompressed, B'01' = zlib, B'10' = bzip2,
73 B'11' is currently invalid. Data in TRKHDR is stored in big-endian
74 byte order. Described by the CKDDASD_TRKHDR struct; 5 bytes in size.
75
76 COUNT field
77 8 bytes, containing CC (two bytes), HH (two bytes), R (one byte), KL
78 (one byte), and DL (two bytes). CC is the (relative zero) cylinder
79 number. HH is the (relative zero) head number. R is the (relative
80 zero) record number on the track. KL is the key length; if zero no key
81 is present. DL is the length of the data record. Data in the COUNT
82 field is stored in big-endian byte order. Described by the CKD‐
83 DASD_RECHDR struct; 8 bytes in size.
84
85 KEY field
86 if present, KL bytes of record key; immediately follows the COUNT
87 field. Byte order is not a factor for the KEY field; to the extent it
88 is examined by Hercules code it is simply a byte stream. Size varies.
89
90 DATA field.
91 if present, DL bytes of record data; immediately follows the KEY field
92 for keyed record, else immediately follows the COUNT field for unkeyed
93 records. Byte order is not a factor for the DATA field; to the extent
94 it is examined by Hercules code it is simply a byte stream. Size
95 varies.
96
97
99 CKD
100 Count, Key, Data - contents of an track. Also refers to the Hercules
101 uncompressed DASD image file.
102
103 CCKD
104 Compressed Count, Key, Data - compressed contents of a track. Also
105 refers to the Hercules compressed DASD image file.
106
107 DASD
108 Direct Access Storage Device - term the IBM mainframe world uses to
109 refer to hard drives.
110
111 EOT
112 End Of Track - indicated by 8X'FF' in the COUNT field.
113
114
116 http://www.hercules-390.org/ the Hercules emulator homepage.
117
118 http://www.hercules-390.org/cckddasd.html which describes
119 the Hercules CCKD DASD facility.
120
121 http://www.hercules-390.org/hercconf.html which describes
122 the Hercules configuration file.
123
124
126 2003-02-07 originally written by James M. Morrison
127
128
129
130
131
132 2003-02-03 cckd(4)