CKD volumes for IBM Z: LCUs, volumes, PAV
-
Phase 0: Before you start
-
Phase 1: Plan and install
-
Phase 2: Build the storage
-
Phase 3: Copy Services
-
Phase 4: Run it day to day
-
Phase 5: Troubleshooting and career
To create DS8000 CKD volumes for IBM Z, you climb the same ladder as for open systems (arrays, ranks, pools) and then add two mainframe steps: logical control units (LCUs) with a subsystem ID, and 3390 volumes sized in cylinders. There’s no host mapping at all. The mainframe finds its volumes through its own I/O definition, which means the IDs you pick on the DS8000 have to match what the z/OS team defines.
You’ll build a CKD pool pair, create an even and an odd LCU with mklcu, add 3390-9 and 3390-A (EAV) volumes with mkckdvol and see where parallel access volume (PAV) aliases fit in. Along the way you’ll run into the rules that catch people out: the LCU comes first, 3390 and 3390-A have cylinder limits, an address group belongs to one platform, and SSIDs have to be unique.
Because CKD uses its own array sites, this lesson starts from a fresh practice DS8000, and you won’t need the FB setup from Lessons 11 to 15.
| Time | You need | By the end you can |
|---|---|---|
| 60 to 75 minutes | The practice shell and lab.profile; a calculator for cylinder sizes | Create CKD ranks and a pool pair, create LCUs with unique SSIDs, size 3390 and 3390-A volumes correctly, and explain PAV aliases with mkaliasvol |
What it is, in one line
A CKD volume is a 3390-style mainframe disk, sized in cylinders, that lives in a logical control unit (LCU) with its own subsystem ID; IBM Z reaches it over FICON through its I/O definition, with no host mapping on the DS8000.
In Simple Words
Letter boxes in a big post office
Think of a big post office with rows of letter boxes. Every row has a number and so does every box in it, so 8003 means row 80, box 03, and each row has a name plate at the end, like “Branch 8080”, that no other post office in the city is allowed to use. Nobody can rent a box until the post office has put the row up, and after that boxes can be added to it, small or large.
Some customers get a lot of mail at once, so the post office gives them extra side windows and three clerks can serve the same customer together. On a DS8000 for the mainframe, the row is the LCU, its name plate is the SSID, a box is a CKD volume and the side windows are PAV aliases.
Engineer's View
CKD on the DS8A00
CKD (count key data) is the mainframe disk format, and a 3390 cylinder holds 15 tracks of 56,664 bytes, which comes to 849,960 bytes.
- Ranks and pools:
mkrank -stgtype ckdwith small 21-cylinder extents (the default) or large 1113-cylinder ones, then a CKD pool pair withmkextpool -stgtype ckd. As with FB, FlashCore Module pools only take ESE (thin) volumes. - LCUs:
mklcu -qty n -id XX -ss SSID. IDs run from 00 to FE, with even LCUs in rank group 0 and odd ones in rank group 1. The LCUs have to exist before any volumes, and the default type is 3990-6. - SSID: the subsystem ID has to be unique across every storage system that the mainframe and Copy Services can see. The GUI builds it from a prefix plus the LCU ID.
- Address groups: there are 16 of them (00-0F, 10-1F, … F0-FE). As soon as a group has an LCU it’s CKD-only, and as soon as it has FB volumes it’s FB-only.
- Volume ID LLVV: LL is the LCU and VV is the unit address offset, and both have to match the CUADD and device numbers in the IODF (HCD) on the IBM Z side. Each LCU holds 256 addresses, shared between base and alias volumes.
- Sizes: 3390-1 = 1,113 cylinders, 3390-3 = 3,339, 3390-9 = 10,017, 3390-27 = 30,051, 3390-54 = 60,102. A plain 3390 goes up to 65,520 cylinders. Above that, use
-datatype 3390-A(EAV) in multiples of 1,113 from 65,667 up to 1,182,006 cylinders. - PAV: alias devices let z/OS run several I/Os against one base volume at the same time.
mkaliasvol -base 8000-8003 -order decrement -qty 2 80FFcreates aliases in the same LCU, and HyperPAV and SuperPAV pool the aliases instead of tying each one to a single base.
You don’t need a host, cluster or volume group, because any FICON port the IODF uses gives access, as defined on IBM Z.
On DS8900F: the commands and limits are the same.
How it works, step by step
Setting up CKD is a joint job with the z/OS team, so agree the plan first and then build in this order.
1Agree LCUs, SSIDs and addresses with z/OS
The IODF belongs to the z/OS team. Sit down together and choose the LCU IDs (say 80 and 81), the SSIDs (unique across the whole site) and how many base and alias addresses each LCU gets. Write it all down, because a mismatch only shows up when z/OS tries to vary the devices online.
2Build CKD ranks and a pool pair
Keep these on separate array sites from FB. Run mkrank -stgtype ckd on two arrays, mkextpool -stgtype ckd in rank groups 0 and 1, and then chrank -extpool. The default 21-cylinder extents waste the least space.
3Create the LCUs
mklcu -qty 2 -id 80 -ss 8080 creates LCU 80 with SSID 8080 and LCU 81 with SSID 8081. Choose an address group with no FB volumes in it, and use lslcu to see the group, address group, volume count and SSID.
4Create base volumes
mkckdvol -extpool P0 -cap 10017 -name prod_#h 8000-8003 makes four volumes of 3390-9 size in LCU 80, an even LCU in an even pool. Each mkckdvol command only works on one LCU at a time.
5Size large volumes as EAV
For anything over 65,520 cylinders, add -datatype 3390-A and pick a multiple of 1,113, such as 262,668 cylinders (236 times 1,113). Sizing volumes in multiples of 1,113 also means you don’t waste part of an extent.
6Add PAV aliases
Aliases share the LCU’s 256 addresses with the bases, and the usual plan puts bases at the bottom (00 upward) and aliases at the top (FF downward). You create them with mkaliasvol, and lsckdvol lists them with voltype CKD Alias. With HyperPAV, z/OS hands aliases to bases as they need them.
7Hand over to z/OS
The z/OS team then activates the IODF, varies the devices online and initialises the volumes (ICKDSF) with volume serials, and once a volser is written you’ll see it in lsckdvol on the DS8000 side.
| Model | Cylinders | Approx. size |
|---|---|---|
| 3390-1 | 1,113 | 0.95 GB |
| 3390-3 | 3,339 | 2.8 GB |
| 3390-9 | 10,017 | 8.5 GB |
| 3390-27 | 30,051 | 25.5 GB |
| 3390-54 | 60,102 | 51 GB |
| 3390-A (EAV) | 65,667 to 1,182,006 (steps of 1,113) | up to about 1 TB |
Hands-on lab: LCUs, 3390 and EAV volumes
Before you run any command, double-check it
Read every command twice before you press Enter. Check the target: the system or account, the IDs, the names and the sizes. These commands are for learning and were tested in our lab, not on your system. At work, run the read-only list commands first, follow your change process, make sure a backup exists, and ask a second person to check anything that changes or deletes data. You run them at your own risk.
You’ll build a small mainframe configuration on the lab DS8A50, with two CKD ranks on array sites S3 and S4, a pool pair, LCUs 80 and 81, eight 3390-9 volumes and one EAV.
Practice shell note: the practice shell is our own teaching tool, not IBM software. Real DS CLI output looks very close to this but isn’t identical, the capacity numbers come from the shell’s formulas and some messages are the shell’s own. The shell doesn’t include mkaliasvol, so the PAV step only shows IBM’s syntax. Every output below is what the shell printed.
1Reset and build CKD ranks
Run this:
python ds8sim.py -cfg lab.profile
simctl reset
mkarray -raidtype 6 -arsite S3
mkarray -raidtype 6 -arsite S4
mkrank -array A0 -keygrp 1 -stgtype ckd
mkrank -array A1 -keygrp 1 -stgtype ckd
lsrank -lYou should see this:
dscli> mkarray -raidtype 6 -arsite S3
CMUC00004I mkarray: Array A0 successfully created.
dscli> mkarray -raidtype 6 -arsite S4
CMUC00004I mkarray: Array A1 successfully created.
dscli> mkrank -array A0 -keygrp 1 -stgtype ckd
CMUC00007I mkrank: Rank R0 successfully created.
dscli> mkrank -array A1 -keygrp 1 -stgtype ckd
CMUC00007I mkrank: Rank R1 successfully created.
dscli> lsrank -l
Date/Time: 24 October 2026 14:18:16 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
ID Group State datastate Array RAIDtype extpoolID extpoolnam stgtype exts usedexts keygrp marray extsize totalLogicalCap(MiB/cyl) usedLogicalCap(MiB/cyl) totalPhysicalCap(MiB/cyl) usedPhysicalCap(MiB/cyl) compressionRatio compressionType
=====================================================================================================================================================================================================================================================
R0 - Unassigned Normal A0 6 - - ckd 7188237 0 1 MA1 21cyl 150952977 0 33545108 0 1.00 compression
R1 - Unassigned Normal A1 6 - - ckd 7188237 0 1 MA2 21cyl 150952977 0 33545108 0 1.00 compressionBoth ranks are ckd with the default 21-cylinder extents and are encrypted with key group 1. For CKD, the capacity columns are in cylinders.
✅ Checkpoint: R0 and R1 show stgtype ckd and extsize 21cyl.
2Create the CKD pool pair
Run this:
mkextpool -rankgrp 0 -keygrp 1 -stgtype ckd CKD_0
mkextpool -rankgrp 1 -keygrp 1 -stgtype ckd CKD_1
chrank -extpool P0 R0
chrank -extpool P1 R1
lsextpoolYou should see this:
dscli> mkextpool -rankgrp 0 -keygrp 1 -stgtype ckd CKD_0
CMUC00000I mkextpool: Extent pool P0 successfully created.
dscli> mkextpool -rankgrp 1 -keygrp 1 -stgtype ckd CKD_1
CMUC00000I mkextpool: Extent pool P1 successfully created.
dscli> chrank -extpool P0 R0
CMUC00008I chrank: Rank R0 successfully modified.
dscli> chrank -extpool P1 R1
CMUC00008I chrank: Rank R1 successfully modified.
dscli> lsextpool
Date/Time: 24 October 2026 14:18:16 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
Name ID stgtype rankgrp status availstor (2^30B) %allocated available reserved numvols
=======================================================================================
CKD_0 P0 ckd 0 below 119491 0 7188173 64 0
CKD_1 P1 ckd 1 below 119491 0 7188173 64 0✅ Checkpoint: CKD_0 (P0, group 0) and CKD_1 (P1, group 1) are the same size.
3Try a volume before the LCU exists
Run this:
mkckdvol -extpool P0 -cap 10017 -sam ese -name prod_#h 8000You’ll get this error:
dscli> mkckdvol -extpool P0 -cap 10017 -sam ese -name prod_#h 8000
CMUN02282E mkckdvol: 8000: Unable to create CKD logical volume: CKD volumes require a CKD logical subsystem.It’s the same message the IBM Redbook shows. FB volumes create their LSS automatically, but CKD volumes don’t, so their LCU has to be there first.
✅ Checkpoint: You know why CMUN02282E appears.
4Create two LCUs with SSIDs
Run this:
mklcu -qty 2 -id 80 -ss 8080
lslcuYou should see this:
dscli> mklcu -qty 2 -id 80 -ss 8080
CMUC00017I mklcu: LCU 80 successfully created.
CMUC00017I mklcu: LCU 81 successfully created.
dscli> lslcu
Date/Time: 24 October 2026 14:18:16 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
ID Group addrgrp confgvols subsys conbasetype
=============================================
80 0 8 0 0x8080 3990-6
81 1 8 0 0x8081 3990-6-qty 2 made 80 (group 0) and 81 (group 1), both in address group 8, and the SSIDs follow the LCU as 0x8080 and 0x8081. From now on address group 8 is CKD-only.
✅ Checkpoint: LCU 80 is group 0 and LCU 81 is group 1, SSIDs 8080 and 8081.
5Create 3390-9 volumes in both LCUs
These FCM pools only take ESE volumes, so add -sam ese. A 3390-9 is 10,017 cylinders.
Run this:
mkckdvol -extpool P0 -cap 10017 -sam ese -name prod_#h 8000-8003
mkckdvol -extpool P1 -cap 10017 -sam ese -name prod_#h 8100-8103You should see this:
dscli> mkckdvol -extpool P0 -cap 10017 -sam ese -name prod_#h 8000-8003
CMUC00021I mkckdvol: CKD Volume 8000 successfully created.
CMUC00021I mkckdvol: CKD Volume 8001 successfully created.
CMUC00021I mkckdvol: CKD Volume 8002 successfully created.
CMUC00021I mkckdvol: CKD Volume 8003 successfully created.
dscli> mkckdvol -extpool P1 -cap 10017 -sam ese -name prod_#h 8100-8103
CMUC00021I mkckdvol: CKD Volume 8100 successfully created.
CMUC00021I mkckdvol: CKD Volume 8101 successfully created.
CMUC00021I mkckdvol: CKD Volume 8102 successfully created.
CMUC00021I mkckdvol: CKD Volume 8103 successfully created.✅ Checkpoint: Eight “CKD Volume … successfully created” lines.

6Add one extended address volume
Run this:
mkckdvol -extpool P0 -cap 262668 -datatype 3390-A -sam ese -name eav_#h 8010
lsckdvolYou should see this:
dscli> mkckdvol -extpool P0 -cap 262668 -datatype 3390-A -sam ese -name eav_#h 8010
CMUC00021I mkckdvol: CKD Volume 8010 successfully created.
dscli> lsckdvol
Date/Time: 24 October 2026 14:18:16 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
Name ID accstate datastate configstate deviceMTM voltype orgbvols extpool cap (cyl)
===========================================================================================
prod_8000 8000 Online Normal Normal 3390-9 CKD Base - P0 10017
prod_8001 8001 Online Normal Normal 3390-9 CKD Base - P0 10017
prod_8002 8002 Online Normal Normal 3390-9 CKD Base - P0 10017
prod_8003 8003 Online Normal Normal 3390-9 CKD Base - P0 10017
eav_8010 8010 Online Normal Normal 3390-A CKD Base - P0 262668
prod_8100 8100 Online Normal Normal 3390-9 CKD Base - P1 10017
prod_8101 8101 Online Normal Normal 3390-9 CKD Base - P1 10017
prod_8102 8102 Online Normal Normal 3390-9 CKD Base - P1 10017
prod_8103 8103 Online Normal Normal 3390-9 CKD Base - P1 10017deviceMTM shows 3390-9 for the 10,017-cylinder volumes and 3390-A for the EAV. Base addresses 00-03 and 10 in LCU 80 are now in use, and the top of the range is kept free for aliases.
✅ Checkpoint: Nine CKD Base volumes, one of them 3390-A with 262668 cylinders.
7Look at one volume, then plan aliases
Run this:
showckdvol -rank 8000You should see this:
dscli> showckdvol -rank 8000
Date/Time: 24 October 2026 14:18:16 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
Name prod_8000
ID 8000
deviceMTM 3390-9
datatype 3390
addrgrp 8
extpool P0
exts 477
cap (cyl) 10017
cap (2^30B) 7.9
ranks 0
sam ese
eam rotateexts
cap (Mod1) 9.0
realextents 0
virtualextents 2
(output shortened)477 extents of 21 cylinders cover 10,017 cylinders, and cap (Mod1) 9.0 tells you it’s nine 3390-1 units. Since it’s thin, no real extents get used until z/OS writes to it.
On a real DS8000 this is where you’d add PAV aliases at the top of LCU 80 with IBM’s syntax, for example two aliases per base for 8000-8003, counting down from FF. The practice shell can’t run this command:
mkaliasvol -base 8000-8003 -order decrement -qty 2 80FF✅ Checkpoint: You can explain where aliases go in the LCU and which command creates them.
Save as setup-b16.txt for later lessons:
# setup-b16.txt: CKD arrays, ranks, pools, LCUs 80-81 and base volumes (Lesson 16). Run after simctl reset.
mkarray -raidtype 6 -arsite S3
mkarray -raidtype 6 -arsite S4
mkrank -array A0 -keygrp 1 -stgtype ckd
mkrank -array A1 -keygrp 1 -stgtype ckd
mkextpool -rankgrp 0 -keygrp 1 -stgtype ckd CKD_0
mkextpool -rankgrp 1 -keygrp 1 -stgtype ckd CKD_1
chrank -extpool P0 R0
chrank -extpool P1 R1
mklcu -qty 2 -id 80 -ss 8080
mkckdvol -extpool P0 -cap 10017 -sam ese -name prod_#h 8000-8003
mkckdvol -extpool P1 -cap 10017 -sam ese -name prod_#h 8100-8103
Break It, Then Fix It
Here are two classic CKD mistakes: a size that doesn’t fit the device type, and an LCU in an address group that open systems are already using.
1Break it: a 70,000-cylinder volume
The DB2 team asks for “about 70,000 cylinders”, so you try it as a normal 3390 and then as a 3390-A.
Run this:
mkckdvol -extpool P0 -cap 70000 -sam ese -name big_#h 8011
mkckdvol -extpool P0 -cap 70000 -datatype 3390-A -sam ese -name big_#h 8011You’ll get these errors:
dscli> mkckdvol -extpool P0 -cap 70000 -sam ese -name big_#h 8011
CMUN02049E mkckdvol: 8011: A 3390 volume can have at most 65520 cylinders. Use -datatype 3390-A for larger volumes.
dscli> mkckdvol -extpool P0 -cap 70000 -datatype 3390-A -sam ese -name big_#h 8011
CMUN02050E mkckdvol: 8011: Above 65520 cylinders a 3390-A volume must be a multiple of 1113 cylinders between 65667 and 1182006.Why: a plain 3390 tops out at 65,520 cylinders, so anything bigger has to be 3390-A, and an EAV above 65,520 cylinders has to be a multiple of 1,113 (that’s the rule IBM documents). 70,000 isn’t. (The message wording is the practice shell’s.)
Fix: round up to the next multiple of 1,113, which is 64 times 1,113, or 71,232 cylinders.
Run this:
mkckdvol -extpool P0 -cap 71232 -datatype 3390-A -sam ese -name big_#h 8011
lsckdvol 8011You should see this:
dscli> mkckdvol -extpool P0 -cap 71232 -datatype 3390-A -sam ese -name big_#h 8011
CMUC00021I mkckdvol: CKD Volume 8011 successfully created.
dscli> lsckdvol 8011
Date/Time: 24 October 2026 14:18:40 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
Name ID accstate datastate configstate deviceMTM voltype orgbvols extpool cap (cyl)
==========================================================================================
big_8011 8011 Online Normal Normal 3390-A CKD Base - P0 71232✅ Checkpoint: big_8011 is a 3390-A of 71232 cylinders.

2Break it: LCUs in an FB address group
Last week the open systems team created volumes 9000-9001. Run their script first (save it as fbteam.txt) and then try giving the mainframe LCUs 90 and 91.
File fbteam.txt:
# fbteam.txt: what the open systems team did last week (practice only)
mkarray -raidtype 6 -arsite S7
mkrank -array A2 -keygrp 1 -stgtype fb
mkextpool -rankgrp 0 -keygrp 1 -stgtype fb FB_0
chrank -extpool P2 R2
mkfbvol -extpool P2 -cap 50 -name app_#h 9000-9001
Run this:
quit
python ds8sim.py -cfg lab.profile -script fbteam.txt
python ds8sim.py -cfg lab.profile
mklcu -qty 2 -id 90 -ss 8090
lslssYou’ll get this error:
dscli> mklcu -qty 2 -id 90 -ss 8090
CMUN02045E mklcu: 90: Address group 9 already contains FB volumes. An address group can hold only FB or only CKD.
dscli> lslss
Date/Time: 24 October 2026 14:18:40 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
ID Group addrgrp stgtype confgvols subsys
=========================================
90 0 9 fb 2 0xFF90Why: LSS 90 holds FB volumes, which makes address group 9 (LSSs 90 to 9F) FB-only, so no LCU can go there. On a real system the z/OS definitions for 90xx would fail as well.
Fix: pick a free address group. Check lslss and lslcu first, then agree the new IDs with the z/OS team.
Run this:
mklcu -qty 2 -id A0 -ss 80A0
lslcuYou should see this:
dscli> mklcu -qty 2 -id A0 -ss 80A0
CMUC00017I mklcu: LCU A0 successfully created.
CMUC00017I mklcu: LCU A1 successfully created.
dscli> lslcu
Date/Time: 24 October 2026 14:18:40 UTC IBM DSCLI Version: 7.10.10.348 DS: IBM.2107-78SV001
ID Group addrgrp confgvols subsys conbasetype
=============================================
80 0 8 5 0x8080 3990-6
81 1 8 4 0x8081 3990-6
A0 0 A 0 0x80A0 3990-6
A1 1 A 0 0x80A1 3990-6✅ Checkpoint: LCUs A0 and A1 exist in address group A.
This happened at work
The mirror that would not start because of one SSID
A large insurer ran its policy system on IBM Z with two DS8000s, one in each data centre, linked by Metro Mirror. When a new claims workload came along they added a third box, a DS8A50, and planned to mirror that to the DR site as well.
Whoever set up the new box went with the GUI’s default SSID prefix, and the LCUs ended up with SSIDs that already existed on the production DS8000. Nobody noticed at first, because z/OS on the claims LPARs only saw the new box and was perfectly happy. It all came out on mirror day. The Copy Services Manager session wouldn’t add the new pairs, the team tried mkpprcpath by hand and the path setup failed for the clashing LSSs, and GDPS on the production side started flagging duplicate subsystem IDs.
You can’t change an SSID in a hurry. The LCU has to be free of Copy Services relationships, and the z/OS IODF had to change too, so the team spent three weekends moving the claims volumes to new LCUs with unique SSIDs before they could build the mirror.
These days the insurer keeps a single SSID register covering every DS8000 in both data centres, the z/OS team owns it, and no LCU gets created until its SSID is in the register.
Common mistakes and troubleshooting
| Symptom | Likely cause | What to check / fix |
|---|---|---|
| mkckdvol: CKD volumes require a CKD logical subsystem | LCU not created | Run mklcu first, then mkckdvol |
| 3390 size rejected above 65,520 | Need EAV | -datatype 3390-A |
| 3390-A size rejected | Not a multiple of 1,113 above 65,520 | Round to a multiple of 1,113 |
| mklcu refused in an address group | FB volumes already there | Use an address group that has no FB LSSs |
| Even LCU volume refused | Pool from rank group 1 | Even LCU with an even pool, odd with odd |
| z/OS cannot vary devices online | LCU or unit address not matching IODF CUADD/devices | Compare lslcu and lsckdvol against the IODF |
| Mirror or GDPS errors on new box | Duplicate SSID | Keep a site-wide SSID register and fix clashes before Copy Services |
A habit worth building: before mklcu, paste the lslss and lslcu output into the change record and have the z/OS team confirm the IDs and SSIDs in writing.
Interview questions
Click a question to open it. They’re written the way an interviewer would ask them, and under each one you’ll find why they ask it and one way you could answer in your own words.
Fresher level
1. What is an LCU on a DS8000 and why must it exist before CKD volumes?
Why they ask this: It’s a basic CKD concept check.
How you might answer: An LCU is the CKD version of a logical subsystem. To IBM Z it looks like a 3990 control unit image, with its own SSID and up to 256 device addresses. CKD volumes live inside an LCU, and since it isn’t created automatically the way it is for FB, I create it with mklcu first.
2. How big is a 3390-9 and when do you need 3390-A?
Why they ask this: They want to see practical sizing knowledge.
How you might answer: A 3390-9 is 10,017 cylinders, roughly 8.5 GB, and a plain 3390 can go up to 65,520 cylinders. Beyond that I’d use -datatype 3390-A, an extended address volume, in multiples of 1,113 cylinders up to 1,182,006.
2–5 years experience
3. Walk me through preparing CKD storage for a new z/OS LPAR.
Why they ask this: They want the whole process, done together with the z/OS team.
How you might answer: I’d start by agreeing LCU IDs, SSIDs and address ranges with the z/OS team, because they have to match the IODF. Then I build CKD ranks and a pool pair, run mklcu -qty 2 -id XX -ss SSID for an even and an odd LCU in a free address group, and use mkckdvol for the bases, in 1,113-cylinder multiples where I can. After that I add PAV aliases with mkaliasvol at the top of each LCU, set the ports we need to FICON and hand the device list to z/OS so they can vary it online and initialise it.
4. What are PAV aliases and how many addresses do they use?
Why they ask this: It checks your performance knowledge on IBM Z.
How you might answer: PAV aliases are extra device addresses that let z/OS run several I/Os against the same base volume at once. They share the LCU’s 256 addresses with the bases and usually sit from FF downward. With HyperPAV and SuperPAV the aliases get assigned on demand, so you need fewer of them than with static PAV.
Senior level
5. How would you design address groups on a DS8000 that serves both IBM Z and open systems, with Metro Mirror to DR?
Why they ask this: It’s a senior planning question that spans platforms and Copy Services.
How you might answer: I’d split the 16 address groups into CKD and FB ranges from day one, say 0-7 for CKD and 8-F for FB, and document it so nobody drops FB volumes into a CKD group by accident, with each LCU and LSS pair even and odd for balance. SSIDs would come from a site-wide register so they’re unique across all the DS8000s, and the DR box would use the same LCU IDs and addresses, which keeps the mirroring and GDPS definitions simple.
6. A new DS8000 cannot join an existing Metro Mirror and GDPS setup because of duplicate SSIDs. How do you recover?
Why they ask this: They’re testing recovery planning and whether you take ownership.
How you might answer: First I’d confirm the clash with lslcu on both systems. SSIDs have to be unique and can’t be changed while Copy Services are using the LCU, so I’d plan new LCUs with unique SSIDs, get the z/OS team to update the IODF and migrate the data to the new volumes. Only after that would I build the paths and pairs, and I’d set up an SSID register for every box we add later.
Quick quiz
Q1. What must exist before you create a CKD volume?
- A host
- A volume group
- An LCU
- An FB LSS
Show answer
C: CKD volumes need an LCU created with mklcu.
Q2. How many cylinders is a 3390-9?
- 1,113
- 3,339
- 10,017
- 65,520
Show answer
C: a 3390-9 has 10,017 cylinders.
Q3. Which size is valid for a 3390-A above 65,520 cylinders?
- 70,000
- 71,232
- 100,000
- 65,521
Show answer
B: above 65,520 it has to be a multiple of 1,113, and 71,232 = 64 x 1,113.
Q4. mklcu fails in address group 9. Most likely cause?
- RAID 5
- FB volumes already use that address group
- Encryption off
- Pool full
Show answer
B: an address group holds FB or CKD, never both.
Q5. What must be unique across all connected storage systems?
- The pool name
- The SSID
- The rank ID
- The extent size
Show answer
B: SSIDs have to be unique for z/OS and Copy Services.
Quick recap
- CKD uses the same arrays, ranks and pools, only with -stgtype ckd and 21 or 1113 cylinder extents.
- Create LCUs first: mklcu -qty 2 -id XX -ss SSID; even LCU in rank group 0, odd in 1.
- mkckdvol -extpool Pn -cap cylinders [-datatype 3390-A] LLVV; 3390 up to 65,520 cyl, EAV in 1,113 steps to 1,182,006.
- An address group is either FB or CKD, and SSIDs have to be unique across the site.
- PAV aliases (mkaliasvol) share the LCU’s 256 addresses with bases.
- There’s no host mapping, because IBM Z reaches its volumes over FICON through the IODF.
Next lesson
Lesson 17: Expand, delete and reclaim volumes safely → Next you grow volumes with chfbvol and chckdvol, delete them safely and release thin space.
Further reading: create DS8000 CKD volumes
Want to go deeper into create DS8000 CKD volumes? IBM Redbook SG24-8559, sections 9.8 and 10.4 covers CKD pools, LCUs, volumes and PAV in both the GUI and DS CLI, and for the theory you can go back to FB and CKD volumes in the Architecture course.
You can also see the full plan for this course on the IBM DS8000 Implementation course page.
