如何上传大文件到 Glacier?

0

【以下的问题经过翻译处理】 我不知道为什么Glacier管理起来那么复杂/棘手。难道这就是它价格便宜的原因之一吗?

我只是想上传一些大型vmdk文件到Glacier。

我已经在AWS文档中搜寻了几天,但我实际上开了50个标签页,但什么都没有详细说明。到目前为止我所做的进展(仅仅创建一个仓库)都是借助其他模糊的博客和YouTube视频的信息完成的。

例如在 https://docs.aws.amazon.com/cli/latest/userguide/cli-services-glacier.html#cli-services-glacier-initiate 中有一个标题“准备一个文件”,但紧随其后的是“创建一个文件”。那么究竟是准备一个已存在的文件还是创建一个新的文件?这一步骤真的必要吗?为什么这么复杂?

而且看起来,我需要使用一些古老的,有缺陷的Windows XP程序将文件拆分成块再上传?你在开玩笑吧?!所以,已经花了一整天的时间导出这个大型vmdk。现在我还要花另一天的时间仅仅是“拆分”它成块(如果我有足够的硬盘空间),然后我必须确保我不会在接下来的cli代码中犯任何错误,正确地声明每个块的起始/结束字节。然后又花了一天的时间上传,再另一天的时间重新组装它?再说一遍,你在开玩笑吗?!如果我有一个100GB的文件,这将产生多少块?我必须用它自己特殊的一行代码来解决每个块。

有人知道还有其他材料可以帮助我掌握上传大文件到 Glacier 到底需要做什么吗?

我知道有第三方客户端可用,但我想了解如何通过 cmd 做到这一点。

profile picture
专家
已提问 5 个月前32 查看次数
1 回答
0

【以下的回答经过翻译处理】 “准备文件”,但紧接着又是“创建文件” 这只是为了让文档查看者看到如何创建“假文件”,以便使用“假文件”按照步骤上传到Glacier库。

首先使用AWS CLI创建vault:

$ aws glacier create-vault --account-id 7356xxxxxxxx --vault-name myvault
{
    "location": "/7356xxxxxxxx/vaults/myvault"
}

接下来将100 GiB文件拆分为100 MiB块(在Windows上使用HJ-Split)

注意:100 GiB文件将有1,000个文件,需要双倍的磁盘空间

此命令将使用指定的每个块大小设置vault。

aws glacier initiate-multipart-upload --account-id 7356xxxxxxxx --archive-description "multipart upload test" --part-size 104857600 --vault-name myvault

上述命令将导致UPLOADID

{

"uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ",

"location": "/123456789012/vaults/myvault/multipart-uploads/19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"

}

在 Windows 中,将 UPLOADID 设置为环境变量: set UPLOADID="19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"

然后需要为100 GiB的区块文件创建为1000个并运行: $ aws glacier upload-multipart-part --upload-id %UPLOADID% --body chunkaa --range 'bytes 0-104857599/*' --account-id 7356xxxxxxxx --vault-name myvault

{

"checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"

}

$ aws glacier upload-multipart-part --upload-id %UPLOADID% --body chunkab --range 'bytes 104857600-209715199/*' --account-id 7356xxxxxxxx --vault-name myvault

{

"checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"

}

$ aws glacier upload-multipart-part --upload-id %UPLOADID% --body chunkac --range 'bytes 209715200-314572799/*' --account-id 7356xxxxxxxx --vault-name myvault

{

"checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"

}

1,000 of the above for each of the 100 MiB chunks that were from split 100 GiB file. Note: most likely a 3rd party tool vendor would run the above in multiple concurrent threads with configurable retries for better performance/reliability.

然后,你需要为所有 1,000 个文件创建哈希值,这些文件是在你将 100 GiB 文件拆分为 100 MiB 区块时创建的)。 下载适用于 Windows 的 OpenSSL。 创建一个包含所有 1,000 个文件块的哈希值的文件: $ openssl dgst -sha256 -binary chunkaa > hash1

$ openssl dgst -sha256 -binary chunkab > hash2

$ openssl dgst -sha256 -binary chunkac > hash3

..

$ openssl dgst -sha256 -binary chunkxxxx > hash1000

接下来,使用以下算法创建用于在完成文件库分段上传时验证上传的 TREEHASH: type hash1 hash2 > hash12

openssl dgst -sha256 -binary hash12 > hash12hash

type hash12hash hash3 > hash123

openssl dgst -sha256 -binary hash123 > has123hash

type hash123hash hash4 > hash1234

openssl dgst -sha256 -binary hash1234 > hash1234hash

type hash1234hash hash5 > hash12345

openssl dgst -sha256 -binary hash12345 > hash12345hash

..

continue till you get to 1,000 of these

运行: openssl dgst -sha256 -binary hash12345blahblahblah 你会得到一个类似的返回: SHA256(hash123)= 9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67

这是最后一个 TREEHASH,用于验证已上传的分段。将该值设置为 TREEHASH 环境变量。 set TREEHASH=9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67

显然,对于大文件来说,手动执行上述操作并不是很可行。 通过提供档案和支持校验和 TREEHASH 来完成文件库上传 TREEHASH: $ aws glacier complete-multipart-upload --checksum %TREEHASH% --archive-size <total size of archive> --upload-id %UPLOADID% --account-id 7356xxxxxxxx --vault-name myvault

希望上面的片段分解能够帮助您更好地了解使用 AWS CLI 上传到 Glacier 文件库需要什么。是的,这非常痛苦,但我认为 AWS 从来没想过有人会为大文件手动执行此操作...

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则