2011年9月7日水曜日

S3ってなんじゃ?(s3fs-c編)

S3ってなんじゃ?(s3fs編)の回で紹介したs3fsですが、そのままで使用するとマウントする前にAWSコンソールからアップロードしたファイルがマウントできなかったり、マウントしてから作成したディレクトリがファイルとして認識されたりという問題がありました。
これに対応するために、Tong Wangさんという方のs3fs-c という、s3fsからforkしたプロジェクトがあります。

しかし、このs3fs-cはs3fs-1.59からforkしたものなので、現在のs3fsの最新バージョンの1.61までの更新が反映されていません。

1.59から1.61の間の修正は、
  • curlのエラー送受信の扱いの修正
  • libcurlの特定のバージョンの場合の不具合の修正
  • fuseオプションパーサとcurlハンドル使用時のメモリリークの改善
  • 5GB超のファイルの場合マルチパートのPUTヘッダに変更
  • コンパイル時のバグと、md5sum関数のメモリリークの改善

などがあり、これを取り入れることでより安定することになります。
(他にも改善点はありましたが、s3fs-cのコード変更により必要がなくなってしまったものもいくつかありました。)

そこで、s3fs-cをさらにforkし、そこに1.59(r356)~1.61(r368)までのリビジョンをマージしたs3fs-cloudpackを作ってみました。

memorycraft / s3fs-cloudpack
https://github.com/memorycraft/s3fs-cloudpack

インストールの仕方は普通のs3fsと同じです。

このs3fs-cloudpackと通常のs3fsの動作を比べてみます。
まず、AWSコンソール上でフォルダを作り、その中にファイルをアップロードします。


これらがマウントされているか確認します。

s3fs
# /usr/local/bin/s3fs hoge-bucket /mnt/s3/hoge-bucket  -o allow_other
# ls -l
---------- 1 root root 0  9月  7 17:37 hoge.txt
---------- 1 root root 0  9月  7 17:37 hoge2.txt
---------- 1 root root 0  9月  7 17:37 hoge3.txt
---------- 1 root root 5  9月  7 17:36 hoge4.txt
---------- 1 root root 5  9月  7 17:36 hoge5.txt
---------- 1 root root 0  9月  7 17:31 test.txt
---------- 1 root root 0  9月  7 17:37 welcome.txt
オリジナルのs3fsではディレクトリがみつかりません。

s3fs-c(loudpack)
# /usr/local/bin/s3fs hoge-bucket /mnt/s3/hoge-bucket  -o allow_other
# cd /mnt/s3/hoge-bucket
# ls -l
-rwxrwxrwx 1 root root 0  9月  7 08:37 hoge.txt
-rwxrwxrwx 1 root root 0  9月  7 08:37 hoge2.txt
-rwxrwxrwx 1 root root 0  9月  7 08:37 hoge3.txt
-rwxrwxrwx 1 root root 5  9月  7 08:36 hoge4.txt
-rwxrwxrwx 1 root root 5  9月  7 08:36 hoge5.txt
drwxrwxrwx 1 root root 0  9月  7 21:01 mount_if_you_can
-rwxrwxrwx 1 root root 0  9月  7 08:31 test.txt
-rwxrwxrwx 1 root root 0  9月  7 08:37 welcome.txt
#
# ls -l mount_if_you_can
-rwxrwxrwx 1 root root 1  9月  7 12:03 can_you_mount.txt
s3fs-c(loudpack)のほうでは、正しくマウントされていることがわかります。



今度は、マウントしたファイルシステム上でファイルを作ってみます。

s3fs
# cd /mnt/s3/hoge-bucket
# mkdir s3fs-original
# touch s3fs-original/s3fs.org

s3fs-c(loudpack)
# cd /mnt/s3/hoge-bucket
# mkdir s3fs-cloudpack
# touch s3fs-cloudpack/s3fs.cloudpack

これをAWSコンソール上でみてみます。


通常のs3fsではフォルダとは別にディレクトリ名のファイルが余分にできてしまっていますが、s3fs-c(loudpack)では、正しくフォルダのみが表示されています。

これで、いままでよりは安定してつかうことができるのではないかと思います。

以上です。