Globus Online でファイルを転送する

スウェーデンにある学術データベースに、数 TB に及ぶデータを登録することになった。過去に同じサーバに sftp で転送した人曰く、1-2 MB/sec しか出なかったうえ、ファイルの破損がいくつかあって大変だったそうだ。幸い、当該データベースが Globus Online の endpoint を設置したとのことだったので、初めての機会だが Globus Online でアップロードしてみた。

Globus Online の背景はややこしくてよく分からないのだが、Grid Computing というクラウド型の分散システム上で動く GridFTP なるプロトコルを、使いやすいように Web ベースのクライアント等と合わせてパッケージ化したサービスらしい。サーバ側は課金制で、クライアント側はフリー。Grid Computing 基盤や Grid FTP 自体は OSSUbuntu にもパッケージがあるので、自分で頑張ってインストールすれば Globus Online とは独立したグリッドを構築することもできるようだ。

Globus Online の使い方は Web にあるチュートリアルに書いてあるのだが、scp 等とは仕組みが違うので最初は混乱した。scp では、サーバとクライアントがあって、サーバに向かってセッションを張ってデータを転送する。Globus では末端は end point と呼ばれ、(サービス的にはともかく)原理的にはサーバとクライアントの区別はない。クライアント側(今回、アップロードしようとするデータがある手元のマシン)を end point にするために、globusconnectpersonal というプログラムを導入する必要がある。具体的には、Globus Online の Web からアカウントを作った後、end point 追加を選ぶ。すると、キーが発行されるので、これをクライアントに設定する。さらに、Globus Online から閲覧できるフォルダを -restrict-paths オプションで指定して起動する。

./globusconnectpersonal -start -restrict-paths /path/

このプログラムはデーモンとして常駐する。止めるときは、

./globusconnectpersonal -stop

だ。

次に Web インターフェイス、または ssh から使える CLI から、転送 job (transfer) を submit する。この操作は、手元の end point から行う必要はない。任意のマシンから可能だ(第三者転送という)。

end point に接続する時は、ユーザ名とパスワードを入力して activate する必要がある。activation には有効期限があり、それを経過すると転送が止まってしまうので、忘れずに re-activate する。

いったん job を開始したら、job を submit したマシンは止めてしまっても問題ない*1。例えば、ラボにあるワークステーションを end point にしたら、下宿にあるノート PC から Globus Online の Web にアクセスし、ラボのワークステーション上のファイルを海外のサーバへコピーせよという指示を出すことができる。そうしたら、ノート PC の接続は解除してしまってよい。仮に同じことを rsync でやる場合は、ノート PC からワークステーションssh し、rsync を実行する。ノート PC からの ssh が切れても転送が続くようにするには、rsync を screen や nohup の上で走らせる必要がある。それに比べると簡単だ。

job は、エラーから自動で回復する。例えば、activation が expire したとか、end point の片方が切断されたとかで転送が止まってしまっても、reactivation したり、接続が回復すれば、勝手に再開してくれる。これを fire-and-forget というらしい。

Globus Online には CLI インターフェイスがあり、scp など、見慣れたコマンドが使えるように見えるが、これは見かけが同じだけで、中身は違うことに注意されたい。例えば、end point でないマシンにあるローカルファイルを CLI インターフェイスの scp コマンドを使って転送することはできない。あくまで、転送は end point 間だけだ。

不便なことに、Web インターフェイスからは、フォルダの作成ができない。フォルダを作るには CLI インターフェイスを使う。

$ssh username@cli.globusonline.org
Welcome to globusonline.org, username.  Type 'help' for help.
$ mkdir user#server-endpoint/~/incoming/upload-dir

のようになる。rsync や scp では、user@host:/path/to/file だが、Globus では user#endpoint/path/to/file と指定する。

160907追記: @yam_cpp 氏曰く、Web インターフェイスの ☰ のアイコンからできるそうだ。

転送速度のチューニングについては、広域ネットワークにおける GridFTP による効率的なデータ転送 (KEK Report 2012, 高瀬亘) やデータ転送プロトコル GridFTP の並列TCP コネクション数調整機構 GridFTP-APT (2006, 伊藤建志) など、資料がいろいろあるが、デフォルトのままでも十分な速度が得られたので触っていない。

*1:もちろん、データが置いてある end point は起動しておかないといけない