分散ファイルシステムSDFS(Simple DFS)の使い方
まだまだ安心して便利に使える状態にはなっていませんが、分散ファイルシステムSDFS(Simple DFS)の使い方を一旦まとめてみます。
まずはダウンロードとsdfsコマンドの実行を可能にします。
$ cd $ git-clone git://gist.github.com/4729.git sdfs $ alias sdfs=$HOME/sdfs/ui.rb
次に1つ目のDFSディレクトリの設定と確認。
$ sdfs init $HOME/sdfs-data $ cat .sdfs.yaml --- - :removable: false :size: 1GB :url: /home/foo/sdfs-data
2つ目のDFSディレクトリの設定と確認。
実際には別HDDを指定しますが、ここでは説明のため普通のディレクトリを指定します。
$ echo "- :url: $HOME/sdfs-data2" >>.sdfs.yaml $ cat .sdfs.yaml --- - :removable: false :size: 1GB :url: /home/foo/sdfs-data - :url: /home/foo/sdfs-data2 $ sdfs config put
UIがまだないのでリダイレクトを使用していますが、もちろんテキストエディタで編集してもOKです。
最後の sdfs config put は変更した設定ファイルを覚えさせ、設定されていない項目をデフォルト値で埋めるためコマンドです。
次のコマンドで未設定項目にデフォルト値が埋められたファイルを ~/.sdfs.yaml にコピーします。
$ sdfs config get $ cat .sdfs.yaml --- - :removable: false :size: 1GB :url: /home/foo/sdfs-data - :removable: false :size: 1GB :url: /home/foo/sdfs-data2
これで準備OK。
ls, get, put, cat, check を使ってみましょう。
$ sdfs commands: init, config, ls, cat, get, put, check $ sdfs help commands: init, config, ls, cat, get, put, check $ sdfs ls $ echo 'hello world' >hello.txt $ sdfs put hello.txt $ sdfs ls hello.txt $ sdfs cat hello.txt hello world $ sdfs get hello.txt foo.txt $ cat foo.txt hello world $ sdfs check Result: online: 2 offline: 0 unbalance: 0 under replication: 0 over replication: 0 missing: 0 datanode has bad chunks: 0
なんとなく雰囲気が伝わりますでしょうか。
ファイルは2箇所に保存されますので、一方のDFSディレクトリがなくなっても大丈夫です。ちょっと実験してみます。
$ mv sdfs-data2 sdfs-data2.orig $ sdfs ls hello.txt $ sdfs cat hello.txt hello world
ただし、ファイルのコピーが減ってしまったので、sdfs checkでは以下のような警告が出ます。
$ sdfs check warning: /home/foo/sdfs-data2 should have a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447 warning: no replication a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447 Result: online: 2 offline: 0 unbalance: 1 under replication: 1 over replication: 0 missing: 0 datanode has bad chunks: 0
これを復活させるには sdfs balancer を実行します。が、まだ作っていません。
とりあえず説明の続きのため、元に戻します。
$ mv sdfs-data2.orig sdfs-data2
今度はファイルを壊すテストを行います。
内部的にはファイルはダイジェスト値(sha256sum)のファイル名で保存されております。
$ sha256sum hello.txt a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447 hello.txt $ cat sdfs-data/chunk/a948904f* hello world $ cat sdfs-data2/chunk/a948904f* hello world $ cmp hello.txt sdfs-data/chunk/a9* $ cmp hello.txt sdfs-data2/chunk/a9*
では一方を壊してみます。
$ echo z >>sdfs-data/chunk/a9* $ cmp hello.txt sdfs-data/chunk/a9* cmp: ファイルhello.txtの末尾
するとsdfs checkでエラーとなります。
$ sdfs check /home/sdfs-test/sdfs-data has a bad chunk. 856da8ba63f1aad5afa52602da50d093e4183d8b185e727c6fb8067b6cb02e26 a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447 Result: online: 2 offline: 0 unbalance: 0 under replication: 0 over replication: 0 missing: 0 datanode has bad chunks: 1
一応、sdfs getもできます。
$ sdfs get hello.txt foo2.txt warning: digest $ cmp hello.txt foo2.txt
以上が簡単な説明です。
ぜひ使ってみて、問題点や感想とかをお聞かせください。
まあ、今は問題点だらけなんですけどね。
それにしてもSDFSより、もっとユニークでいい名前ないかなぁ。