s3fs と s3cmd
EC2からS3に大量のログファイルを保存するために
・s3fs(正確にはs3fs-c)
・s3cmd
の2種類を使っていたがどちらも一長一短という感じで、悩みが。
【それぞれの特徴】
・s3fs
(長所)ファイルシステムとしてマウントしローカルファイルのようにcpなどの操作が可能
(短所)メモリリーク(swapが激しい)←ホントにイタイ
・s3cmd
(長所)S3の操作の多くがコマンドラインで出来る
(短所)pythonのメモリ消費量多め、数GBサイズの大きいファイルの操作(後述)
長所としてはどちらも良い所があるのだが、s3fsの短所:メモリリークがどうにも許容できず、
s3cmd一本で行こうと思い始めたところ、数GB級のファイルをS3にputしようとして下記エラー。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! An unexpected error has occurred. Please report the following lines to: s3tools-bugs@lists.sourceforge.net !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Problem: KeyError: 'size' S3cmd: 1.1.0-beta2 Traceback (most recent call last): File "/usr/local/s3cmd/s3cmd", line 1804, inmain() File "/usr/local/s3cmd/s3cmd", line 1745, in main cmd_func(args) File "/usr/local/s3cmd/s3cmd", line 969, in cmd_sync return cmd_sync_local2remote(args) File "/usr/local/s3cmd/s3cmd", line 936, in cmd_sync_local2remote (item['full_name_unicode'], uri, response["size"], response["elapsed"], KeyError: 'size'
’size’と出ていたものの何が悪いのかはっきりとは分からなかっただが、
幾つかのファイルを試して、ファイルサイズが問題だということに。
どうにもならないのかぁぁと諦めかけたものの、よーくヘルプを見てみると、
以下のようなオプションが。
--multipart-chunk-size-mb=xx(MB)
どうやら、5GB以上の大きいファイルをアップする場合、このオプションが無いとエラーになるらしい。
↓ こちらにわかりやすい解説があった。
cloudpackブログ: s3cmdでmultipartオプションを利用してs3へアップロード
ということで、以下のように指定。
s3cmd put --multipart-chunk-size-mb=5120 転送するファイル s3://バケット名/オブジェクトパス
これでうまくアップ出来るようになった。
良かった。
以下も分かりやすく、参考になった。
s3cmdで5GB以上のファイルをS3にアップロードする方法 - 雑多なインフラエンジニア日記