boto가있는 amazon S3에서 대용량 파일 (> 5GB)을 동일한 버킷 사이에서 이동해야합니다. 이를 위해 etags에 md5 sum을 사용하지 않는 multipart API를 사용해야합니다.amazon S3에서 두 개의 큰 파일이 동일한 지 확인하는 방법은 무엇입니까?
내 코드가 맞다고 생각하지만 (물론 98 % 확신) 원본을 삭제하기 전에 새 복사본이 손상되지 않았는지 확인하고 싶습니다. 그러나 나는 두 가지 객체를 다운로드하고 로컬에서 비교하는 것 이외에는 어떤 방법도 찾을 수 없었습니다. 5GB + 파일은 상당히 긴 프로세스입니다.
아래 코드는 boto가 포함 된 큰 파일을 복사하는 코드입니다.이 코드는 누군가를 도울 수 있습니다. 내 문제에 대한 좋은 해결책이 없다면 누군가가 버그를 발견하고 데이터가 손상되는 것을 방지 할 수 있습니다.
import boto
copy_size = 1000000000 #1e9
bucket_name = 'mybucket'
orig_key_name = 'ABigFile'
dest_key_name = 'ABigFile.clone'
s3 = boto.connect_s3()
mybucket = s3.get_bucket(bucket_name)
key = mybucket.get_key(orig_key_name)
mp = mybucket.initiate_multipart_upload(dest_key_name) #keyname
print 'key size: ', key.size
count = 1
start = 0
end = -1
while end < key.size-1:
print 'count: ', count
start = end + 1
end = min(key.size -1 , start + copy_size)
mp.copy_part_from_key(bucket_name, orig_key_name, count , start, end)
count+=1
mp.complete_upload()
이 코드는 원래 키 크기> = 5368709121 바이트에서만 작동합니다.
두 개의 작은 ~ 1kB 파일로 테스트하십시오. – istruble
@istruble : 잘, multipart는 5BM + 청크에서만 작동합니다. 하지만 여전히 몇 가지 파일에 대해서만 테스트 할 수 있으며 아마존 부분에는 버그가없고 테스트가 철저하다는 희망이 있습니다. – ascobol
감사합니다. 나는 오늘 새로운 것을 배웠다. – istruble