Hatena::Grouprekken

murawaki の雑記

2009-07-10

gfarm memo

gfarm に関するメモ。たまに更新している。

replica の作成

gfarm は replica を自動的に作らない。デフォルトでは 1 ファイル 1 ホスト。replica の作成はコマンド gfrep で明示的に行う。

host_list_file に使うノードの一覧を記述して、

gfrep -H host_list_file gfarm_filepath

とすると、適当なホストに replica が作成される。gfarm_filepath がディレクトリなら再帰的にコピーしてくれる。ただし 1 並列で実行されるため、巨大なディレクトリを指定すると、完了までに時間がかかりまくる。

workaround として、サブディレクトリに分割し、

gfrep -H host_list_file gfarm_subdir1

として gfrep 自体を並列に実行。

gfrep には並列数を指定するオプション -j があるが、man によれば「OpenMP C コンパイラコンパイルされたときに限り有効」とのこと。

replica の消去は

gfrm -h hostname gfarm_path

ノード選択のアルゴリズムは把握していない。漫然と gfrep をやっていると、特定ノードに replica が集中し、ディスクがいっぱいになって困る。

2010/09/16 追記: 最近の資料 によると、gfarm2fs のオプションで、close 時に自動複製が作成できるらしい。試したことないけど。

2011/11/03 追記: -o ncopy=3 を試してみたら、すぐ近くのホストにばかり replica を作る。私が望んだ挙動ではない。

replica の操作権限

他人の (自分に書き込み権限がない) ファイルの replica を作れる。また、作った replica を消せる。いいのか?

replica と障害

replica を持つノードがすべて死んでいる場合、当然ファイルの読み出しに失敗する。gfarm2fs を使ってアクセスする場合、open は成功するが read の段階ではじめて失敗する。また、stat も成功する。

replica がなくなったことにいつ master が気付くのか分からない。gfwhere はレプリカがないファイルについてエラーを吐くが、gfwhere 自体は replica の存在をチェックしていない様子。実際に file read しようとして失敗した時点で、replica の欠如を master が知るみたい。

gfreg/gfexport

gfarm 上のファイルの操作は、gfarm2fs でファイルシステムにマウントした上で、通常のファイル操作コマンドを使えばよいが、基本的なファイル操作コマンドに対応する gfarm 用コマンドも用意されている。gfstat, gfls, gfchmod など。ここで指定される path はいずれも gfarm 上の path。つまり、gfarmファイルシステム内で閉じている。

では、そもそもローカルファイルを gfarm 上に持っていくにはどうすればいいのかと思ったら、gfreg というコマンドが用意されていた。逆に、gfarm 上のファイルを読み出す場合には gfexport。

わざわざそんなコマンドを使う意味がどこにあるのかと言われそうだが、少なくとも一つ使う場面がある。障害が発生したとき。マウントしてしまうと、read などのシステムコールを読んだ後、その先で何が起きているか strace では分からないけど、直に gfarm のライブラリを呼び出すとどこで躓くのかわかる。

gfreg は明らかに容量が足りないノードに突撃して、やっぱりディスク容量が足りませんでしたとエラーを吐くことがある。ディスクの残りを 0 にした時点で打ち切った、不完全なファイルが gfarm に登録される。

gfmkdir -p?

mkdir の gfarm 版に -p オプションがない。ディレクトリが既に存在すると怒られる。いつのまにか追加されていた。

gfcp?

cp に対応する gfarm のコマンドはない。と思ったら、ソースの中には gfcp.c があった。けど、デフォルトではインストールされない。

普通は gfarm2fs したあと cp すればいいので支障はない。

-h

普段はオプション -h (--human-readable) を愛用しているが、gfarm 用コマンドには実装されていない。 ls してファイルサイズが 759933251 と言われても桁が分からない。gfdf などには実装されていた。

読み出しエラー

注意: ちゃんと調査していない。

マウントした状態で open/read すると、結構な頻度でファイル読み出しに失敗する。最初から失敗しているのか、途中で失敗するのかは確認していない。再実行すると成功したりする。ネットワーク接続のエラーが発生した時に、retry とかをやらずにそのままファイルシステムレベルのエラーにしている感じ。ソースを確認していないけど。

authentication error

よくはまる罠。authentication error というエラーを吐いて失敗。原因はいろいろあるけど、よくあるのが鍵 .gfarm_shared_key の期限切れ。

ユーザ間のデータ移動

gfarm 上でユーザ間のデータ移動がうまくいかない。permission で group に対して +w しても permission denied と言われる。