如何上传大文件到 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
EXPERTE
gefragt vor 5 Monaten35 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen