Solaris などのネットワーク UNIX 環境では、ユーザーがいくつかのマシンに同じホームディレクトリ (あるいはその一部) を持つことがよくあります。たとえば、ディレクトリが NFS でアクセス可能になっている場合などです。しかし、すべてのマシンでホームディレクトリのパスが完全には同じでないことがあります。
たとえば NFS と オートマウンタで使用可能なユーザーのホームディレクトリを考えてみます。ユーザーが NFS サーバー上に /home/foo というホームディレクトリを持っている場合、オートマウンタを実行する適切にインストールされたすべての NFS クライアント上では、このパスでこのホームディレクトリはアクセスできます。しかし、クライアントの /home/foo は、/tmp_mnt/home/foo へのシンボリックリンクにすぎません。オートマウンタがディレクトリを物理的にマウントしている NFS サーバー上の実際の場所は、/tmp_mnt/home/foo です。
クライアントホスト上のユーザーが qsub -cwd コマンドを使用してホームディレクトリツリー内のある場所からジョブを発行した場合、-cwd フラグは、そのジョブが現在の作業ディレクトリで実行されることを要求します。ただし、実行ホストが NFS サーバーである場合、Grid Engine システムは、そのホストで現在の作業ディレクトリを見つけられない可能性があります。これは、発行ホスト上の現在の作業ディレクトリが、(発行ホスト上の物理的な位置である) /tmp_mnt/home/foo であるためです。このパスは実行ホストに渡されます。ただし、実行ホストが NFS サーバーである場合、物理的なホームディレクトリパスは /home/foo で、/tmp_mnt/home/foo ではないため、パスが解決できません。
そのほか、同じような問題を引き起こすケースとしては、次のような場合があります。
マシンによってマウントポイントのパスが異なる固定 NFS マウント。例としては、あるホストでは /usr/people にホームディレクトリをマウントし、別のホストで /usr/users の下にホームディレクトリをマウントする場合があります。
ネットワークから利用可能なファイルシステムへの外部からのシンボリックリンク
このような問題を防ぐため、Grid Engine ソフトウェアでは、管理者とユーザーがどちらもパス別名設定ファイルを構成できます。このような 2 つのファイルは、次の場所にあります。
sge-root/cell/common/sge_aliases — クラスタ用のグローバルクラスタパス別名設定ファイル
$HOME/.sge_aliases — ユーザー別のパス別名設定ファイル
グローバルファイルの変更は、管理者だけが行なってください。
パス別名設定ファイルは、両方とも同じ形式です。
空白行と、先頭に # 記号がある行は無視されます。
空白行と # で始まる行以外の各行には、任意の数の空白文字またはタブで区切った 4 つの文字列が含まれる必要があります。
最初の文字列がソースパス、2 つ目が発行ホスト、3 つ目が実行ホスト、4 つ目がソースパス置換を指定します。
発行ホストおよび実行ホストの文字列には、任意のホストに一致する * (アスタリスク) 記号を使用できます。
ファイルは、次のように解釈されます。
qsub が物理的な現在の作業ディレクトリのパスを検索したあとで、グローバルパス別名設定ファイルが存在する場合は、そのファイルが読み取られます。ユーザーパス別名設定ファイルは、グローバルファイルの最後に付加されているかのように、あとで読み取られます。
無視されないファイルは、ファイルの先頭から1 行ずつ読み取られます。必要に応じて、それらの行により指定された置換内容が格納されます。
置換内容が保存されるのは、次の条件がいずれも真である場合のみです。
発行ホストの文字列が、qsub コマンドが実行されるホストに一致する。
ソースパスが、すでに格納されている現在の作業ディレクトリまたはソースパス置換の先頭部分の構成要素になっている。
両方のファイルが読み取られると、格納されているパス別名設定情報が、発行されたジョブとともに実行ホストに渡されます。
実行ホストで、別名設定情報が評価されます。実行ホストの文字列が実行ホストに一致する場合は、現在の作業ディレクトリの先頭部分が、ソースパス置換により置き換えられます。この場合、現在の作業ディレクトリ文字列が変更されます。以降のパス別名は、適用されるためには、置換された作業ディレクトリパスに一致する必要があります。
例 4–1 は、上記の NFS オートマウンタの問題が、別名設定ファイルエントリを使用してどのように解決できるかを示す例です。
# cluster global path aliases file # src-path subm-host exec-host dest-path /tmp_mnt/ * * / |