クラウド上でのメインフレーム開発環境構築 - (9) DASD管理補足

# はじめに
これまで見てきたようにZD&TではADCDというOSやミドルウェアがある程度構成されたパッケージ(DASDイメージ・ファイルのセット)が提供されていますが、ここではDASD管理について少し深掘りして見ていきます。

## 関連記事
[クラウド上でのメインフレーム開発環境構築 - (1) 仮想サーバー作成](https://qiita.com/tomotagwork/items/3b0c918c37ccf54a9ce8)
[クラウド上でのメインフレーム開発環境構築 - (2) ZD&T管理サーバーのインストール](https://qiita.com/tomotagwork/items/c6f52fd6e4aadbde3275)
[クラウド上でのメインフレーム開発環境構築 - (3) ライセンス管理](https://qiita.com/tomotagwork/items/319475bcc924989260ef)
[クラウド上でのメインフレーム開発環境構築 - (4) ZD&Tインスタンス作成概要(ADCD)](https://qiita.com/tomotagwork/items/d14d35d3ab3c35c07545)
[クラウド上でのメインフレーム開発環境構築 - (5) ZD&Tインスタンス作成詳説(ADCD)](https://qiita.com/tomotagwork/items/b00934969af680a30392)
[クラウド上でのメインフレーム開発環境構築 - (6) DeviceMapファイル補足](https://qiita.com/tomotagwork/items/fa3f9099e125806c410e)
[クラウド上でのメインフレーム開発環境構築 - (7) ネットワーク構成補足](https://qiita.com/tomotagwork/items/369367bae3d3cd3c8a15)
[クラウド上でのメインフレーム開発環境構築 - (8) ADCD IPL, Shutdown補足](https://qiita.com/tomotagwork/items/61b26ee8e25a605442ab)
[クラウド上でのメインフレーム開発環境構築 - (9) DASD管理補足](https://qiita.com/tomotagwork/items/a863c57be2902b8943d0)
[クラウド上でのメインフレーム開発環境構築 - (10)既存ZD&Tからイメージ作成](https://qiita.com/tomotagwork/items/d7ce2fc489a9e3fa08e2)


# 関連定義の整理
DASDは実体としてはLinux上のファイルとして保持されます。それがz/OS上のDASDとしてどのようにマッピングされるのかを関連定義を整理します。

## IODF
z/OS上ではI/O DeviceをIODFにて管理しています。ここで、デバイスのアドレスごとにタイプが指定されています。
ADCDパッケージで使われるIODFでは、DeviceMapファイルの解説記事の所でも示しましたが、以下のような定義になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bf22053d-65a4-0571-0112-cfb4587a72d2.png)
この定義では0A80-0AFFまでの128個分のアドレスが3390として定義されています。ADCDを使った時に生成されるDeviceMapではこの辺りのアドレスが割り当てられて使用されています。

## DeviceMapファイルの定義
DeviceMapファイルでは、z/OS上で認識するデバイスのアドレスと、実体であるLinuxファイルのマッピングを行います。

ADCDを使ってZD&Tインスタンスを作成した時に生成されたDeviceMapファイルでは以下のようなDASD関連の定義がされています。

```
[manager]
name    awsckd  0001
device  0A83    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PAGA
device  0A82    3390    3390    /mnt/ibmsys1/zdt/volumes/A4SYS1
device  0A84    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PAGB
device  0A85    3390    3390    /mnt/ibmsys1/zdt/volumes/SARES1
device  0A86    3390    3390    /mnt/ibmsys1/zdt/volumes/A4DBAR
device  0A87    3390    3390    /mnt/ibmsys1/zdt/volumes/A4USR1
device  0A88    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PAGC
device  0A89    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PRD4
device  0A8A    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PRD3
device  0A8B    3390    3390    /mnt/ibmsys1/zdt/volumes/A4DIS2
device  0A8C    3390    3390    /mnt/ibmsys1/zdt/volumes/A4USS1
device  0A8D    3390    3390    /mnt/ibmsys1/zdt/volumes/A4USS2
device  0A8E    3390    3390    /mnt/ibmsys1/zdt/volumes/A4DIS1
device  0A8F    3390    3390    /mnt/ibmsys1/zdt/volumes/A4DIS3
device  0A90    3390    3390    /mnt/ibmsys1/zdt/volumes/A4DBC2
device  0A91    3390    3390    /mnt/ibmsys1/zdt/volumes/A4DBC1
device  0A81    3390    3390    /mnt/ibmsys1/zdt/volumes/A4RES2
device  0A92    3390    3390    /mnt/ibmsys1/zdt/volumes/A4CFG1
device  0A93    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PRD1
device  0A94    3390    3390    /mnt/ibmsys1/zdt/volumes/A4PRD2
device  0A95    3390    3390    /mnt/ibmsys1/zdt/volumes/A4C551
device  0A80    3390    3390    /mnt/ibmsys1/zdt/volumes/A4RES1
device  0A96    3390    3390    /mnt/ibmsys1/zdt/volumes/A4ZCX1
device  0300    3390    3390    /mnt/ibmsys1/zdt/volumes/ZDTDPY
device  0301    3390    3390
device  0302    3390    3390
device  0303    3390    3390
...
``` 

2列目がIODFでtype:3390として定義されているアドレスで、右端の列がそれに対応するLinux上のDASDイメージ・ファイルです。
Linux上のファイル名は特に決まりはありませんが、管理上の分かりやすさからz/OS上で割り当てるVOLUME名と同じ名前にするのがよいと思います。(ADCDで提供されているものもそうなっています。)
Linuxファイルが指定されていないアドレスもいくつか定義されていますが、これは動的にDASDを追加する場合に使えるものです(後述)。

## Linuxファイル
以下、ADCDを使用した時に展開されるDASDイメージ・ファイルです。

```
[ibmsys1@zdt02 ~]$ ls -la /mnt/ibmsys1/zdt/volumes/
total 198450704
drwxrwxr-x. 2 ibmsys1 ibmsys1        4096 Oct 27 21:05 .
drwxrwxr-x. 5 ibmsys1 ibmsys1        4096 Nov  8 17:41 ..
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 04:58 A4C551
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4CFG1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 27 19:58 A4DBAR
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 04:58 A4DBC1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4DBC2
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 27 20:24 A4DIS1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 27 20:14 A4DIS2
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 27 20:28 A4DIS3
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4PAGA
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4PAGB
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4PAGC
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 04:53 A4PRD1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 04:58 A4PRD2
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 04:57 A4PRD3
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 04:58 A4PRD4
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 03:06 A4RES1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 01:41 A4RES2
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4SYS1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4USR1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4USS1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 28 05:00 A4USS2
-rw-rw-r--. 1 ibmsys1 ibmsys1 15344640512 Oct 27 20:49 A4ZCX1
-rw-rw-r--. 1 ibmsys1 ibmsys1        2499 Oct 27 21:05 aprof1
-rw-rw-r--. 1 ibmsys1 ibmsys1  8539292672 Oct 27 19:53 SARES1
-rw-rw-r--. 1 ibmsys1 ibmsys1     4262912 Oct 27 21:10 ZDTDPY
```

Linux上でのファイル・サイズがそのままDASDのサイズを表しています。8539292672byteになっているファイルは3390-9型のDASDです。実際のDASDの使用量に関わらず、Linux上のファイル・サイズとしてはDASDのタイプ(Cylinder数)に応じたサイズが確保されます。従って、その分物理的なディスクが消費されることになります。
z/OSで管理するDASDはサイズが大きくなりがちですので、Linuxのファイルシステムとしてこれらのファイルの確保に充分なサイズを準備しておく必要があります。

## DASD構成まとめ

関連する定義を整理すると以下のイメージになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/779a11ff-5c4a-ac5d-8969-e42707788da3.png)


# ユーティリティ
ZD&Tが提供するDASD管理に関するユーティリティーについて補足します。

## 新規DASD追加

### DASDイメージファイル作成
ADCD提供のDASDを使用するだけでなく、開発/テスト用に使用するアプリケーションやデータのためにDASDを追加したいことは普通にあると思います。
DASDイメージ・ファイルを新規に作成するためのユーティリティーとしてalcckdというコマンドが提供されています(Linuxのシェルで実行するコマンド)。

以下のような方法で、DASDイメージ・ファイルを作成することができます。

**(1) タイプ指定で作成**
Syntax: `alcckd <fileName> -d <deviceType>`
以下のdeviceTypeが指定できます。

- 3380-1 (type 3380, 885シリンダー, 約700MB)
- 3380-2 (type 3380, 1770シリンダー, 約1.4GB)
- 3380-3 (type 3380, 2655シリンダー, 約2GB)
- 3390-1 (type 3390, 1113シリンダー, 約900MB)
- 3390-2 (type 3390, 2226シリンダー, 約1.7GB)
- 3390-3 (type 3390, 3339シリンダー, 約2.6GB)
- 3390-9 (type 3390, 10017シリンダー, 約8GB)
- 3390-n (type 3390, n x 1113シリンダー)

例: `alcckd /mnt/ibmsys1/zdt/volumes/DASD01 -d 3390-9`
(3390-9型のDASDイメージファイル"DASD01"を作成する例)

実際にコマンドを実行した時のログはこちらです。

```
[ibmsys1@zdt02 volumes]$ date; alcckd /mnt/ibmsys1/zdt/volumes/DASD01 -d 3390-9; date
Fri Nov 20 20:23:27 CST 2020
AWSCKE035I Creating file '/mnt/ibmsys1/zdt/volumes/DASD01', 3390, 10017 cylinders

AWSCKE072I 100 percent complete ...
AWSCKE005I Processing file '/mnt/ibmsys1/zdt/volumes/DASD01' ...
AWSCKE006I    Device type: 3390-9
AWSCKE009I      Cylinders: 10017, heads 15
AWSCKE010I     Track size: 56832
AWSCKE011I   File version: 0
AWSCKE014I   Version pend: No
AWSCKE017I       IPL text: No
AWSCKE018I  Volume serial: <None>
Fri Nov 20 20:24:00 CST 2020
```

ディスクの性能やマシンスペックにも依存すると思いますが、3390-9型のDASDイメージファイル作成で約30秒くらいかかりました。

**(2) シリンダー数指定で作成**
Syntax: `alcckd <fileName> -d 3390 -s <cylinder数>`
このようにシリンダー数指定で作成することもできます。
例: `alcckd /mnt/ibmsys1/zdt/volumes/DASD02 -d 3390 -s 100`
(100シリンダーのDASDイメージファイル"DASD02"を作成する例)

ここで指定できるcylinder数は、通常の3390タイプだと65,520cylinder(約52GB)まで指定できます。
Extended Address Volumeとやらの場合は(使ったことない...)、268,435,456cylinder(約208PB)までいけるらしいです。でかすぎてよく分かりません。

参考:
[Redbook-IBM ZPDT Guide and Reference](http://www.redbooks.ibm.com/abstracts/sg248205.html?Open)
[Extended address volumes](https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.4.0/com.ibm.zos.v2r4.idad400/eav.htm)

※3390: 
1track = 56,664byte
1cylinder = 15track = 56,664byte x 15 = 849,960byte
なんだろね、この覚えにくい中途半端なサイズは...

### 静的追加
DASDイメージ・ファイルを追加したら、IODFに定義してあるDASD用のアドレスとDevicdMapファイルでマッピングの定義をします。
その後、ZD&Tを再起動し直せば、z/OS上からマッピングしたアドレスでアクセスできるようになるので、z/OS上でDASDをInitializeしてオンラインにすれば使えるようになります。

### 動的追加
静的定義のやり方だと、IPLをしなければいけないのでそれだと都合が悪い場合があります。
上のDeviceMapの定義例のように、Linuxのファイルを指定せずにアドレスだけ指定したリストを用意しておくことで、IPL後に後から動的にDASDイメージファイルを割り当てることもできます。

例えば以下のように、Linuxファイルが割り当てられていない予備のアドレスがDeviceMapに定義された状態でZD&Tが起動しているものとします。

```
[manager]
name    awsckd  0001
...
device  0301    3390    3390
device  0302    3390    3390
device  0303    3390    3390
...
``` 

alcckdでDASDイメージ・ファイル/mnt/ibmsys1/zdt/volumes/DASD01を作成したとすると、その後、以下のコマンドを実行します。
`awsmount 0301 -m /mnt/ibmsys1/zdt/volumes/DASD01`
これで、アドレス0301とDASDイメージファイルのマッピングが動的に行われます。
あとは静的に追加した場合と同様に、z/OS上でDASDのInitializeとONLINEして使えるようになるはずです。

動的変更後は、今後IPLが入った時に同じアドレスにアタッチされるように、DeviceMapファイルの定義も修正しておけばOKです。

### (補足)DASD初期化例
新しいDASD追加した後のINITIALIZEについて一応手順例を記載しておきます(ZD&T固有のものではなくz/OSの普通の作法で実施すればよいだけですが)。

#### INITIALIZE
IBMUSER.JCLというデータセット作って以下のJCL作成。(0301のアドレスのDASDをイニシャライズしてDASD01というVOLUME名を付与)

```xxx:IBMUSER.JCL(INITDASD)
//INITDASD JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID  
//*                                                              
//* MOD-3: VTOC(0,1,974) INDEX(65,0,50)                          
//* MOD-9: VTOC(0,1,2939) INDEX(196,0,150)                       
//*                                                              
//FORMAT   EXEC PGM=ICKDSF,REGION=0M                             
//SYSPRINT DD SYSOUT=*                                           
//SYSIN DD *                                                     
 INIT UNIT(301) NOVALIDATE NVFY VOLID(DASD01) PURGE -            
   VTOC(0,1,2939) INDEX(196,0,150)                               
/*                                                               
```

上のJCLをサブミットすると、以下のようにREPLYを求められるので"U"を返します。

```
ICK003D REPLY U TO ALTER VOLUME 0301 CONTENTS, ELSE T 
```

RC=00で終了すればOKです。

#### ONLINE
`V 0301,ONLINE'でオンラインにします。

```
D U,,,0301,1                                           
IEE457I 22.08.59 UNIT STATUS 123                       
UNIT TYPE STATUS        VOLSER     VOLSTATE      SS    
0301 3390 OFFLINE                      /RSDNT     0    

V 0301,ONLINE                                                      
IEE476I UNIT 0301 INFORMATION     125                              
IEE763I NAME= IECDINIT CODE= 0000000001070401                      
IEC816I 0301 VARY ONLINE - CU AUTHORIZATION FAILED SER=IBM-01280   
IEE764I END OF IEE476I    RELATED MESSAGES                         
IEE302I 0301     ONLINE   
                                         
D U,,,0301,1                                                       
IEE457I 22.09.34 UNIT STATUS 128                                   
UNIT TYPE STATUS        VOLSER     VOLSTATE      SS                
0301 3390 O             DASD01     PRIV/RSDNT     0                
IEF196I IEF237I 0A80 ALLOCATED TO SYS00065                         
IEF196I IEF285I   SYS1.LINKLIB                                 KEPT
IEF196I IEF285I   VOL SER NOS= A4RES1.                             
```


## DASDイメージ・ファイルへの直接アクセス

DASDイメージ・ファイルはz/OSのDASDとして使うことを目的としているため、基本的にはZD&Tを起動してz/OS上からアクセスしないと中身を扱うことはできません。
ただ、PDS/PDSEデータセットのメンバーについては、ZD&Tが起動していない状態でも、pdsUtilというコマンドを用いることで限定的にLinux上から直接DASDイメージファイルの中身を扱うことができます。
(ZD&Tインスタンス作成時のシェル・スクリプトでは、このコマンドを利用してIPL前にDASDの情報を一部上書きしています。)

pdsUtilコマンドでは以下のことができます。

### PDSメンバーのリスト(list)
PDSメンバーをリストすることができます。ただし、これはどのDASDイメージファイルにどのようなPDSデータセットがあるのかが分かっていることが前提です。

例: DASDイメージファイル"A4SYS1" にある "ADCD.Z24A.TCPPARMS"以下のメンバーをリスト

```
[ibmsys1@zdt02 volumes]$ pdsUtil /mnt/ibmsys1/zdt/volumes/A4SYS1 ADCD.Z24A.TCPPARMS --list
AWSPDS012I  Emulated CKD file name: /mnt/ibmsys1/zdt/volumes/A4SYS1
AWSPDS013I      z/OS volume serial: A4SYS1
AWSPDS014I  z/OS PDS data set name: ADCD.Z24A.TCPPARMS
--Name-- --TTR-- K- --User data---------------------------------------------------
GBLIPNOD 0011-0D 0F 011B0026 0116272F 0120008F 08450001 00010000 C9C2D4E4 E2C5D940 4040
GBLRESOL 0012-01 0F 01040029 0118318F 0120015F 1311000F 000F0000 C9C2D4E4 E2C5D940 4040
GBLTDATA 0000-08 0F 01000041 0116272F 0116272F 11140118 01180000 C9C2D4E4 E2C5D940 4040
OBEYME   000E-07 0F 01010009 0119311F 0119311F 14410003 00030000 C9C2D4E4 E2C5D940 4040
PAGENTCF 0009-01 0F 01070016 0118305F 0119273F 12370B01 0B150000 D3C1D9D9 E8E6C440 4040
PAGENTEN 000D-03 0F 01020030 0118305F 0119273F 12370006 00060000 D3C1D9D9 E8E6C440 4040
PORT0023 0001-04 0F 01010046 0118305F 0118305F 124800C9 00C90000 C9C2D4E4 E2C5D940 4040
PORT2023 0011-09 0F 01050041 0118305F 0120003F 0733006D 006E0000 C9C2D4E4 E2C5D940 4040
PROFILE  0002-01 0F 011E0039 0116272F 0118305F 151700E5 00EF0000 C9C2D4E4 E2C5D940 4040
PROF1    0002-03 0F 01200000 0116272F 0118305F 151800E1 00DA0000 C9C2D4E4 E2C5D940 4040
PROF2    0012-05 0F 011D0046 0116272F 0120314F 05260062 00590000 C9C2D4E4 E2C5D940 4040
PROF2BK  0012-03 0F 011C0008 0116272F 0120006F 07050060 00590000 C9C2D4E4 E2C5D940 4040
RESOLVER 0000-06 0F 01000041 0116272F 0116272F 11140003 00030000 C9C2D4E4 E2C5D940 4040
TCPDATA  0000-0A 0F 010C0041 0116272F 0116272F 11140118 01180000 C9C2D4E4 E2C5D940 4040
TLSPOLY1 000D-13 0F 01070026 0118306F 0119303F 11120059 005C0000 C9C2D4E4 E2C5D940 4040
TN3270   0011-05 0F 01050048 0116272F 0120003F 0640002B 010A0000 C9C2D4E4 E2C5D940 4040
TN3270O  0001-02 0F 01000019 0118305F 0118305F 1230010A 010A0000 C9C2D4E4 E2C5D940 4040
T22P3270 0002-07 0F 01000012 0118306F 0118306F 0745005C 005C0000 C9C2D4E4 E2C5D940 4040
T23P3270 0003-02 0F 01050039 0118305F 0118306F 11560078 00790000 C9C2D4E4 E2C5D940 4040
ZCONNECT 0000-0C 0F 01010041 0116272F 0116272F 11140013 00130000 C9C2D4E4 E2C5D940 4040
ZCXDVIPA 0010-12 0F 01060008 0119312F 0119312F 10020012 00060000 C1C4C3C4 D4E2E340 4040
```

### PDSメンバーをLinuxファイルとして抽出(extract)
PDSのメンバーをLinuxのファイルとして抽出することができます。これもどのDASDイメージファイルにどのPDS/メンバーがあるか分かっている必要があります。

まず、A4USR1というDASDイメージファイルにあるIBMUSER.JCLLIBのメンバーをリストしてみます。

```
[ibmsys1@zdt02 ~]$ pdsUtil /mnt/ibmsys1/zdt/volumes/A4USR1 IBMUSER.JCLLIB --list
AWSPDS012I  Emulated CKD file name: /mnt/ibmsys1/zdt/volumes/A4USR1
AWSPDS013I      z/OS volume serial: A4USR1
AWSPDS014I  z/OS PDS data set name: IBMUSER.JCLLIB
--Name-- --TTR-- K- --User data---------------------------------------------------
DEFUCAT  0003-08 0F 01090001 0116272F 0120325F 2230000D 000F0000 C9C2D4E4 E2C5D940 4040
DELUCAT  0003-0A 0F 010A0059 0116272F 0120325F 22300009 000F0000 C9C2D4E4 E2C5D940 4040
INITDASD 0002-27 0F 01050026 0116272F 0120325F 2200000B 000F0000 C9C2D4E4 E2C5D940 4040
LISTC    0002-2D 0F 01070033 0116272F 0120325F 22130008 000F0000 C9C2D4E4 E2C5D940 4040
TEST     0003-0C 0F 01070033 0116272F 0120325F 22130008 000F0000 C9C2D4E4 E2C5D940 4040
```

この例では、LISTCというJCLがあるのでそれを抽出してみます。

```
[ibmsys1@zdt02 ~]$ pdsUtil /mnt/ibmsys1/zdt/volumes/A4USR1 IBMUSER.JCLLIB/LISTC --extract
AWSPDS012I  Emulated CKD file name: /mnt/ibmsys1/zdt/volumes/A4USR1
AWSPDS013I      z/OS volume serial: A4USR1
AWSPDS014I  z/OS PDS data set name: IBMUSER.JCLLIB
AWSPDS015I    z/OS PDS member name: LISTC
AWSPDS016I Member file output name: LISTC.txt,  Translation: Ebc037/Asc437.
AWSPDS042I 8 records copied to file 'LISTC.txt' from PDS member 'LISTC'.
```

カレント・ディレクトリに、<メンバー名>.txtというファイルが作成されます。この時、EBCDIC(037)からASCII(437)への文字コード変換も行われます。
Linux上で下のテキストファイルを見てみると、以下のように参照できます。

```
[ibmsys1@zdt02 ~]$ cat LISTC.txt
//LISTC    JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*-----------------------------------------------------
//*
//GO       EXEC PGM=IDCAMS,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 LISTC USERCATALOG ALL
/*
```

### 抽出したメンバーの上書き(overlay)
extractで抽出したテキストファイルをLinux上で編集し、その結果を同じPDSメンバーに上書きすることができます。ただし、PDSメンバーのサイズが変わってしまうような変更の場合は上書きできず、あくまで同一サイズ内での修正に限られます。つまり、行を増やしたり減らしたりした場合は上書きできません。
また、新規でメンバーを追加したりメンバーを削除するような更新もできません。

上で抽出したLISTC.txtをLinux上のviエディターで以下のように編集してみます。(JOB名をLISTC => LISTC2に変更)

```txt:LISTC.txt
//LISTC2   JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*-----------------------------------------------------
//*
//GO       EXEC PGM=IDCAMS,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 LISTC USERCATALOG ALL
/*
```

この内容でPDSメンバーを上書きします。

```
[ibmsys1@zdt02 ~]$ pdsUtil /mnt/ibmsys1/zdt/volumes/A4USR1 IBMUSER.JCLLIB/LISTC --overlay
AWSPDS012I  Emulated CKD file name: /mnt/ibmsys1/zdt/volumes/A4USR1
AWSPDS013I      z/OS volume serial: A4USR1
AWSPDS014I  z/OS PDS data set name: IBMUSER.JCLLIB
AWSPDS015I    z/OS PDS member name: LISTC
AWSPDS016I Member file output name: LISTC.txt,  Translation: Ebc037/Asc437.
AWSPDS055I 8 records overlayed PDS member 'LISTC' from file 'LISTC.txt'.
```

この時、Ascii(437)=>EBCDIC(037)へのコード変換が行われてターゲットのPDSメンバーが上書きされます。

PCOM上で見るとJOB名が書き換わっていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/20e9a7c4-db0e-126e-7c29-34fa5d4263a4.png)

<font color="red">注意!</font>
この機能の操作は排他制御やRACF制御などは行われません。
IPLに関連するメンバーを誤って上書きして壊してしまうと修復が難しくなりますのでご注意ください。
(上書き機能については必要最低限にとどめておくことをおすすめします)