Je dois déplacer de gros fichiers (> 5 Go) sur Amazon S3 avec boto, de et vers le même compartiment. Pour cela, j'ai besoin d'utiliser l'API multipart, qui n'utilise pas les sommes md5 pour etags.Comment vérifier si deux gros fichiers sont identiques sur amazon S3?
Bien que je pense (bien sûr seulement 98%) que mon code est correct, je voudrais vérifier que la nouvelle copie n'est pas corrompue avant de supprimer l'original. Cependant, je n'ai trouvé aucune méthode à part télécharger les deux objets et les comparer localement, ce qui est assez long pour les fichiers de plus de 5 Go. Pour l'anecdote, voici mon code pour copier un gros fichier avec boto, peut-être que cela peut aider quelqu'un. S'il n'y a pas de bonne solution à mon problème, peut-être que quelqu'un trouvera un bug et m'empêchera de corrompre les données.
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()
Ce code ne fonctionne que pour les tailles de clé d'origine> = 5368709121 octets.
Testez avec deux petits fichiers d'environ 1 Ko. – istruble
@istruble: bien, multipart ne fonctionne que pour les blocs 5BM +. Mais encore, je ne peux que tester quelques fichiers et espérer que la partie amazon est libre de tout bug et que mes tests étaient exhaustifs. – ascobol
Merci. J'ai appris quelque chose de nouveau aujourd'hui. – istruble