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

しかし、このs3fs-cはs3fs-1.59からforkしたプロジェクトなので、現在の最新バージョンである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)では、正しくフォルダのみが表示されています。

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

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら