Gfarm FAQ - Gfarm に関するよくある質問 Copyright (c) 2003-2007 National Institute of Advanced Industrial Science and Technology (AIST). All Rights Reserved. 目次: ***** 1. 一般 1.1 Gfarm とは何ですか? 1.2 Gfarm はどこからダウンロードできますか? 2. トラブル・シューティング 2.1 gfls を実行すると gfarm:.: no such object というエラーメッセージ がでます. 2.2 ファイルシステムノード,メタサーバに接続できません. 2.3 [GSI認証] プログラム起動時,ファイル複製作成時などに認証エラーが 起きてしまいます.あるいは,no filesystem node というエラーが発生 してしまいます. 2.4 ファイル複製を作成しようとすると,text file busy というエラーメッ セージが出てファイル複製が作成できません. 2.5 作成したはずのファイルがありません. 2.6 ファイルシステムノードのスプールディレクトリに Gfarm ファイルシ ステムに登録されていないファイルが残っているようです.消したいの ですが,どうしたらいいでしょうか? 2.7 ファイルシステムノードのディスクがクラッシュして,ファイルがなく なってしまいました.どうすればいいでしょうか? 2.8 実行ビットの立っているファイルを作成,参照しようとすると Operation not permitted というエラーが発生してしまいます. 2.9 無通信状態で止まっている gfarm クライアントや gfsd が残ることが あるのですが? 3. セキュリティ 3.1 Gfarm は firewall に守られていない環境で安全に運用できますか? 3.2 sharedsecret 認証,gsi_auth 手法,gsi 認証の違いは? 3.3 host 情報を一般ユーザからは変更できなくするには? 4. 性能チューニング 4.1 OpenLDAP サーバで,メタデータの読込み,書込み性能を向上させるには どうすればいいでしょうか? 5. 制限事項 5.1 gfchown, gfmv 等はないのですか? 5.2 ファイルを読み書き可能な状態でオープンできますか? 5.3 Gfarm ファイルシステム上のファイル名は大文字,小文字を区別します か? 5.4 Gfarm ファイルシステムのファイル名には ',', '+' などの記号が利用 できますか? 5.5 gsi または gsi_auth 認証と、sharedsecret 認証を混在させることが できますか? 6. 動作の詳細 6.1 gfrun(1) コマンドのマニュアルでは,CPU負荷の低いノードが選ばれる とありますが,その判断はどこで行なわれますか? 1. 一般 ********** 1.1 Gfarm とは何ですか? 下記の URL をご覧ください. http://datafarm.apgrid.org/ 1.2 Gfarm はどこからダウンロードできますか? 下記の URL から配布されています. http://datafarm.apgrid.org/software/ 2. トラブル・シューティング ******************* 2.1 gfls を実行すると gfarm:.: no such object というエラーメッセージ がでます. エラーメッセージは,Gfarm ファイルシステム上の現在の作業ディレ クトリが存在しないことを意味しています.特に,Gfarm 利用開始時 には,ユーザのホームディレクトリが作成されていないため,このエ ラーメッセージが出ます.以下のコマンドにより Gfarm ファイルシ ステムにホームディレクトリを作成してください. $ gfmkdir gfarm:~ 2.2 ファイルシステムノード,メタサーバに接続できません. デフォルトの設定では,ファイルシステムノードは 600/tcp と 600/udp を利用し,メタサーバノードは 601/tcp と 602/tcp を利用 します. 特に 'gfhost -lv' で,'x.xx/x.xx/x.xx' と表示されるファイルシス テムノードは,600/udp での接続に失敗しています. デフォルトのポート番号は,設定ファイル,gfsd, gfmd の起動時オプ ションで変更することができます.詳細はインストールガイドおよび gfsd(8), gfmd(8), gfarm.conf(5) のマニュアルページを参照してく ださい. 2.3 [GSI認証] プログラム起動時,ファイル複製作成時などに認証エラーが 起きてしまいます.あるいは,no filesystem node というエラーが発生 してしまいます. gfmd に関する認証エラーの詳細メッセージは下記のコマンドにより 表示させることができます. gfps -v gfsd に関する認証エラーの詳細メッセージは下記のコマンドにより 表示させることができます. gfrcmd -v ファイルシステムノードのFQDN pwd また、gfmd および gfsd の起動オプションに -v を加えることに よって、サーバ側でのエラーの詳細を /var/log/messages (ないし /var/adm/messages) に記録させることができます。 認証エラーに関する詳細な情報は http://www.globus.org より得ら れます. 以下は典型的な確認項目です. (1) 利用するファイルシステムノードおよび,メタデータサーバのグ リッドマップファイル(/etc/grid-security/grid-mapfile) に正しいエントリが登録されていますか? 特に,Globus Toolkit version 2 (GT2) と version 3 (GT3) 以降では, サブジェクト名に違いがあるので必要です.GT2 の Email フィールド は,GT3 以降では emailAddress となります.また GT2 の USERID フィールドは GT3 以降では UID となります.両方のライブラリを利用 する場合は,互換性のために,両方のエントリを grid-mapfile に登録 する必要があります. (2) ユーザ証明書(~/.globus/usercert.pem),ホスト証明書 (/etc/grid-security/hostcert.pem)のパミッションが 0644 になって いますか? (3) ユーザ証明書,ホスト証明書の有効期限は切れていませんか? (4) ユーザ証明書,ホスト証明書に署名している CA の証明書は有 効なものが正しく /etc/grid-security/certificates に登録されてい ますか? 有効期限が切れていませんか? signing_policy ファイルにおける CA のサブジェクト名も (1) と同 様に変化するので注意が必要です. (5) /etc/grid-security/certificates に登録されている CRL の 有効期限が切れていませんか? (6) gfarm.conf の metadb_serverhost の項で指定しているメタデータ サーバのホスト名は、ホスト証明書に書かれているホスト名と一致して いますか? (7) gfhost コマンドで登録するホストの固有識別子は,ホスト証明書 に書かれているホスト名と一致していますか? (8) 全てのホストで時刻が正しく設定されていますか? Globus の GSI ライブラリの場合,ホスト間で 5分以上時刻が狂っていると認証 に失敗してしまいます. 2.4 ファイル複製を作成しようとすると,text file busy というエラーメッ セージが出てファイル複製が作成できません. このエラーメッセージは,現在このファイルがあるプロセスにより書 込みオープンされていることを示しています.その状態では,ファイ ル複製を作成することができません. ただし ファイルを書込みオープンしたプロセスが強制中断してしま うと,どのプロセスも実際には書込みオープン中ではないにも関わら ず,ファイルが text file busy の状態になったままになることがあ ります.その場合,以下を実行することにより text file busy の状 態を解除することができます. $ gfrun -G gfarm:file gfsplck gfarm:file なお,この問題は GfarmFS-FUSE を利用している場合には発生しませ ん. 2.5 作成したはずのファイルがありません. Gfarm コマンドあるいはシステムコールフックライブラリを使ってい る場合は,ファイルを書込みオープンしたプロセスが強制中断してし まうと,中途半端なメタデータをもつことがあります. このようなファイルは gfls -l や gfwhere により no fragment information と表示されます.登録し直すためには,gfsplck コマン ドを利用します.例えば,gfarm:file を登録し直すためには,以下 のように実行します. $ gfhost | gfrun -H - gfsplck gfarm:file 2.6 ファイルシステムノードのスプールディレクトリに Gfarm ファイルシ ステムに登録されていないファイルが残っているようです.消したいの ですが,どうしたらいいでしょうか? ファイル生成中のプログラムの強制中断,ファイル消去時にファイル システムノードが利用不可などの原因で,必要のないファイルがスプー ルディレクトリに残ることがあります. gfsplck というプログラムで,登録されていないファイルの確認,消 去ができます.まず,以下のコマンドで登録されていないファイルが 確認してください. $ gfhost | gfrun -H - gfsplck gfarm:~ 確認したら,以下のコマンドで消去します. $ gfhost | gfrun -H - gfsplck -d gfarm:~ なお,上記コマンドでは,md5チェックサムによるファイルの一貫性 チェックを行いません.完全なチェックを行って,ファイルを消去す るためには,以下のように -a オプションをつけて実行します. $ gfhost | gfrun -H - gfsplck -ad gfarm:~ 2.7 ファイルシステムノードのディスクがクラッシュしてしまいました.ど うすればいいでしょうか? 実行プログラムを含むファイルは,ファイル参照時に自動的にファイ ルがなくなったことが検出され,別のファイル複製が参照されますの で,複製が他のノードに存在していれば問題なくアクセスすることが できます. ただし,失われたファイル複製の無効な情報がメタデータサーバに登 録されたままですので,その情報を消去する必要があります.例えば, クラッシュしたホストが gfm01.aist.go.jp の場合は,以下のコマン ドを実行します. $ gfrm -h gfm01.aist.go.jp -r gfarm:/ 2.8 実行ビットの立っているファイルを作成,参照しようとすると Operation not permitted というエラーが発生してしまいます. Gfarm ファイルシステムでは,実行ビットの立ったファイルは,単一の パス名に,アーキテクチャごとに複数格納することができます.これに より,同じパス名で異るバイナリを実行させることが可能になります. 一方で,この機構を実現するために,実行ビットの立ったファイルを 作成,参照する場合には,アーキテクチャを決定する必要があります. ファイルシステムノードであれば,アーキテクチャはメタデータとし て登録されているため,それを利用します.ただし,登録されている ホスト名と hostname コマンドの出力が異る場合は,hostname コマン ドの出力をホスト名の別名としてメタデータに登録する必要がありま す.例えば,登録されているホスト名が host.example.com で, hostname コマンドの出力が host の場合は,以下のように登録します. $ gfhost -m host.example.com host また,ファイルシステムノードではないクライアントから実行ビット のたったファイルをアクセスする場合は,.gfarmrc の client_architecture,あるいは環境変数 GFARM_ARCHITECTURE を利用 して,アーキテクチャ名を指定する必要があります. $ export GFARM_ARCHITECTURE=`gfarm.arch.guess` ある実行ファイルについて,どのアーキテクチャのバイナリが登録さ れているかは,下記のコマンド出力の左端の欄を参照してください. $ gwhere gfarm:/user/dir/executable-file 2.9 無通信状態で止まっている gfarm クライアントや gfsd が残ることが あるのですが? ネットワークインターフェースカードの問題や、ネットワーク自体の トラブルで、数分間によって通信が途絶した場合、このようなことが 起きる可能性があります。特に広域ネットワークを通して通信して いる場合はこのような可能性が増えます。そのような場合、 gfarm.conf に「sockopt keepalive」という設定を加えることで、 停止したプログラムを自動的にエラーで終了させることができるよう になります。Gfarm 1.3.1 以降の config-gfarm で生成した gfarm.conf は、デフォルトでこの設定を含んでいます。 あるいは,もし /etc/nsswitch.conf で「ldap」を指定している場合, いくつかの Linux ディストリビューションで,このような問題が 生じています.具体的には Fedora Core 3,Fedora Core 5,CentOS 4.4 などです.Red Hat 8 では,この問題は生じていません. これはシステム附属のライブラリのバグが原因で生じる問題であり, その具体的な条件は,ファイル KNOWN_PROBLEMS.ja に記載してあります. この問題の場合,「ldap」の指定を取り除くことの他には,現在の ところ回避策が知られていません. 3. セキュリティ *************** 3.1 Gfarm は firewall に守られていない環境で安全に運用できますか? 現在のところ,4つの問題があります. 一つは,gfarm_agent へのアクセスについて,現状では認証が行なわれ ていないという問題です.gfarm_agent を用いる場合,メタデータ情報, すなわち,ホスト情報,ファイル名,ファイルのオーナー,およびファ イルの所在といった情報の読み書きは,すべて gfarm_agent を経由して 行なわれます.これが認証なしで行なわれるため,全く安全ではありま せん. この問題があるため,gfarm_agent の利用は,できる限り firewall の 内側に限ることを勧めます. firewall の外側で運用する場合には,IPsec を用いて gfarm_agent の ポートを保護する必要があります.あるいは,最低限,パケット・フィ ルタ (Linux の場合 iptable) 等を用いて,gfarm_agentのポートを, 信頼できるホストからのアクセスだけに制限することも考えられます. ただし,パケットフィルタのみでは,パケット盗聴や,TCP セッション の乗っ取りなどの危険が残ります. gfarm は gfarm_agent なしでも動作可能ですが,その場合,メタデータ 情報アクセスに関する性能が犠牲になります. 二つ目は,PostgreSQL サーバないし LDAP サーバに読み書きアクセス する権限に関する問題です.PostgreSQL サーバないし LDAP サーバに は,上述のメタデータ情報が保存されています. 現在 config-gfarm コマンドが自動生成する設定では,このアクセスの 認証に,全 gfarm ユーザが共有する秘密鍵を用います.このため, gfarm.conf を参照できるユーザであれば,誰でもメタデータを読み書き きることになります.共有鍵ではなく,ユーザ個別の鍵を用いるように 設定することは可能ですが,config-gfarm はそのような設定の作成を サポートしていません. また,ユーザ個別の鍵を用いた場合でも,メタデータへのアクセス権の あるユーザであれば,ファイルやディレクトリに関するどのメタデータ でも読み書きできるという点に変わりはありません. LDAP サーバに対する接続は,現在 SSL をサポートしていませんので, パケット盗聴や,TCP セッションの乗っ取りなどの危険が残ります. PostgreSQL サーバに対しては SSL も利用可能ですが,手作業による 追加設定が必要であり,config-gfarm が生成する設定のままでは, パケット盗聴や,TCP セッションの乗っ取りなどの危険が残ります. なお,gfsd と gfmd には,上記のような問題はありませんので,実 データへのアクセスに関しては,常に認証が行われます. 三つ目の問題は,ファイルやディレクトリ複製時のオーナーおよび モード設定の問題です.ファイルやディレクトリの複製が,ファイル のオーナーによって実行された場合は問題ありませんが,それ以外の ユーザーによって実行された場合,複製ファイルや複製ディレクトリ のオーナが,本来のオーナではなく,複製を実行したユーザとなって しまいます.また,複製のファイル・モードについても,本来の権限 通りではなく,group や other に対する書き込み権限が許されてし まいます. 上記三つの問題は,Gfarm version 2で解決する予定です. もう一つの問題は,認証の問題です. Gfarm-1.x は,sharedsecret 認証,gsi_auth 手法,gsi 認証の 3 種類の認証方法をサポートしていますが, Internet 環境では,sharedsecret 認証や gsi_auth 手法では 安全とは言えません.gsi 認証の利用を推奨します. これについては,次の項目を参照してください. 3.2 sharedsecret 認証,gsi_auth 手法,gsi 認証の違いは? 「sharedsecret」認証は,共有鍵を用いた認証です. Gfarm の sharedsecret 認証の場合,提供しているサービスが認証だ けであり,データに対する署名や暗号化を提供しているわけではあり ませんから,パケット盗聴や,TCP セッションの乗っ取りなどの危険 が残ります. 従って,firewall で守られている環境内のみでの利用をお勧めしま す.sharedsecret 認証を提供している理由は,高速なことと,公開 鍵の取得の手間を省けることです. 「gsi」(Grid Security Infrastructure) 認証は,公開鍵に基づいた認 証方法です.Gfarm は Globus の提供する GSI ライブラリを用いて います.Globus がデータの暗号化をサポートしているため, sharedsecret 認証よりも安全であると考えられます.ただし,輸出 版の Globus の場合,バージョンによっては暗号化をサポートしてい ないことがあります.お使いの Globus が,暗号化をサポートしてい るバージョンであるか確認しておくことをお勧めします. 「gsi_auth」手法の場合,認証処理のみに GSI ライブラリを用い, その後の通信にはデータに対する署名や暗号化処理による保護のない, 生のデータ転送を用います.このため sharedsecret 認証と同様, パケット盗聴や,TCP セッションの乗っ取りなどの危険が残ります. 従って,firewall で守られている環境内のみでの利用をお勧めしま す.gsi_auth 手法を提供している理由は,データ転送が高速なこと です. gsi 認証や gsi_auth 手法は,ソースコードの configure 時に --with-globus オプションを指定しないと,有効になりません. GSI に関する詳しい情報は,http://www.globus.org/ を参照し てください. 3.3 host 情報を一般ユーザからは変更できなくするには? この説明では、以下の記法を用います。 実際には、これらを適切な値で置き換えてください。 $POSTGRESQL_SERVERPORT config-gfarm の -p オプションで指定した、 PostgreSQL のポート番号です。 gfarm.conf に postgresql_serverport として記録されています。 デフォルト値は 10602 です。 $ADMIN_USER config-gfarm の -U オプションで指定した、 PostgreSQL の管理ユーザ名です。 config-gfarm を root 権限で実行した場合のデフォルトは、 「postgres」(ただし *BSD では「pgsql」) です。 config-gfarm を一般ユーザ権限で実行した場合のデフォルトは、 その一般ユーザです。 $ADMIN_PASSWORD $ADMIN_USER の PostgreSQL パスワードです。 ファイル var/gfarm-pgsql/admin_password に記録されていますので そのファイルの内容を使ってください。 $NORMAL_USER config-gfarm の -u オプションで指定した、 PostgreSQL へアクセスに使うユーザ名です。 gfarm.conf の postgresql_user の項に記録されています。 デフォルトは「gfarm」です。 The default is "gfarm" $HOSTADMIN_USER ホスト情報の管理ユーザが、PostgreSQL へのアクセスに使う ユーザ名です。 例えば「gfarm_admin」のような名前で適宜決めてください。 $HOSTADMIN_PASSWORD $HOSTADMIN_USER の PostgreSQL パスワードです。 適宜決めて下さい。 以下は PostgreSQL 向けの説明です。 (OpenLDAP 向けの記述は、まだ書かれていません。) まず、一般ユーザが、ホスト情報を変更できないようにするには、 下記のようにします。 $ psql -U $ADMIN_USER -p $POSTGRESQL_SERVERPORT -W gfarm Password for user $ADMIN_USER: $ADMIN_PASSWORD gfarm=# REVOKE INSERT, UPDATE, DELETE ON Host, HostAliases FROM $NORMAL_USER; gfarm=# \q また、特定の管理者だけは、ホスト情報を変更できるようにするには、 下記のようにします。 $ createuser -q --no-createrole -U $ADMIN_USER -p $POSTGRESQL_SERVERPORT -A -D $HOSTADMIN_USER Password: $ADMIN_PASSWORD $ psql -U $ADMIN_USER -p $POSTGRESQL_SERVERPORT -W gfarm Password for user $ADMIN_USER: $ADMIN_PASSWORD gfarm=# ALTER USER $HOSTADMIN_USER WITH ENCRYPTED PASSWORD '$HOSTADMIN_PASSWORD'; gfarm=# GRANT SELECT, INSERT, UPDATE, DELETE ON Host, HostAliases, Path, FileSection, FileSectionCopy TO $HOSTADMIN_USER; gfarm=# \q … 次に var/gfarm-pgsql/pg_hba.conf を編集して下記の行を追加します。 host gfarm $HOSTADMIN_USER 0.0.0.0 0.0.0.0 md5 … 次に PostgreSQL を再起動して pg_hba.conf の変更を反映させます。 # /etc/init.d/gfarm-pgsql restart … ホスト情報管理者の ~/.gfarmrc を、下記の内容で作成します。 postgresql_user $HOSTADMIN_USER postgresql_password "$HOSTADMIN_PASSWORD" … $HOSTADMIN_USER のパスワードが洩れないように保護します。 $ chmod 600 ~/.gfarmrc なお、このホスト情報管理者は、gfarm_agent を使ってはいけませんので 注意してください。特に、/etc/gfarm.conf に gfarm_agent の設定が書か れていると、その設定が自動的に使われてしまいますので、そのような 記述のないホストでホスト情報の管理作業を行なう必要があります。 4. 性能チューニング ******************* 4.1 OpenLDAP サーバで,メタデータの読込み,書込み性能を向上させるには どうすればいいでしょうか? バックエンドのデータベースに Berkeley DB を利用している場合,デー タベースの環境設定ファイル /var/gfarm-ldap/DB_CONFIG で,キャッ シュサイズの増加,トランザクション・ログの非同期書込みなどによ り性能が向上します.以下の例では,キャッシュメモリサイズとして 512 MB を指定しています.以下のファイルを作成後,slapd を再起動 してください. ------------------------------ ここから ------------------------------ set_cachesize 0 536870912 2 set_flags DB_TXN_NOSYNC ------------------------------ ここまで ------------------------------ バックエンドのデータベースに LDBM を利用している場合,メモリ上 にキャッシュサイズを大きくすることにより,性能を向上させること ができます.キャッシュされるエントリサイズ,メモリサイズは slapd.conf の cachesize, dbcachesize でそれぞれ指定することがで き,例えば以下のように記述するとデフォルトの 10 倍に設定するこ とができます. ------------------------------ ここから ------------------------------ cachesize 10000 dbcachesize 1000000 ------------------------------ ここまで ------------------------------ 5. 制限事項 *********** 5.1 gfchown, gfmv 等はないのですか? ありません.ただし,gfmv に関しては,システムコールフックライブラリ あるいは GfarmFS-FUSE を用いれば、mv コマンドを使って同等のことが できます. この問題は,Gfarm version 2 で解決する予定です. 5.2 ファイルを読み書き可能な状態でオープンできますか? Version 1.0.4 でサポートされました.ただし,そのファイルにレプ リカが存在した場合,更新されたレプリカ以外のレプリカは自動的に 消去されます. 5.3 Gfarm ファイルシステム上のファイル名は大文字,小文字を区別します か? openldap 2.1 系列ないし 2.2 系列の最新版を利用している場合は, 大文字と小文字を区別します. ただし,openldap 2.0 系列などの古い版を利用している場合には, 区別できません. 5.4 Gfarm ファイルシステムのファイル名には ',', '+' などの記号が利用 できますか? Version 1.0.2 よりファイル名として '#', ' ', ',', '+', '"', '\', '>', '<', ';' の文字が利用可能となりました. 5.5 gsi または gsi_auth 認証と、sharedsecret 認証を混在させることが できますか? gsi 認証と sharedsecret 認証の混在は、基本的には不可能です。 同様に gsi_ath 認証と sharedsecret 認証の混在も、基本的には不可能です。 この理由は、gfrcmd、gfrun、gfrep や、自動複製機能を有効にした gfarmfs (gfarmfs -N) のような gfarm クライアントが gfarm ファイルシステム ノードにアクセスした場合、その gfarm ファイルシステムノードは、さら に別の gfarm ファイルシステムノードへアクセスするからです。 ここで、最初のファイルシステムノードへのアクセスが sharedsecret 認証 で行なわれ、さらに二番目のファイルシステムノードへのアクセスで gsi (あるいは gsi_auth) 認証が要求された場合、二番目のファイルシステム ノードへのアクセスは失敗します。これは、gfarm クライアントは最初の gfarm ファイルシステムノードへ GSI proxy 証明書を渡してないため (これは、最初のアクセスで gsi や gsi_auth ではなく sharedsecret が 使われているからです)、最初のファイルシステムノードは、二番目の ファイルシステムノードへ渡すための GSI proxy 証明書を所持していない からです。 逆に言うと、二番目へのアクセスで決して gsi や gsi_auth 認証が使われ ないのであれば、sharedsecret と gsi (ないし gsi_auth) を混在させる ことができます。たとえば、もしもただ一つの PCクラスタから構成された システムがあり、そのクラスタ内の全てのノードが NFS でユーザのホーム ディレクトリを共有しており、かつ gfarm ファイルシステムノードは、 すべてそのクラスタに所属しているとすると、クラスタ内では sharedsecret 認証を用い、クラスタ外の gfarm クライアントがクラスタ内の gfarm ファイルシステムノードにアクセスする際には gsi (ないし gsi_auth) 認 証を使うといったことができます。 下記は、そのような構成で、クラスタが 192.168.0.0/24 とうアドレスを 使っていて、クラスタ外からのアクセスには gsi 認証を要求する場合の gfarm.conf の設定例です。 auth enable sharedsecret 192.168.0.0/24 auth enable gsi * 6. 動作の詳細 ************* 6.1 gfrun(1) コマンドのマニュアルでは,CPU負荷の低いノードが選ばれる とありますが,その判断はどこで行なわれますか? gfrun(1) コマンド自身が,ファイルシステムノードで動作している gfsd に,ロードアベレージを問い合わせて調べています.