IBM i固有のオブジェクトを IBM Cloud Object Storage経由でIBM Power Systems Virtual Server/IBM iに復元する

オンプレミスに存在するIBM i固有のオブジェクトがSAVFに保管してある場合、どうIBM Power Systems Virtual Server/IBM iへ復元するか悩みました。IBM Cloud Object StorageはいわゆるLUW(Linux/Unix/Windows)ファイルの復元を前提に設計されているからです。
そこで、以下の手順での復元手順を考えました。

①オンプレミスのIBM iに存在するSAVFをbinaryでPCにダウンロード
②　①でダウンロードしたファイルをIBM Cloud Object Storageにアップロード
③　②でアップロードしたファイルをIBM iからCPYFRMCLDコマンドでIBM iのIFS(Integrated File System)にコピー
④  IBM i内で、IFSにあるファイルをライブラリーにFTP転送　

実は、SFTPによるファイル転送も試みたのですが、1Kくらいのファイルサイズしか送信できませんでしたので、IBM Cloud Object Storage経由での送信に至りました。。

Cloud Storage Solutions for i は構成済みの前提で、個々を検証します。

①　オンプレミスのIBM iに存在するSAVFをbinaryでPCにダウンロード
![ftpdos.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/8f843a7e-1cef-f19e-a6f9-5a37340aee4b.png)

②　①でダウンロードしたファイルをIBM Cloud Object Storageにアップロード
![cloudstorage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/e7321d46-4118-f726-818f-c39eb4cf2a19.png)

③　②でアップロードしたファイルをIBM iからCPYFRMCLDコマンドでIBM iのIFS(Integrated File System)にコピー
```
CPYFRMCLD RESOURCE(ICOS_JUN) ASYNC(*NO) CLOUDFILE(QINTER2984.SAVF) 
LOCALFILE('/jun/qinter2984.savf')
```
※CLOUDFILEパラメーターは大文字／小文字を認識するので、注意します。
![cpyfrmcld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/7fefae18-4231-edc6-7579-5f14ef9f0d35.png)

④　IBM iのIFSにQINTER2984.SAVFが転送されていることを確認
![ifs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/503cf246-5f5a-9d92-50ad-109da0f92aff.png)



⑤  IBM i内で、IFSにあるファイルをライブラリーにFTP転送
こちら↓を参考にしました。
[How to FTP a Save File Stored in the IFS to a Library on the Same System so Data Can be Restored From It](https://www.ibm.com/support/pages/how-ftp-save-file-stored-ifs-library-same-system-so-data-can-be-restored-it)

a)受け入れ用のSAVFを作成
```
CRTSAVF FILE(JUNTEST/QINTER2984) 
```
b)IBM iのIPアドレスをCFGTCP->OPT1で確認。
回線記述CLOUDINIT0のIPアドレスを控えます。
![cfgtcp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/b294aed4-590d-10a8-eb57-4adbae710e79.png)

c)　b)で控えたアドレスを指定して、IBM i内部でFTP（IFSからIBM iオリジナルオブジェクトへ変換）
```
FTP RMTSYS('IP address')
```
d) 以下のコマンドでFTPを進めます。
ポイントはget /IFSDIRECTORY/YOURSAVF YOURLIB/YOURSAVF (REPLACE　です。　
                                                                  
 ```                                                     
   OS/400 is the remote operating system. The TCP/IP version is "V7R4M0".
  250  Now using naming format "0".                                      
  257 "QGPL" is current library.                                         
> bin                                                                    
  200 Representation type is binary IMAGE.                               
> quote site namefmt 1                                                   
  250  Now using naming format "1".                                      
> get /jun/qinter2984.savf juntest/qinter2984 (REPLACE                   
  229 Entering Extended Passive Mode (|||17047|).                        
  150 Retrieving file /jun/qinter2984.savf                               
  226 File transfer completed successfully.                              
  0.009秒に135168バイトが転送された。転送速度は15379.114 KB/秒です。
```
![ftpget.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/d592a186-a5d1-cb6a-b9d6-6d462290aa79.png)

e)最後に、置き換えたSAVFがIBM iオブジェクトとして保管されているか確認
```
DSPSAVF FILE(JUNTEST/QINTER2984)
```
![dspsavf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633718/198fb14b-64d5-dde4-42f8-6f436988765d.png)

DSPSAVFコマンドでSAVF内にIBM iオブジェクトが保管されていることが確認できました。
ちょっとしたサイズのSAVFなら、この手法で移行できることがわかりました。