2011-01-11 136 views
58

我一直在試圖找到一個比s3cmd更好的命令行工具來複制存儲桶。 s3cmd可以複製桶而不必下載和上傳每個文件。我正常運行重複使用s3cmd桶的命令是:更快的s3存儲桶複製

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2 

這工作,但它是在同一時間通過API一個每個文件副本很慢。如果s3cmd可以並行模式運行,我會非常高興。

是否有其他選項作爲命令行工具或代碼用於複製比s3cmd快的存儲桶?

編輯:看起來像s3cmd-modification正是我要找的。太糟糕了,它不起作用。還有其他選擇嗎?

+5

不知道爲什麼這個問題反覆被關閉,因爲它似乎有許多開發人員遇到它。 無論如何,我以高度並行的方式解決它,這裏的鏈接:https://github.com/cobbzilla/s3s3mirror 謝謝! - 喬納森。 – cobbzilla 2013-05-17 00:51:04

回答

3

我不知道任何其他S3命令行工具,但如果沒有出現在這裏,它可能是最容易編寫自己的。

選擇您喜歡的任何語言和Amazon SDK/Toolkit。然後你只需要列出/檢索源桶的內容並複製每個文件(顯然並行)

看着s3cmd-modification(我承認我對python一無所知)的源代碼,看起來他們沒有並行化桶到桶的代碼,但也許你可以使用標準的上傳/下載並行代碼作爲起點。

+0

是的。我一直在玩弄這個想法,並且用事件機器或者用JRuby進行線程編寫,並以紅寶石的方式編寫它。但是,s3cmd已經非常完整,我寧願只是使用它。我一直在和s3cmd的開發者交談,他有一些解決方案可能會解決性能問題。 – 2011-01-12 23:35:05

3

由於這是關於谷歌在這個問題上的第一次打擊,增加額外的信息。

'Cyno'製作了s3cmd-modification的新版本,它現在支持並行存儲桶到存儲桶的同步。正是我在等待的。

拉請求在https://github.com/pcorliss/s3cmd-modification/pull/2,他的版本在https://github.com/pearltrees/s3cmd-modification

+0

我試過這個確切的版本,我得到一個「意外的錯誤」。 – mpoisot 2012-08-09 15:55:13

+0

s3cmd-modification保存了我幾天的複製。 – 2013-09-05 03:30:49

53

如果你不介意使用AWS控制檯,您可以:

  1. 選擇所有的文件/文件夾中的第一桶
  2. 單擊操作>複製
  3. 創建一個新的水桶,並選擇它
  4. 單擊操作>粘貼

它仍然相當緩慢,但你可以放棄它,讓它做它的事情。

+0

這是否將源存儲桶的內容複製到我的機器,因爲它將其複製到目標?有很多網絡活動和瀏覽器檢查器非常緩慢,因此很難分析。 600K/s在我的機器上。這將在亞馬遜網絡內啓動傳輸速度快得多...要去那裏嘗試。 – 2013-09-14 14:43:06

+0

@BradGoss這是一個很好的問題。我認爲它使用亞馬遜網絡來複制存儲桶的內容,並沒有對本地機器進行任何傳輸,但是如果你發現不同,請告訴我。 – deadwards 2013-09-14 21:03:30

+8

我今天剛使用這種方法。它不會將文件下載到本地計算機 - 它可以直接複製,速度更快。 – 2014-02-03 13:40:09

103

AWS CLI似乎完美地完成了這項工作,並獲得了官方支持的工具獎金。

aws s3 sync s3://mybucket s3://backup-mybucket 

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

默認支持的併發傳輸。請參閱http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests

要快速傳輸大量小文件,請從EC2實例運行以減少延遲,並增加max_concurrent_requests以減少延遲的影響。例如

aws configure set default.s3.max_concurrent_requests 200 
1

下載一個碼頭工人容器即席解決方案使用aws cli桶之間進行同步:

aws s3 sync速度取決於:
- 延遲了一個API調用,S3端點
- 併發API調用的數量

增加同步速度:
- 從AWS實例上運行aws s3 sync(在FreeBSD c3.large是OK ;-))
- 更新〜/ .aws /配置有:
- max_concurrent_requests = 128
- max_queue_size = 8096

具有以下配置和實例類型我能夠在474秒內同步存儲桶(309GB,72K文件,us-east-1)。

對於更通用的解決方案,請考慮AWS DataPipeLine或S3跨區域複製。