如何将多个大文件备份到 S3 上的单个压缩文件

如何将多个大文件备份到 S3 上的单个压缩文件

我的应用程序包含数千个文件,总计超过 10TB。

我需要将此数据备份到某个地方(可能备份到 AWS S3)。

我想:

  1. 压缩正在备份的数据
  2. 将备份保存为单个文件

例如作为 gzip 压缩的 tar 文件。

由于大小的原因,我无法在本地创建 gzip 压缩的 tar 文件,因为它太大了。

我怎么能够:

  1. 将所有这些文件夹和文件作为单个压缩文件流式传输到 AWS S3 上?
  2. 将压缩文件从 S3 流回我的磁盘并保持原始文件系统布局?

答案1

这是一个基本的管道和ssh用例。

$ tar zcf - -C /path/to/your/files . | ssh S3_hostname 'cat > yourfile.tar.gz'

解压:

$ ssh S3_hostname 'cat yourfile.tar.gz' | tar zxf - -C /path/to/extract/to

这里的关键是告诉tar它应该写入或读取stdout/stdin而不是本地文件系统上的文件。在tar创建存档的情况下,stdout来自 tar 被字段化,通过ssh管道将其传输到在 S3 主机上运行的远程调用cat,输出被写入 file yourfile.tar.gz。在解压缩场景中,ssh再次用于cat在远程主机上调用以读取文件,并且该流成为stdin本地调用的流,tar该本地调用将存档提取到参数中指定的路径-C

相关内容