我的应用程序包含数千个文件,总计超过 10TB。
我需要将此数据备份到某个地方(可能备份到 AWS S3)。
我想:
- 压缩正在备份的数据
- 将备份保存为单个文件
例如作为 gzip 压缩的 tar 文件。
由于大小的原因,我无法在本地创建 gzip 压缩的 tar 文件,因为它太大了。
我怎么能够:
- 将所有这些文件夹和文件作为单个压缩文件流式传输到 AWS S3 上?
- 将压缩文件从 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
。