As part of migrating z/OS to a new service level, I wanted to mount old volumes Read-Only, so they were not updated when the new level was used. (For example z/OS updates the dataset last access time in the VTOC). I was running on zPDT, or z/OS on top of Linux, so all of the hardware is emulated. On a real machine you may be able to configure the storage subsystem.
I had four options
- Make the disk on Linux read only – this worked, and was easy.
- Copy the disks of interest so I had write access to a copy. This worked, and was easy.
- Use the zPDT command awsmount 0ac5 -m /mnt/zimages/zOS/A4USR1 –readonly . This worked and was easy.
- Update the Hardware Configuration Definition (HCD) to make a disk read only. I could define it, but not activate it because this read-only support is for PPRC mirrored disks. I could not vary the address online.
This blog post describes how I changed the HCD to add a read only disk.
This was a journey going into areas I had not been in before (creating IODFs).
The Hardware Configuration Definition(HCD) defines the configuration of the hardware. In day’s gone by the systems programmer would have to do a “sysgen” and used macros to define devices, then assemble it and use it. Nowadays you can maintain the configuration using ISPF panels.
What does the HCD do, and what is an OSCONFIG?
The documentation is not very clear about HCD. There are tiny clues, where it mentions making disks read-only, in OSCONFIG, but does not explain how to display and use the OSCONFIG. Now I know, it is easy.
- You define each device, or group of similar devices in the HCD.
- For each OS Configuration (OSCONFIG) you define each operating system image, and which devices belong in which OSCONFIG. See, … simple!
For example you define your configuration, including production and test devices, in the HCD. You then configure
- A test system with only the test volumes
- A production system with only the production volumes
- The sysprog’s system with both test and production devices. From this machine, the systems programmer can create production or test configurations.
Getting started with HCD
The HCD is panel driven from ISPF.
You have to work with a copy of the IODF, and the system will generate a copy for you (suffixed with .WORK). I created a copy, made changes, then created a new IODF.
What is currently being used?
From the main HCD panel
- 2. Activate or process configuration data
- 5. View active configuration
Create a copy
From main menu use
- 6. Maintain I/O definition files
- 2. Copy I/O definition file
and follow the prompts.
On the home page it has the name of the current IODF being worked on, update it if necessary.
Display the OSCONFIG
Use the ISPF configuration panels for HCD:
- 1. Define, modify, or view configuration data
- 1. Operating system configurations
It then lists the available OSCONFIGs. Use / to select one, then select
- 7. Work with attached devices
This lists the devices. You can scroll or use “L AF0” to locate the devices.
Put / in front to display the options. At the right it gives the command, so
- 8. Delete . . . . . . . . . . . . . . (d)
I can either use /, and 8, or use ‘d’ (instead of the /) to delete an entry.
PF3 to return to “Define, Modify, or View Configuration Data”.
Add new devices
- 5. I/O devices
This lists the devices. Use F11 to add
- Device number 0af0
- Number of devices 16
- Device type 3390
It displays a list of OS Configs, select one.
- option 1 select
You are prompted to configure the devices
- OFFLINE No Device considered online or offline at IPL
- DYNAMIC Yes Device supports dynamic configuration
- LOCANY No UCB can reside in 31 bit storage
- WLMPAV Yes Device supports work load manager
- READ-ONLY Sec Restrict access to read requests (SEC or NO)
- SHARED No Device shared with other systems
- SHAREDUP No Shared when system physically partitioned
Press enter. To make this read-only I specified Shared=no and read-only=sec. (Sec is for secondary device. The read write copy of the mirrored is is the primary device).
Use PF3 to return.
Activate the configuration
From the HCD home page,
- 2. Activate or process configuration data
- 1. Build production I/O definition file
Create production eg “‘SYS1.IODF88”
- 6. Activate or verify configuration dynamically
- Currently active IODF . : SYS1.IODF99
- IODF to be activated . : SYS1.IODF88
- Test only . . . . . . . . Yes (Yes or No)
Use Test only = YES to validate it, then repeat with Test only = NO. This will make it live.
For me, the SYS1.IODFxx dataset, was created on the wrong volume. It has to be on the same volume as the SYS1.IPLPARM and other IPL information for a successful IPL.
Move the SYS1.IODF to the IPL parm volume.
Change your IPL loadxx member in SYS1.IPLPARM to point to the new IODF.
Although I had specified A4SYS1 as the volume for the SYS1.IODF88, SMS allocation routines allocated it on a different volume. I had to move it to the correct volume. See here.
Once I had IPLed with the new IODF
D U,,,,0AF0,1 gave
UNIT TYPE STATUS VOLSER VOLSTATE SS 0AF0 3390 F-NRD-RO /RSDNT 0
Which says there is no device mounted, but it has been defined as RO.
I varied it online and I got
IEE103I UNIT 0AF0 NOT BROUGHT ONLINE
IEE763I NAME= IECDINIT CODE= 000000000110088F
IEA434I DEVICE ONLINE IS NOT ALLOWED, R/O SEC PPRC STATE NOT VALID
IEE764I END OF IEE103I RELATED MESSAGES
Which means it was unable to mount my disk as it was not part of a PPRC mirrored DASD environment. I had defined a disk as Read Only, but was not able to use it.