サーバーを触っていると、一定の大きさのダミー・オブジェクトの作成が必要になる局面がある。最近の例だと、お客様システムをオンプレミスからクラウドへと移行するプロジェクトに参画した際にこのような経験をした。
クラウドでは基本的にテープ装置がサポートされないため、お客様サイトにてディスク上にバックアップを取得し、インターネット経由でクラウド(もしくはクラウド・ストレージ)へと送信することになるが、この際の実効速度がわからないと、移行の計画も立てられない。
その際問題になるのは、「何を送るのか」である。
適当なお客様のデータをSAVFにバックアップして送ってしまう、でもよいのだが、セキュリティを考慮すると不適切であることは言うまでもない。
他のプラットフォームだと、指定したサイズの「ダミー・オブジェクト」を作成することは極めて簡単だ。
Windowsなら、誰もが「fsutil」を思い浮かべるであろう。
Unixプラットフォームであれば、とりあえず「dd」でよい。
例
Windows fsutil
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/fsutil
Linux dd
https://qiita.com/toshihirock/items/6cb99a85d86f524bc153
しかしながら、IBMiではどうするのか。それに対する一つの回答として、この投稿を作成する。
※重要
これから紹介する方法で、実機でテストする場合は、くれぐれもディスクの空き領域に注意されたい。
間違えて巨大なオブジェクトを作成してしまい、システムをクラッシュさせてしまっても、当方は責任を取れません。本当に気をつけてテストしてください。
最初はごく小さいものを作成し、DSPOBJDでサイズを確認しつつ、目的のサイズのものを作っていくと良い。
で、本編。
方法としては、
- NWSSTGの作成
- NWSSTGをSAVFに保管
の流れとなる。
例
1.NWSSTGの作成
CRTNWSSTG NWSSTG(BABA0805) NWSSIZE(1024) TEXT('1gb nwsstg')
NWSSIZEパラメーターで、作成するNWSSTGのサイズ(単位:MB)を指定する。(上記は1024MBなので、1GB)
こちらを実行した段階で、指定した領域が確保される。
NWSSTGを作成すると、IFSの’/QFPNWSSTG'配下にNWSSTGと同名のディレクトリーが作成され、その下にQFPCONTROLという名前のストリーム・ファイルが作成される。
ただし、このファイルのサイズは512(byte)であるので、実体ではない。
しかし、NWSSTG作成時に領域を確保しに行っている挙動をする。また、WRKSYSSTSでみると、ディスク使用率は相応に増えているようであるので、実体は存在している(領域は確保されている)と考えて良い。
2.NWSSTGをSAVFに保管
このままだと領域を確保しただけで、オブジェクトとしてFTPなどで送信することはできないので、SAVFに保管する。
SAV OBJ(/QFPNWSSTG/BABA') DEV('/QSYS.LIB/QGPL.LIB/BABA.FILE')
厳密にはSAVF本体の大きさが加わるため、指定したサイズ+αになるが、まあ誤差の範囲と考える。
参考までに、NWSSIZE(512)のものを作成してSAVFに保管すると、大きさは528MB程度になった。
NWSSIZEをうまく調整すると、希望のサイズのものが作成できるかもしれない。
これで適当な大きさのダミー・ファイルを作成することが可能である。
ちなみに、ダミーデータを格納したテーブルを作成することも可能である。数億件のレコードを持つダミー・テーブルを作成することもできる。これについては別の記事としてUPしたい。
以上