Licensed functions and activation keys

DS8000 license activation is where the functions your company paid for become working features on the storage. Without the Base Function keys you can’t create a single array, and without the Copy Services keys FlashCopy and Metro Mirror stay locked. The keys come from an IBM website and are tied to one machine serial number.

You’ll learn the five G10 licence bundles and what’s inside each one, how capacity is counted (raw TB for Base Function, provisioned TB for Copy Services), and the full path from the IBM Entitled Systems Support site to applykey and lskey, along with which licence changes are concurrent and which need a restart.

In the lab you collect the machine data IBM asks for and then write a small Python audit that checks the installed licences against the real raw capacity of the practice DS8A50.

TimeYou needBy the end you can
65 to 80 minutesPython 3.8+, and the practice shell with lab.profile in C:\ds8k-labName the five licence bundles, size Base Function and Copy Services licences, collect the data for IBM ESS, and check installed keys against raw capacity

What it is, in one line

DS8000 license activation means getting activation keys for your machine from IBM ESS and applying them, so the licensed functions are switched on for the right capacity and scope.

In Simple Words

A phone and its SIM plans

When you buy a new phone it switches on fine, but it can’t call anyone until you put in a SIM card with a plan. The basic plan covers calls and messages, and if you want internet you buy a data pack, or an international pack for calling abroad. Each pack comes in a size, 10 GB or 50 GB, and the shop gives you a code that only works on your number; type it on your friend’s phone and nothing happens.

A DS8000 works the same way. The Base Function licence is the basic plan, and nothing works without it, while Copy Services, z-synergy Services and the rest are the extra packs, each sized in terabytes and each activated by a code that only works on your machine’s serial number.

Engineer's View

The five G10 licence bundles

BundleFeature codesScopeMain contentsHow it is sized
Base Function (BF)BAA0–BAA6All or FBLogical config for FB, OEL, thin provisioning, Easy Tier, encryption authorization, local key manager, FCM compression, LDAP, MFAAt least the full raw capacity
Copy Services (CS)BAB0–BAB7All, FB or CKDFlashCopy, Metro Mirror, Global Mirror, Global Copy, MGM, MT-PPRC, Safeguarded Copy, HyperSwap, CSM on HMCProvisioned TB in CS relationships, at most raw
z-synergy Services (zsS)BAC0–BAC8CKDFICON, PAV, HyperPAV, SuperPAV, zHPF, zHyperLink, zDDB, CKD compressionRaw TB of CKD ranks
Transparent Cloud Tiering (TCT)BAD0–BAD8CKDCloud tiering, encryption, TS7700 compressionLike zsS
Security Function GroupBAE0–BAEZAllFCM ransomware threat detectionRaw capacity, like BF

Capacity is counted in decimal TB, and raw capacity is drives × drive size, so 16 drives of 3.84 TB give 61.44 TB. You can’t order just any number of TB, because the step size grows as the capacity grows.

Up to 100 TB you order in steps of 10 TB, up to 250 TB in steps of 15 TB, up to 500 TB in steps of 25 TB, and so on (Table 7-2 in the Redbook).

For Copy Services, FlashCopy counts source plus target, so a 10 TB source needs a 20 TB CS licence. If you order CS below raw capacity (sub-capacity), you need a steady Call Home connection and IBM Storage Insights watching usage. With FCMs, IBM usually suggests ordering CS on the drives’ nominal raw capacity.

Every function needs a matching 9031-FFA authorization (9372 for the Security Function Group). You get the keys from IBM Entitled Systems Support (ESS) by entering the machine type 5341, the model (A05 for a DS8A50), the serial number ending in 0 (the storage unit) and the machine signature from showsi. Then you apply them with the GUI System Setup wizard or with applykey against the storage image ID ending in 1.

Adding a licence, or raising capacity or scope, is concurrent. Removing a licence, lowering capacity, reducing scope (All to FB) or making a lateral change (FB to CKD) needs an initial machine load, and that means restarting the storage image.

On DS8900F the idea is the same but the bundles and feature codes are different, so check the licensing chapter for your model.

How it works, step by step

We’ll follow the licences of a new DS8A50 at a retailer from the order through to the first array. The retailer runs open systems only and mirrors its order database to a second site.

1Size the licences at order time

The Base Function licence has to cover all the raw capacity. About 292 TB raw rounds up to an orderable size of 300 TB. For Copy Services you add up the volumes that sit in mirror and FlashCopy relationships.

So a 60 TB Metro Mirror plus a 20 TB FlashCopy source (counted twice) comes to 100 TB.

With no CKD there’s no need for a z-synergy Services licence. IBM’s tip is to order BF and CS with scope All from day one, so you never face a disruptive scope change later.

2Collect the machine data

Once the SSR has finished the install, log in and run lssi and showsi. From these you need the machine type and serial in the MTS field (5341 and a serial ending in 0), the model (A05) and the signature (format ABCD-EF12-3456-7890).

DS8000 license activation steps: size, collect machine data, IBM ESS, apply keys, verify with lskey

3Get the keys from IBM ESS

On the Entitled Systems Support site go to My Entitled Hardware, Storage License Management, DS8000, and enter the model, the serial ending in 0 and the signature. The machine summary then shows what you bought and what’s been assigned.

Under Actions, Manage activations, give each licence a scope (FB, CKD or All) and a TB value for the storage image, and make sure no scope is left unassigned. Then download all the codes as one XML file.

The keys are 32-character strings, so typing them by hand is slow and easy to get wrong.

IBM ESS Storage License Management machine summary for a DS8A50 with BF and CS scoped to All
Illustration: in IBM ESS, the machine summary shows what was bought and assigned. Give every licence a scope and TB value, then download all codes as one XML file. The keys and signature shown are fake.

4Apply the keys

On a new machine, the DS GUI System Setup wizard has an Activate Licensed Functions step that imports the XML file, and later on you use Settings, Licensed Functions, Activate. With the installed DS CLI (not the embedded one) it looks roughly like this:

dscli> applykey -file c:\keys\5341_78SV000.xml IBM.2107-78SV001
CMUC00199I applykey: License Machine Code successfully applied to storage image IBM.2107-78SV001.

The file name carries the storage unit serial (ending 0), while the command targets the storage image ID (ending 1). Mixing the two up is the most common licence mistake there is.

How DS8000 licences are sized: Base Function, Copy Services, z-synergy Services, Security Function Group

5Verify before you build anything

Run lskey. Each row shows a function, its authorized TB (or on/off) and its scope. Base Function has to be installed before ranks can be formatted for FB, and z-synergy Services before ranks can be formatted for CKD.

Only after that do you go on to arrays and pools.

When you add drives later, it’s the same cycle: buy more TB, assign it in ESS, download the new keys and apply them. An increase is concurrent, so production keeps running the whole time.

Hands-on lab: read and audit DS8000 licences

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.

The practice shell already has a set of keys installed, the way a system looks after the SSR and a colleague have done the first steps. You’ll collect what IBM needs, read the keys and audit them against the real raw capacity.

Practice shell note: the practice shell is our own teaching tool, not IBM software. Its serial numbers, signature and licence values are made up for the lab, and it has no applykey command because keys only come from IBM for a real machine. Real DS CLI output looks very close to this but isn’t identical, and the wrong-ID message in the break lab is a practice shell message.

1Collect the data IBM ESS asks for

Run this:

python ds8sim.py -cfg lab.profile simctl reset
python ds8sim.py -cfg lab.profile lssi
python ds8sim.py -cfg lab.profile showsi IBM.2107-78SV001

You should see this (showsi shortened to the fields you need):

Name         ID               Storage Unit     Model WWNN             State  ESSNet
====================================================================================
ds8k-g10-lab IBM.2107-78SV001 IBM.2107-78SV000 A05   5005076303FFF0DD Online Enabled
Name             ds8k-g10-lab
ID               IBM.2107-78SV001
Storage Unit     IBM.2107-78SV000
Model            A05
Signature        5a7e-0d5a-8a50-0001
MTS              IBM.5341-78SV000

Note down three things for ESS: the machine type and serial from MTS (5341, serial 78SV000, ending in 0), the model A05, and the signature 5a7e-0d5a-8a50-0001. The ID ending in 1, IBM.2107-78SV001, is the storage image, and that’s the one applykey and lskey target.

✅ Checkpoint: You have the serial ending in 0, the model and the signature written down.

2Read the installed keys

Run this:

python ds8sim.py -cfg lab.profile lskey IBM.2107-78SV001

You should see this:

Activation Key                Authorization Level (TB) Scope
============================================================
Base function                 100.0                    All
Copy services                 100.0                    All
Encryption Authorization      on                       All
Global mirror (GM)            100.0                    All
zHPF                          on                       CKD
IBM HyperPAV                  on                       CKD
Thin Provisioning             on                       All
Easy Tier                     on                       All
z/OS Distributed Data Backup  on                       FB
Local Data-at-Rest Encryption on                       All
Metro mirror (MM)             100.0                    All
Metro/Global mirror (MGM)     100.0                    All
Operating environment (OEL)   100.0                    All
Parallel access volumes (PAV) on                       CKD
Point in time copy (PTC)      100.0                    All
RMZ Resync                    100.0                    CKD
Transparent Cloud Tiering     on                       All
z-synergy services            on                       CKD

The TB values are licensed capacities, and the on/off rows are functions that come with a bundle. Base function and OEL are 100 TB with scope All, and the CKD rows (zHPF, PAV, z-synergy) belong to the zsS bundle.

The Copy Services rows (MM, GM, MGM, PTC) are all at 100 TB.

✅ Checkpoint: You can point to the Base function row and its scope.

3Make a profile for scripts

Scripts need plain, comma-separated output. Rather than adding -fmt delim to every command, put it in a profile that only scripts use: save auto.profile in the lab folder next to ds8sim.py. It uses the security.dat from Lesson 2.

Save this as auto.profile:

hmc1: 10.0.0.1
username: admin
pwfile: security.dat
devid: IBM.2107-78SV001
banner: off
header: on
format: delim
delim: ,

Run this:

python ds8sim.py -cfg auto.profile lskey IBM.2107-78SV001

You should see this (first lines, after the notice):

Activation Key,Authorization Level (TB),Scope
Base function,100.0,All
Copy services,100.0,All

Banner off drops the Date/Time line, header on keeps the column names, and format delim with a comma gives one plain row per key. You don’t need to export anything to files, because the audit script asks the DS8000 directly.

✅ Checkpoint: The output starts with the Activation Key,Authorization Level (TB),Scope header.

4Write the licence audit

Save this as license_check.py next to ds8sim.py. It runs there, on your laptop or a jump server and not on the DS8000, and asks the DS8000 for the storage image ID (lssi), the array sites (lsarraysite -l) and the keys (lskey).

It then adds up the raw capacity of the array sites (8 drives each, decimal TB), compares that with the Base function level, and rounds any gap up to an orderable size using Table 7-2. That rounding rule is our reading of the table, and your IBM seller has the final word on quantities.

Save this as license_check.py:

# license_check.py - compare DS8000 licences (lskey) with raw capacity (lsarraysite)
# Rules from IBM Redbook SG24-8559-01, 7.1.3 and Table 7-2
# Runs on your workstation or jump server, not on the DS8000.
# It talks to the DS8000 only through the DS CLI (auto.profile: banner off, header on, format delim).
import csv, subprocess
DSCLI = ["python", "ds8sim.py", "-cfg", "auto.profile"]   # at work: ["dscli", "-cfg", "auto.profile"]

def dscli(*args):
    """Run one DS CLI command and return its rows as dictionaries."""
    out = subprocess.run(DSCLI + list(args), capture_output=True, text=True).stdout
    lines = [l for l in out.splitlines() if l and not l.startswith("SaatVedha") and not l.startswith("CMUC")]
    return list(csv.DictReader(lines))

TIERS = [(100, 10), (250, 15), (500, 25), (1250, 75), (3000, 175), (6000, 300), (12000, 600)]

def order_size(tb):
    """Smallest orderable licence size >= tb (our reading of Table 7-2)."""
    total = 0
    for high, step in TIERS:
        while total < tb and total < high:
            total += step
        if total >= tb:
            return total
    raise ValueError("more than 12,000 TB")

image = dscli("lssi")[0]["ID"]           # storage image ID (ends in 1), never typed by hand
sites = dscli("lsarraysite", "-l")
keys = {k["Activation Key"]: k for k in dscli("lskey", image)}

raw = sum(8 * float(s["dkcap (10^9B)"]) / 1000 for s in sites)   # 8 drives per array site
print(f"Storage image {image}")
print(f"Raw capacity: {raw:.2f} TB in {len(sites)} array sites")

bf = keys["Base function"]
level = float(bf["Authorization Level (TB)"])
print(f"Base function: {level} TB, scope {bf['Scope']}")
if level < raw:
    print(f"  GAP: Base function must cover all raw capacity. Order up to {order_size(raw)} TB.")
else:
    print("  OK: covers the raw capacity.")
if bf["Scope"] != "All":
    print("  NOTE: IBM suggests scope All for Base function and Copy services.")

cs = keys["Copy services"]
print(f"Copy services: {cs['Authorization Level (TB)']} TB, scope {cs['Scope']}"
      " (must cover all volumes in CS relationships; FlashCopy counts source + target)")

✅ Checkpoint: license_check.py is saved next to ds8sim.py and auto.profile.

lskey output and a licence audit against raw capacity in the practice shell
Installed keys and the licence audit on the practice DS8A50.

5Run the audit

Run this:

python license_check.py

You should see this:

Storage image IBM.2107-78SV001
Raw capacity: 291.84 TB in 8 array sites
Base function: 100.0 TB, scope All
  GAP: Base function must cover all raw capacity. Order up to 300 TB.
Copy services: 100.0 TB, scope All (must cover all volumes in CS relationships; FlashCopy counts source + target)

This is a real finding. The lab system has 291.84 TB raw (six sites of 4.8 TB FlashCore Modules and two of 3.84 TB drives) but only 100 TB of Base Function, and since BF has to cover all raw capacity, the right order is 300 TB.

Copy Services at 100 TB is fine as long as no more than 100 TB of volumes take part in mirrors and FlashCopy, with FlashCopy sources and targets both counted.

On a real system you’d take this to your IBM seller before building more arrays. An increase is concurrent, and you apply the new key in the same way.

At work you can have a scheduler on the jump server (cron or Task Scheduler) run this audit every month and mail the report, so new arrays never get ahead of the licence.

✅ Checkpoint: The audit reports the Base function gap and suggests 300 TB.

Break It, Then Fix It

Licence problems are hardly ever about the command itself. It’s nearly always the wrong number in the wrong place, so break two of them on purpose.

1Break it: use the serial that ends in 0

The ESS site and the key file name both use the storage unit serial, which ends in 0, and people then type that same ID into DS CLI commands.

Run this:

python ds8sim.py -cfg lab.profile lskey -dev IBM.2107-78SV000

You’ll get this error:

CMUN00016E lskey: IBM.2107-78SV000: The storage image ID is not valid or is not managed by this management console.

Why: IBM.2107-78SV000 is the storage unit, but DS CLI licence commands work on the storage image, IBM.2107-78SV001. A real DS8000 refuses this too, with its own message; the text above comes from the practice shell.

On the ESS site people make the opposite mistake, and IBM warns that ESS usually expects the serial ending in 0, not 1.

Fix: use the serial ending in 0 for ESS and the ID ending in 1 for applykey and lskey, and copy both from lssi rather than typing them.

Run this:

python ds8sim.py -cfg lab.profile lskey -dev IBM.2107-78SV001

You should see the full key list again, starting with:

Activation Key                Authorization Level (TB) Scope
============================================================
Base function                 100.0                    All

✅ Checkpoint: lskey works with the ID ending in 1.

Wrong storage image ID for lskey and a licence audit fed a screen listing instead of CSV
Both breaks: the wrong serial, and a screen listing where a CSV was expected.

2Break it: give the audit screen output instead of CSV

A colleague copies your auto.profile for his own work and tidies it up, changing format: delim to format: default because the screen output looks nicer. Make the same change in your auto.profile and run the audit.

Change this line in auto.profile:

format: default

Run this:

python license_check.py

You’ll get this (end of the traceback):

    image = dscli("lssi")[0]["ID"]           # storage image ID (ends in 1), never typed by hand
            ~~~~~~~~~~~~~~~~^^^^^^
KeyError: 'ID'

Why: the default format pads the columns with spaces and adds a line of equals signs, so the CSV reader sees one long column and no “ID” field. Any tool that parses DS CLI output needs -fmt delim (or -fmt xml), and scripts should have the banner turned off.

Fix: put format: delim back in auto.profile and rerun python license_check.py, and you’ll get the same GAP report as before. Keep auto.profile for scripts only and use your own profile for screen work.

✅ Checkpoint: The audit runs again without a traceback.

This happened at work

Keys for the wrong box

This was a retailer that bought two DS8A50 systems at the same time, one for each data centre. The licences were ordered together, and on the IBM ESS site the two machines had serial numbers that differed by only two characters.

A junior admin downloaded the XML file for the first system and applied it through the GUI wizard on the second. When the import failed he tried again with keys copied by hand from the ESS page, still from the first machine’s record, and when that failed as well he raised a severity 2 ticket saying “licence keys don’t work”.

All this while the project was stuck. Without Base Function keys the second system couldn’t create arrays, so the migration team sat waiting for two days. IBM Support asked for showsi output and saw the problem straight away: the MTS and signature on the box didn’t match the serial in the key file.

Once they downloaded the keys from the correct machine record in ESS, applied the XML file and checked lskey, the first array was being built a few minutes later.

Afterwards the team changed two habits. Every key file now gets renamed with the site name beside the serial as soon as it’s downloaded, and whoever applies keys has to read the serial out loud from showsi on the target box before clicking Activate.

Common mistakes and troubleshooting

SymptomLikely causeWhat to check / fix
Keys rejected on importKey file for another machine (or wrong signature)Compare MTS and signature from showsi with the ESS record.
ESS can’t find the machineSerial ending in 1 enteredESS expects the storage unit serial ending in 0.
Can’t create FB ranks after installBase Function keys not appliedApply BF first; check lskey.
Can’t create CKD ranksz-synergy Services not licensed for CKDzsS must be installed before CKD ranks are formatted.
Licence shortfall at auditBF below raw capacity after adding drivesBF must cover all raw TB; order the next step size (Table 7-2).
FlashCopy over licenceOnly sources countedFlashCopy counts source plus target.
Scope change planned for a weekdayAssuming all changes are onlineReductions and FB-to-CKD changes need an initial machine load; plan a window.

Keep a copy of every key file you apply, with the date and serial in the file name. When IBM or an auditor asks what was applied and when, lskey shows how things stand today and your files show the history.

Interview questions

Click a question to open it. Each one is phrased the way an interviewer would ask it, and under it you’ll see why they ask and one way you could answer in your own words.

Fresher level

1. What licences does a new DS8A50 need before you can create your first open systems volume?

Why they ask this: They want to see that you know Base Function is mandatory and what it switches on, beyond knowing that ‘keys exist’.

How you might answer: Base Function is mandatory and has to cover the full raw capacity, with scope All or FB. It includes the operating environment licence, logical configuration for FB, thin provisioning and Easy Tier, so without it I can’t format ranks for FB.

If the box also serves a mainframe I’d need z-synergy Services before the CKD ranks, and Copy Services if we mirror or use FlashCopy.

2. Where do DS8000 activation keys come from, and what information do you need?

Why they ask this: They’re checking whether you’ve done this yourself, and the serial number detail trips up a lot of people.

How you might answer: They come from the IBM Entitled Systems Support site, under Storage License Management. I’d need the machine type 5341, the model such as A05, the serial number ending in 0 and the machine signature, which I get from lssi and showsi.

After that I assign scope and TB in Manage activations, download the XML file and apply it in the GUI or with applykey to the storage image ID ending in 1.

2–5 years experience

3. Your company wants FlashCopy for 30 TB of databases and Metro Mirror for 50 TB. How much Copy Services licence do you need on the primary box?

Why they ask this: They want to see you apply the FlashCopy counting rule instead of guessing.

How you might answer: FlashCopy counts source plus target, so 30 TB of sources becomes 60 TB, and adding 50 TB of Metro Mirror sources gives 110 TB on the primary. That gets rounded up to an orderable size, and it can’t go above the raw capacity.

The secondary box needs its own CS licence for the 50 TB of mirror targets, and more if it also runs FlashCopy for DR tests.

4. You need to change a Copy Services licence from scope FB to scope All. Is that an online change?

Why they ask this: Whether a change is disruptive or concurrent matters for change planning, so they test it directly.

How you might answer: Yes, it is. Raising scope from FB to All is concurrent, and so is adding capacity or a new licence.

The disruptive ones are reductions and lateral changes (All to FB, or FB to CKD) and removing a licence. Those need an initial machine load, so I’d book a maintenance window, and it’s the reason IBM suggests scope All from the start.

Senior level

5. During a licence audit you find Base Function at 100 TB on a system with 290 TB raw. How do you handle it?

Why they ask this: Senior people handle compliance calmly and practically, going through the facts, the impact, the fix and how to stop it coming back.

How you might answer: I’d confirm the raw capacity from lsarraysite, compare it with lskey and write down the gap. BF has to cover all raw capacity, so we’d order up to the next size, 300 TB in this case, and I’d bring in our IBM seller and procurement.

Applying the bigger key later is concurrent. To stop it happening again I’d add a licence check to the change process for every drive upgrade.

6. How would you plan licences for a mixed DS8000 serving VMware, IBM Z and a DR site?

Why they ask this: They want the whole picture, meaning bundles, scopes, both sites and future growth.

How you might answer: I’d plan Base Function at full raw capacity with scope All, z-synergy Services for the raw capacity of the CKD ranks, and Copy Services on both sites sized by the volumes in relationships, with FlashCopy counted twice. For the DR site I’d include the DR-test FlashCopy copies and journals.

I’d order BF and CS with scope All so we never need a disruptive change, keep Call Home and Storage Insights running if we go with sub-capacity CS, and check the numbers again at every capacity upgrade.

Quick quiz

Q1. Which licence bundle is mandatory on every DS8000 G10?

  1. Copy Services
  2. z-synergy Services
  3. Base Function
  4. Transparent Cloud Tiering
Show answer

C — Base Function is mandatory and must cover the full raw capacity.

Q2. A FlashCopy of a 10 TB source needs how much Copy Services licence?

  1. 5 TB
  2. 10 TB
  3. 20 TB
  4. 30 TB
Show answer

C — FlashCopy counts source plus target: 10 + 10 = 20 TB.

Q3. Which serial do you enter on the IBM ESS site?

  1. The storage image serial ending in 1
  2. The storage unit serial ending in 0
  3. The HMC serial
  4. The WWNN
Show answer

B — ESS usually expects the storage unit serial ending in 0.

Q4. Which change needs an initial machine load?

  1. Adding a new licence
  2. Increasing capacity
  3. Changing scope from FB to All
  4. Changing scope from All to FB
Show answer

D — Reductions and lateral changes are disruptive; increases are concurrent.

Q5. Which command lists the installed licences?

  1. lskey
  2. showkey
  3. lslicense
  4. applykey -l
Show answer

A — lskey shows each function, its authorization level and its scope.

Quick recap

  • G10 has five bundles: Base Function, Copy Services, z-synergy Services, Transparent Cloud Tiering and the Security Function Group.
  • Base Function is mandatory and must cover all raw capacity; zsS covers the raw capacity of CKD ranks.
  • Copy Services covers volumes in CS relationships; FlashCopy counts source plus target.
  • Get keys from IBM ESS with type 5341, model, serial ending in 0 and the signature from showsi.
  • Apply keys with the GUI wizard or applykey on the storage image ending in 1, then check lskey.
  • Increases are concurrent; reductions and FB/CKD scope swaps need an initial machine load.

Next lesson

Lesson 7: The configuration flow and worksheets → You put every setup step in the right order and turn the worksheets into a checked plan.

Further reading: DS8000 license activation

For more on DS8000 license activation, chapter 7 of IBM’s guide covers the bundles, sizing examples and the ESS steps: IBM Storage DS8A00 Architecture and Implementation Guide (IBM Redbooks). To see how raw capacity is built from array sites, read Array sites, arrays and RAID 6 / RAID 10 in our Architecture course.

You can also see the full plan for this course on the IBM DS8000 Implementation course page.

Scroll to Top

This website uses cookies

We use a few cookies to keep this site working. If you allow it, we also use Google Analytics to count visits so we can improve our lessons. You can accept all, deny the optional ones, or choose what to allow.