如何将大于 5Tb 的对象上传到 Google Cloud Storage?

How to upload larger than 5Tb object to Google Cloud Storage?

尝试将 PostgreSQL 备份(~20 Tb) 长期保存到 Google 云存储 ,我目前正在通过 gsutil.

将 PostgreSQL pg_dump() 命令传递给 streaming transfer
pg_dump -d $DB_NAME -b --format=t \
    | gsutil cp - gs://$BUCKET_NAME/$BACKUP_FILE

但是我担心进程会因为GCS的5Tb而崩溃object size limit.

有什么方法可以将大于 5Tb 的对象上传到 Google 云存储

版本:使用 split?

我正在考虑将 pg_dump 传输到 Linux 的 split 实用程序和 gsutil cp.

pg_dump -d $DB -b --format=t \
    | split -b 50G - \
    | gsutil cp - gs://$BUCKET/$BACKUP

这样的东西行得通吗?

正如 Ferregina Pelona、guillaume blaquiere 和 John Hanley 所提到的。无法绕过 Google 实施的 5 TB 限制,如 document:

中所述

Cloud Storage 5TB object size limit

Cloud Storage supports a maximum single-object size up to 5 terabytes. If you have objects larger than 5TB, the object transfer fails for those objects for either Cloud Storage or Transfer for on-premises.

如果文件超过限制 (5 TB),传输将失败。

您可以使用Google的issue tracker请求此功能,在link提供的范围内,您可以检查请求的功能或请求满足您期望的功能.

您通常不想在没有流式传输的情况下上传 multi-terabyte 范围内的单个对象。流式传输有两个主要缺点,它们对您来说都是非常糟糕的消息:

  1. 流式传输不使用云存储的校验和支持。您将获得定期的 HTTP 数据完整性检查,仅此而已,对于定期的 5 TB 上传,最终以损坏的备份告终的可能性非零。
  2. 流式传输如果失败则无法恢复。假设你全天候以 100 Mbps 的速度上传,5 TB 的上传至少需要 4 天半,如果你的 HTTP 连接失败,你需要从头开始。

相反,这是我的建议:

  1. 首先,最小化文件大小。 pg_dump 有许多减小文件大小的选项。像“--format=c -Z9”这样的东西可能会产生一个小得多的文件。
  2. 其次,如果可能,在上传之前将转储存储为文件(或者最好是一系列拆分文件)。这很好,因为您将能够计算它们的校验和,gsutil 可以利用它,而且您还可以根据需要手动验证它们是否正确上传。当然,这可能不切实际,因为您需要一个备用的 5TB 硬盘驱动器 space,但除非您的数据库几天内不会更改,否则可能没有一种简单的替代方法可以重试,以防万一你失去了连接。