CentOSでs3fs 1.78を使えるようにする

2015/05/03 2015/11/23

仕事でAWSを使うことになり、その際に使ったs3fsに色々振り回されたので共有したい思います。
 

 
 
 
s3fsとは

AWSのストレージサービスであるs3はファイルのアクセスにaws cliが必須で、nfsマウントのような仕組みはサポートされていません。
ただ、複数のEC2サーバーから同時アクセス出来るストレージサービスはs3しかない(※)為、マウントできるようにしちゃおうと作られたものがs3fsです。
ちなみにAmazon御謹製ではありません。

※2015.4.9にAmazonからAWSの新ストレージサービス『Amazon EFS』が発表されました。
 秋口辺りにリリースのようですがnfs接続出来るそうです!1年早ければ…
 

利用にあたっての注意点
  • 元々はGoogle Code(https://code.google.com/p/s3fs/)で開発され、ver 1.74が最終版として公開されていますがGitHub(https://github.com/s3fs-fuse/s3fs-fuse)で継続開発されており、最終版はver 1.78(2015.5.4現在)です。
  • ver 1.74は同時に4〜5多重でGBクラスのファイルコピー等を動かすとプロセスがSegmentation Faultで落ちるという致命的なバグを持っている為お勧めしません。これで泣かされました…
  • とはいえ転送スピードはnfs等に比べると遅いです。
  • s3fsマウント先へのファイル更新量により、メモリ上にキャッシュ?が蓄積されます。
    これが減らず増えるばかりの為、メモリ搭載量/アクセス量にもよりますが1〜2日に一回はs3fsプロセスの再起動が必要です
ver1.78をCentOSで使う
ver1.78ですが、単純にソースコンパイルしただけでは起動時に落ちます。
この為、ソースを修正して対応しました。
※curl周りでエラーになっていた&今回の環境では使ってなさそうだったのでロジックに入らないように
 逃しています。万人に効くとは限りませんので御注意下さい。

# diff curl.cpp curl.cpp.bup
333c333
<   if(!S3fsCurl::is_dns_cache){
---
>   if(S3fsCurl::is_dns_cache){
339c339
<   if(!S3fsCurl::is_ssl_session_cache){
---
>   if(S3fsCurl::is_ssl_session_cache){

あと、s3fsが要求するfuseのバージョンがAmazon Linux標準では古すぎる為、以下より2.9.3をインストールしました。
http://sourceforge.net/projects/fuse/files/fuse-2.X/
 

自動マウントさせる
/etc/fstabへの登録ではマウントが出来なかった為、/etc/rc.d/rc.localに以下を追記して自動マウントさせました。

# s3fs設定
mkdir /mnt/s3
chmod 777 /mnt/s3
s3fs バケット名 /mnt/s3 -o rw,allow_other,nomultipart,url=https://s3.amazonaws.com

※EC2の使用で/mnt配下がOS起動時に初期化される為、マウント前にディレクトリを作成しています
※GBクラスのファイル配置ではマルチパート転送をoff(nomultipart)にしないとダメでした

 

関連記事

コメントとトラックバック

    コメントはありません

    コメントを残す

    CAPTCHA


    トラックバックURLhttps://e-tune-mt.net/ylab/1731/trackback