ジェイク・クーゲル著 iSeries上でストリーム・ファイル・データを格納するのであれば、統合ファイル・システム(IFS)のルート・ファイル・システムが最適の場所です。IFSはその性能が常に改善されており、V5R1からはジャーナル機能もサポートされています。また、独立した外部記憶プール(ASP)とIFSを一緒に使用することもできます。IFSにデータを移動し、その移動したデータの安全性を確保することは必ずしも簡単なことではありません。データの移動プロセスはそのデータをどこから移動してくるのかによって異なります。必要とするデータがすでにiSeries上のQDLSファイル・システム中にあるかもしれませんし、Unix、Linux、NTなどといった他のプラットフォーム上にあるかもしれません。 この記事では、データをNTやQDLSからIFSのルート・ファイル・システムに移行させる方法について説明します。それぞれの場合において、CLコマンドや新しいV5R1の機能を使ってデータをIFSにコピーする方法と、移動したデータの安全性を確保する方法について、例を示しながら説明します。 NTからのデータの移行 ディレクトリ・ツリーをiSeries上のルート・ファイル・システムにコピーする方法は何種類かあります。一つ目の方法はiSeriesに対してデータを「プッシュ」する方法です。たとえばFTPを使用してファイルをiSeriesに送信することができます。また、NetServerを使用してiSeries上にファイル共有を作成しておき、作成したファイル共有をPCを用いて任意のドライブにマッピングし、そのファイル共有に対してフォルダをドラッグ・アンド・ドロップするということもできます。 もう一つの方法は、iSeries上にデータを「プル」する方法です。IFSのQNTCファイル・システムを使用して、NTサーバー上のファイル共有にアクセスすることができます。CPY(Copy Object)コマンドで新しくサポートされたサブツリーを利用して、ディレクトリ全体をNTサーバーからローカルのルート・ファイル・システムにコピーすることができます。 新しいファイルをiSeries上に移動し終えたら、アクセス権限を設定する必要があります。このテキスト・ファイルを正しく見ることができるように、テキスト・ファイルを若干調整する必要が出てくる場合があるので注意してください(テキスト・ファイルの処理の仕方については後述します)。 V4R3で導入されたQNTCファイル・システムは、そもそも統合Netfinityサーバー(カード上のPC)へのアクセスを提供するものでした。またQNTCファイル・システムにより、iSeries上でIFSを経由して、リモートのNTシステム上のファイル共有にもアクセスできます。QNTCを使用するために必要となるオペレーティング・システム以外のソフトウェアは、iSeries 400用のTCP/IP接続ユーティリティ(5722-TC1)だけです。 私が自分のPC(Windows 2000 Professional)とV5R1を稼動しているiSeriesを設定した手順は以下の通りです。 (1) iSeries上で、NetServerのドメインをPCのワークグループと一致させるように設定し(ここでは架空のドメイン名を使用しています)、NetServerを再起動します。オペレーション・ナビゲータ(OpsNav)経由でNetServerを構成できます。OpsNavのメイン・ウィンドウから自分のマシンの名前をクリックし、[ファイル・システム]を選択して[ファイル共有]を右クリックします。メニューから[AS/400 NetServerを開く]を選択して[NetServer]ウィンドウを表示させます。 [AS/400 NetServer]を右クリックし、[プロパティ]を選択して[プロパティ]ウィンドウを表示させます。このウィンドウでドメインの変更ができます。[一般]タブをクリックして[次をスタート]ボタンをクリックします。ウィンドウが一つ表示され、そこでNetServerが次に再起動されたときに使用される属性を設定します。ドメイン名フィールドに使用するドメイン(たとえばTESTDOM)を入力します。このウィンドウ上で[OK]をクリックし、もう一度[OK]をクリックして[プロパティ]ウィンドウを閉じます。NetServerを終了させるには停止サインのアイコンをクリックします。NetServerが完全に停止したら(停止するまで約1分かかります)、緑の三角形の付いたアイコンをクリックしてNetServerを起動します。 (2) QNTCにアクセスするために使用するiSeries上のユーザー・プロフィールに、NTシステム上に登録されているものと同じユーザIDとパスワードが設定されていることを確認しておくことが重要です。NTシステム上に存在していないユーザに対してはファイル共有は表示されません。 (3) PC上のワークグループを変更して、NetServerが構成されているドメインと一致させます。私のPCの場合、[スタート] ? [設定] ? [コントロール・パネル] ? [システム]を選択し、次に[ネットワークID]タブを選択して[プロパティ]ボタンをクリックします。そして[ワークグループ]を選択し、iSeries上のNetServerを使用するために構成したドメインとワークグループを一致させます。設定した内容を有効にするためにはPCを再起動しなければならない場合もあります。 接続テストを行うには、iSeries上でWRKLNK '/QNTC/*'を呼び出します。接続先のNTシステムが一覧に表示されるはずです。表示されない場合はCRTDIR '/QNTC/'コマンドを使用して手操作でNTシステムへの接続を確立することもできます。ただし、servernameのところに接続先のNTシステムの名前を入力してください。一覧中で接続先のNTシステムを見つけ、WRKLNK(Work with Object Links)の[表示](オプション5)を選択してNT上のファイル共有を表示させます。ファイル共有が見つからない場合は、両システムに登録してあるユーザIDとパスワードが正確に一致しているかどうか、もう一度チェックしてみてください。WRKLNKからQNTCを表示させている例を図−1に示します。 (4) CPYを呼び出すには以下のコマンドを使用します。 CPY OBJ('/QNTC//') TOOBJ('/newdirectory') TOCCSID(*CALC) SUBTREE(*ALL) パラメータとしてTOCCSID(*CALC)を使用することが重要です。そうでないと「ターゲット・ファイルのCCSIDをソース・ファイルのCCSIDに一致するように設定できません。」というエラー・メッセージが現れてしまいます。 (5) ディレクトリをiSeriesにコピーし終えたら、WRKLNKを使って新しいツリー内をナビゲートし、ツリーが完全にコピーされているかどうか確認してください。新しくコピーされたディレクトリ・ツリーの所有者はCPYコマンドを呼び出したユーザになります。 (6) アクセス権限を設定し、NTシステム上のファイルに対するアクセス許可を持っているユーザが新しいディレクトリ・ツリーに対してもアクセス許可を持つようにします。これには何通りかの方法があります。たとえば、ディレクトリ・ツリー上のすべてのオブジェクトのプライマリ・グループとなる新しいグループ・プロフィールを作成することもできます。ディレクトリ・ツリーへのアクセス権をユーザに与えるには、そのユーザをこの新しいグループ・プロファイルのメンバーにします。そうすることで、各オブジェクトに対するアクセス権限を変更しなくても、ディレクトリ・ツリー全体へのアクセス権をユーザに与えることができます。またアクセス権限一覧を使用して、新しいディレクトリ・ツリーへのアクセスを制御することもできます(アクセス権限一覧を設定してディレクトリ・ツリーへのアクセスを制御する方法については本記事のパート2で説明します)。いずれの方法を選択しても結果は同様になります。 次のようなコマンドで新しいグループ・プロフィールを作成します。 CRTUSRPRF USRPRF() PASSWORD() GID(*GEN) (7) 次に、ディレクトリ・ツリー内のすべてのオブジェクトについてそのプライマリ・グループを新しいグループに変更しなければなりません。現在、CHGPGP(Change Primary Group)コマンドにはSUBTREEパラメータがありません。しかし、QShellインタープリタ(OS/400のオプション30)を使用すれば、ディレクトリ・ツリー全体に対して処理することができます。このインタープリタを起動するにはQSHコマンドを使用します。そして以下のコマンドを使用してディレクトリ・ツリー内のすべてのオブジェクトのプライマリ・グループを変更できます。 chgrp -R <groupname> </newdirectory> chmod -R g+rwx </newdirectory> chmod -R o-rwx </newdirectory> chgrpコマンドはディレクトリ・ツリー内のすべてのオブジェクトのプライマリ・グループをに変更します。chmodコマンドを使用して、データに対するユーザ(u)、グループ(g)、その他(o)のアクセス権限を追加したり削除したりすることができます。たとえば、g+rwxはプライマリ・グループに対して*RWXの権限を与えることを意味しています。上記の例では、最初のchmodコマンドですべてのオブジェクトに対するグループのデータ・アクセス権を*RWXに設定し、二つ目のchmodコマンドでディレクトリ・ツリー内のすべてのオブジェクトに対してPUBLIC(その他)のデータ・アクセス権を*NONEに設定しています。その結果、デフォルトでは、新しいグループ・プロフィールに属していないユーザは、このディレクトリ・ツリー内のオブジェクトにアクセスすることが許可されません。グループのアクセス権限を*RWX以外のものに設定しても構いません。グループのアクセス権限を*Rに変更するには、g+rを使用し、次にg-wxを使用してプライマリ・グループの*WXアクセス権限を削除します。 (8) 前述したように、テキスト・ファイルを若干調整し、きちんと動作するようにしなければならない場合もあります。iSeries上のストリーム・ファイルはコード化文字セット識別子(CCSID)属性を持っており(V5R1以前ではコードページ属性でした)、ファイル中のテキスト・データのタイプ(たとえばASCII、EBCDICなど)を説明しています。DSPF(Display File)コマンドやWRKLNKのDisplay(オプション5)などといったツールは、ストリーム・ファイルのCCSIDを使用して、そのファイル中のデータを正しく表示する方法を得ます。V5R1のQNTCでストリーム・ファイルの中を見てみると、CCSID属性が0に設定されていて、この値が新しいストリーム・ファイルにもコピーされているのがおわかりいただけるでしょう。DSPFはデータをこのように表示できない場合もあります。ディレクトリ・ツリー上のテキスト・ファイルのCCSID値を設定するには、V5R1で新しくサポートされた次のコマンドを使用します。 CHGATR OBJ('') ATR(*CCSID) VALUE(1252) SUBTREE(*ALL) Windowsではコードページとテキスト・ファイルを関連付けて、そのテキスト・ファイル中のテキスト・データ・タイプの使い方を説明しています。iSeriesにはこのコードページに相当するCCSIDがあります。私のPCでは、テキスト・ファイルのコードページは1252(Latin I)でした。iSeries上のテキスト・ファイルのCCSIDを1252に変更すると、そのテキスト・ファイルを正しく表示できます。 注記: 上述のコマンドはストリーム・ファイル中の実際のデータを変更するのではなく、ストリーム・ファイルに関連付けられているCCSIDの値だけを変更します。たとえばASCIIデータを含んだテキスト・ファイルがある場合、そのファイルのCCSIDを37(EBCDIC)に変更することができますが、ファイルの中身そのものはASCIIのままです。これは、ファイルの中身を読み出すツールにとって混乱のもととなることがあります。ファイルの実際の中身を変換しなければならない場合(たとえばASCIIからEBCDICへ)、CPYコマンドを使ってテキスト・ファイルのコピーを作成し、その中身を新しいCCSIDに変換することができます。これには、DTAFMT(*TEXT)パラメータとTOCCSID()を使用します。ソース・ファイルのCCSID属性を正しく設定してあれば、ターゲット・ファイルのデータは新しいCCSIDに変換されます。 QDLSファイル・システムからのデータの移行 IFS以前から存在していたQDLSは、PC共有フォルダやOffice Vision/400用にPCライクなファイル・システムを提供するために開発されたものです。V3R1でIFSが開発されると、QDLSファイル・システム経由でデータにアクセスできるようになりました。ただし、QDLSの代わりにルート・ファイル・システム中にデータを置いておくと、いくつかの利点があります。ルート・ファイル・システムの方が性能がよく、長いパス名も使用でき、ジャーナル機能もあって、大きなサイズのファイルもサポートできるからです。 V5R1で新たにサポートされたCPYコマンドを使用すれば、もっと容易にQDLSからルート・ファイル・システムへデータを移行できます。CPYコマンドを使用すれば、すべてのアクセス権情報とQDLSディレクトリ・ツリー全体を1ステップでルート・ファイル・システムにコピーすることができます。*ALLOBJアクセス権限をもったQSECOFRなどのプロフィールを必ず使用し、CPYコマンドの呼び出し側に適切な権限を持たせてツリー内のオブジェクトをコピーしてください。 QDLSすべてをコピーするには、ルート・ファイル・システム中のどこに新しいツリーを置くのかを決めてください。この例では、/rootqdlsという新しいディレクトリを作成して新しいデータを格納しています。以下のCPYコマンドを使用してツリーをコピーします。 COPY OBJ('/QDLS') TOOBJ('/rootqdls') SUBTREE(*ALL) OWNER(*KEEP) たったこれだけです。/rootqdls上のディレクトリとファイルが元の'/QDLS'上のものと同じアクセス権限を持つことになります。SUB TREE(*ALL)は、ディレクトリとその内容がコピーされるということを示しています。OWNER(*KEEP)によりCPYコマンドは、所有者も含めて元のオブジェクトとまったく同じアクセス権限で新しいオブジェクトを作ります。 次回もぜひご期待ください。 今回はストリーム・ファイル・データをNTやQDLSからIFSのルート・ファイル・システムへ移行する方法を紹介してきました。これで、性能向上、ジャーナルのサポートなどといったIFSがもたらす他の恩恵にも浴することができます。本記事のパート2ではUnix/LinuxやNetWareサーバーからIFSへデータを移行する方法について説明します。 ジェイク・クーゲルはIBMロチェスター事業所のソフトウェア・エンジニアで、IFS事業部に勤務して4年になります。