14 个版本 (7 个稳定版)
1.6.0 | 2024 年 7 月 20 日 |
---|---|
1.3.0 | 2024 年 4 月 28 日 |
1.2.0 | 2024 年 3 月 29 日 |
1.1.0 | 2023 年 12 月 25 日 |
0.1.9 | 2023 年 6 月 17 日 |
#248 in 命令行工具
每月 602 次下载
790KB
21K SLoC
s3sync
概述
S3sync 是一个可靠、非常快速且强大的 S3 同步工具。
它可以用来同步本地目录与 S3 存储桶,也可以用来同步 S3 与 S3 存储桶。支持分块上传、版本控制和元数据。
作为库
S3sync 可以作为库使用。
use s3sync::config::args::parse_from_args;
use s3sync::config::Config;
use s3sync::pipeline::Pipeline;
use s3sync::types::token::create_pipeline_cancellation_token;
#[tokio::main]
async fn main() {
// You can use all the arguments for s3sync binary here.
let args = vec!["program_name", "./src", "s3://test-bucket/src/"];
// s3sync library converts the arguments to Config.
let config = Config::try_from(parse_from_args(args).unwrap()).unwrap();
// Create a cancellation token for the pipeline.
// You can use this token to cancel the pipeline.
let cancellation_token = create_pipeline_cancellation_token();
let mut pipeline = Pipeline::new(config.clone(), cancellation_token).await;
// You can close statistics sender to stop statistics collection, if needed.
// Statistics collection consumes some Memory, so it is recommended to close it if you don't need it.
pipeline.close_stats_sender();
// Run the pipeline. In this simple example, we run the pipeline synchronously.
pipeline.run().await;
assert!(!pipeline.has_error());
}
特性
-
可靠:深度端到端对象完整性检查
S3sync 对每个对象计算 ETag (MD5 或等效) 并将其与目标中的 ETag 进行比较。
存在于本地磁盘上的对象将从磁盘读取并与源或目标中的校验和进行比较。
即使源对象是使用分块上传上传的,S3sync 也可以计算并比较每个部分和整个对象的 ETag。(使用--auto-chunksize
)
可选地,S3sync 还可以计算和比较每个对象的附加校验和 (SHA256/SHA1/CRC32/CRC32C)。
注意:Amazon S3 Express One Zone 存储类不支持 ETag 作为验证。但可以使用额外的校验和算法。 -
非常快速
S3sync 使用 Rust 实现,使用 AWS SDK for Rust,该 SDK 使用多线程异步 I/O。
在我的环境中(c6a.large
,有 256 个工作者),本地到 S3,大约 4,000 个对象/秒(小对象 1-20 kb)。
S3sync 优化用于同步大量(超过数百万)对象。未针对传输少量(小于工作器大小:默认 16)大对象进行优化。(当然,也可以用于此目的。)本地到 S3,
c6a.large(2vCPU, 4GB)
100,000 个对象(1-20 kb 对象),1.00 GiB,40.76 MiB/秒,25 秒,所有对象均进行端到端完整性验证(MD5、SHA256)。[ec2-user@ip-foo ~]$ time ./s3sync --worker-size 256 --additional-checksum-algorithm SHA256 ~/testdata s3://5786c9fb-e2a7-407c-814a-84ed9590e35c/testdata/ 1.00 GiB | 40.76 MiB/sec, transferred 100000 objects | 3,980 objects/sec, etag verified 100000 objects, checksum verified 100000 objects, deleted 0 objects, skipped 0 objects, error 0 objects, warning 0 objects, duration 25 seconds real 0m25.142s user 0m28.928s sys 0m19.969s
S3 到本地,
c6a.large(2vCPU, 4GB)
100,000 个对象(1-20 kb 对象),1.00 GiB,24.70 MiB/秒,41 秒,所有对象均进行端到端完整性验证(MD5、SHA256)。[ec2-user@ip-foo ~]$ time ./s3sync --worker-size 256 --enable-additional-checksum s3://5786c9fb-e2a7-407c-814a-84ed9590e35c/ . 1.00 GiB | 24.70 MiB/sec, transferred 100000 objects | 2,412 objects/sec, etag verified 100000 objects, checksum verified 100000 objects, deleted 0 objects, skipped 0 objects, error 0 objects, warning 0 objects, duration 41 seconds real 0m41.471s user 0m47.906s sys 0m25.662s
本地到S3,
c6a.large(2vCPU, 4GB)
16个对象(6GiB对象),96.00 GiB,208.92 MiB/sec,8分钟,所有对象都经过端到端完整性验证(MD5,SHA256)。[ec2-user@ip-foo ~]$ time ./s3sync --additional-checksum-algorithm SHA256 ~/testdata s3://b2f99466-6665-4b8e-8327-a7bdabff8a10/testdata/ 96.00 GiB | 208.92 MiB/sec, transferred 16 objects | 0 objects/sec, etag verified 16 objects, checksum verified 16 objects, deleted 0 objects, skipped 0 objects, error 0 objects, warning 0 objects, duration 8 minutes real 7m50.571s user 10m40.117s sys 4m28.771s
S3到本地,
c6a.large(2vCPU, 4GB)
16个对象(6GiB对象),96.00 GiB,41.67 MiB/sec,39分钟,所有对象都经过端到端完整性验证(MD5,SHA256)。
在S3到本地的场景中,ETag/附加校验和验证成本较高。因为s3sync需要从本地磁盘读取整个下载对象来计算ETag/校验和。
您可以使用--disable-etag-verify
来禁用它。[ec2-user@ip-foo ~]$ time ./s3sync --enable-additional-checksum s3://b2f99466-6665-4b8e-8327-a7bdabff8a10 . 96.00 GiB | 41.67 MiB/sec, transferred 16 objects | 0 objects/sec, etag verified 16 objects, checksum verified 16 objects, deleted 0 objects, skipped 0 objects, error 0 objects, warning 0 objects, duration 39 minutes real 39m19.267s user 11m3.478s sys 8m35.242s
S3到本地,
c6a.large(2vCPU, 4GB)
16个对象(6GiB对象),96.00 GiB,125.67 MiB/sec,13分钟,不进行端到端完整性验证。
当您需要快速传输大量数据时,这可能会很有用。[ec2-user@ip-foo ~]$ time ./s3sync --disable-etag-verify s3://b2f99466-6665-4b8e-8327-a7bdabff8a10 . 96.00 GiB | 125.67 MiB/sec, transferred 16 objects | 0 objects/sec, etag verified 0 objects, checksum verified 0 objects, deleted 0 objects, skipped 0 objects, error 0 objects, warning 0 objects, duration 13 minutes real 13m2.278s user 3m54.569s sys 9m40.960s
-
多种方式
- 本地到S3
- S3到本地
- S3到S3
-
支持任何对象大小
s3sync可以处理任何大小的对象。从0字节到5TiB。 -
内存使用量低
内存使用量低,不依赖于对象大小或对象数量。它主要取决于工作进程数量和多部分块大小。
默认设置使用大约500MB的最大内存,无论对象大小或对象数量。 -
增量传输(正常传输)
只传输已修改的对象。如果对象的修改时间晚于目标对象,则传输该对象。增量传输可以从最后一个检查点恢复。检查修改对象非常快。 -
基于ETag(MD5或等效)的增量传输
如果您想使用基于ETag的增量传输,可以使用--check-etag
选项。
它比较源对象的ETag与目标对象的ETag,并只传输已修改的对象。
ETag不总是MD5。如果对象使用多部分上传上传,ETag不是MD5散列,而是这些连接值的MD5散列。默认设置使用multipart-threshold
(默认:8MiB)和multipart-chunksize
(默认:8MiB),并根据这些值计算每个部分的ETag。
使用--auto-chunksize
,s3sync可以根据正确的块大小计算和比较每个部分和整个对象的ETag。如果您不知道正确的块大小,这很有用。但需要更多的API调用和时间。请参阅--auto-chunksize
选项。
使用--dry-run
,您可以在不传输对象的情况下检查同步状态。
使用--json-tracing
,您可以以JSON格式输出跟踪信息。
s3sync -vv --dry-run --check-etag --auto-chunksize testdata/ s3://XXXX/testdata/
2024-06-15T01:23:50.632072Z DEBUG object filtered. ETags are same. name="HeadObjectChecker" source_e_tag="da6a0d097e307ac52ed9b4ad551801fc" target_e_tag="da6a0d097e307ac52ed9b4ad551801fc" source_last_modified="2024-06-15T01:01:48.687+00:00" target_last_modified="2024-06-15T01:02:27+00:00" source_size=6291456 target_size=6291456 key="dir1/data2.dat"
2024-06-15T01:23:50.675831Z DEBUG object filtered. ETags are same. name="HeadObjectChecker" source_e_tag="d126ef08817d0490e207e456cb0ae080-2" target_e_tag="d126ef08817d0490e207e456cb0ae080-2" source_last_modified="2024-06-15T01:01:48.685+00:00" target_last_modified="2024-06-15T01:02:27+00:00" source_size=9437184 target_size=9437184 key="dir1/data1.dat"
2024-06-15T01:23:50.683417Z DEBUG object filtered. ETags are same. name="HeadObjectChecker" source_e_tag="ebe97f2a4738800fe71edbe389c000a6-2" target_e_tag="ebe97f2a4738800fe71edbe389c000a6-2" source_last_modified="2024-06-15T01:01:48.690+00:00" target_last_modified="2024-06-15T01:02:27+00:00" source_size=12582912 target_size=12582912 key="dir1/data3.dat"
0 B | 0 B/sec, transferred 0 objects | 0 objects/sec, etag verified 0 objects, checksum verified 0 objects, deleted 0 objects, skipped 3 objects, error 0 objects, warning 0 objects, duration 0 seconds
- 基于附加校验和(SHA256/SHA1/CRC32/CRC32C)的增量传输
如果您使用带有附加校验和的Amazon S3,可以使用-check-additional-checksum
选项。
此选项比较源对象和目标对象的校验和,并只传输已修改的对象。它每个对象都需要额外的API调用。
使用--dry-run
,您可以在不传输对象的情况下检查同步状态。
使用--json-tracing
,您可以以JSON格式输出跟踪信息。
s3sync -vv --dry-run --check-additional-checksum SHA256 --additional-checksum-algorithm SHA256 testdata/ s3://XXXX/testdata/
2024-06-15T01:06:30.035362Z DEBUG object filtered. Checksums are same. name="HeadObjectChecker" checksum_algorithm="SHA256" source_checksum="tp2uVqFNGoMU7UBmTEAz6gpVDuomc+BN9CpmrGufryw=" target_checksum="tp2uVqFNGoMU7UBmTEAz6gpVDuomc+BN9CpmrGufryw=" source_last_modified="2024-06-15T01:01:48.687+00:00" target_last_modified="2024-06-15T01:02:27+00:00" source_size=6291456 target_size=6291456 key="dir1/data2.dat"
2024-06-15T01:06:30.041354Z DEBUG object filtered. Checksums are same. name="HeadObjectChecker" checksum_algorithm="SHA256" source_checksum="zWifJvli3SaQ9LZtHxzpOjkUE9x4ovgJZ+34As/NMwc=-2" target_checksum="zWifJvli3SaQ9LZtHxzpOjkUE9x4ovgJZ+34As/NMwc=-2" source_last_modified="2024-06-15T01:01:48.685+00:00" target_last_modified="2024-06-15T01:02:27+00:00" source_size=9437184 target_size=9437184 key="dir1/data1.dat"
2024-06-15T01:06:30.086455Z DEBUG object filtered. Checksums are same. name="HeadObjectChecker" checksum_algorithm="SHA256" source_checksum="MyTyVYvNthXQp4fOwy/IzuKgFGIzIHpP1DiTfjZoV0Q=-2" target_checksum="MyTyVYvNthXQp4fOwy/IzuKgFGIzIHpP1DiTfjZoV0Q=-2" source_last_modified="2024-06-15T01:01:48.690+00:00" target_last_modified="2024-06-15T01:02:27+00:00" source_size=12582912 target_size=12582912 key="dir1/data3.dat"
0 B | 0 B/sec, transferred 0 objects | 0 objects/sec, etag verified 0 objects, checksum verified 0 objects, deleted 0 objects, skipped 3 objects, error 0 objects, warning 0 objects, duration 0 seconds
-
版本支持
可以同步对象的所有版本。(除中间删除标记外) -
标签支持
可以同步对象的所有标签。 -
元数据支持
可以同步对象的所有元数据。例如,Content-Type
,Content-Encoding
,Cache-Control
,用户定义的元数据等。 -
灵活过滤
正则表达式,ContentLength
,LastModified
。 -
按对象进行速率限制,带宽
例如,您可以限制每秒传输的对象数量为1,000个,带宽为100MB/sec。 -
--delete
支持
在同步过程中,如果目标中存在而源中不存在的对象将被删除。
由于这可能会导致数据丢失,请在使用--dry-run
选项进行测试后再进行。 -
S3 兼容存储支持
s3sync 使用 Rust 的 AWS SDK。s3sync 可以与任何 S3 兼容存储一起使用。
最初,它是为了 S3 兼容而开发的。 -
多平台支持
所有功能均支持在受支持的平台上。
要求
- 64位 Linux (内核 3.2 或更高版本,glibc 2.17 或更高版本)
- 64位 Windows 10 或更高版本
- MacOS 11.0 或更高版本
许可证
本项目采用 Apache-2.0 许可证。
安装
从 发布 下载最新二进制文件
二进制文件在上述平台上运行,无需任何依赖项。
您也可以按照以下说明从源代码构建。
安装 Rust
请参阅 https://rust-lang.net.cn/tools/install
构建
s3sync 需要 Rust 1.76 或更高版本。
cargo install s3sync --path .
用法
使用 s3sync 需要AWS凭证。支持 IAM 角色、AWC CLI 配置文件、环境变量等。
默认情况下,s3sync 从许多位置获取访问凭证(IAM 角色、环境变量等)。
有关更多信息,请参阅 指定您的凭证和默认区域
您也可以在命令行选项或环境变量中指定凭证。
区域是必需的。可以在配置文件、环境或命令行选项中指定。
前缀是可选的。如果未指定,则将同步整个桶。
如果指定了前缀,则 s3sync 不会自动添加尾随斜杠。
例如,如果您将 s3://bucket-name/prefix
作为目标,则 s3sync 将同步名为 foo
的源对象到 s3://bucket-name/prefixfoo
。
如果您将 s3://bucket-name/prefix/
作为目标,则 s3sync 将同步名为 foo
的源对象到 s3://bucket-name/prefix/foo
。
如果您是第一次使用 s3sync,您应该使用 --dry-run
选项来测试操作。
有关所有选项,请参阅 s3sync --help
本地到S3
s3sync /path/to/local s3://bucket-name/prefix
S3到本地
s3sync s3://bucket-name/prefix /path/to/local
S3到S3
s3sync s3://bucket-name1/prefix s3://bucket-name2/prefix
直接指定访问密钥和秘密访问密钥
s3sync --source-access-key foo --source-secret-access-key bar s3://bucket-name/prefix /path/to/local
AWS CLI 配置文件支持
s3sync --source-profile foo --target-profile bar s3://bucket-name1/prefix s3://bucket-name2/prefix
指定区域
s3sync --source-profile foo --source-region ap-northeast-1 s3://bucket-name1/prefix s3://bucket-name2/prefix
版本控制
s3sync --enable-versioning s3://bucket-name1/prefix s3://bucket-name2/prefix
自定义端点
您可以指定 S3 兼容存储端点。
警告:如果您使用自定义端点,您可能需要指定 --source-force-path-style
或 --target-force-path-style
。
s3sync --target-endpoint-url https://foo --target-force-path-style /path/to/local s3://bucket-name/prefix
干运行
s3sync --dry-run s3://bucket-name1/prefix s3://bucket-name2/prefix
--delete
s3sync --delete s3://bucket-name1/prefix s3://bucket-name2/prefix
关于端到端对象完整性检查的说明
s3sync 对源对象计算 ETag(MD5) 校验和,并将其与目标中的校验和进行比较。
可选地,S3sync 还可以计算和比较每个对象的附加校验和 (SHA256/SHA1/CRC32/CRC32C)。
ETag 不总是 MD5。如果对象使用分片上传,则 ETag 不是 MD5 摘要,而是这些连接值的 MD5 摘要。
即使使用分片上传,s3sync 也可以计算并比较每个部分和整个对象的 ETag(使用 --auto-chunksize
)。
如果对象使用 SSE-KMS/SSE-C 上传,则 ETag 不是 MD5。在这种情况下,s3sync 无法计算和比较对象的校验和。
s3sync始终使用以下元素来验证对象的完整性。
Content-MD5
头(端到端API级别完整性检查)Amazon S3建议使用Content-MD5
头进行端到端完整性检查。
注意:Amazon S3 Express One Zone存储类不支持Content-MD5
头。x-amz-content-sha256
认证头
此头是请求负载的SHA256摘要。
注意:一些S3兼容存储会忽略此头。- 附加校验和算法(可选)
即使对象使用SSE-KMS/SSE-C上传,s3sync也可以计算和比较附加的校验和算法。
注意:截至编写本文档时,几乎没有S3兼容存储支持附加的校验和算法。 - TLS(如果未明确禁用)
多部分ETag不一定与源对象的ETag匹配。但有了上述元素,几乎可以安全地假设对象没有损坏。
使用--auto-chunksize
,s3sync可以计算和比较每个部分以及整个对象的ETag/校验和。
如果您想进行严格的完整性检查,请使用--auto-chunksize
,但它将需要更多的API调用和时间。
有关更多信息,请参阅https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
s3sync端到端对象完整性检查矩阵
在本地到S3或S3到本地的情况下,s3sync会将s3sync计算的本地ETags和附加校验与S3的ETags和附加校验进行比较。
在S3到S3的情况下,s3sync仅比较S3计算的ETags和附加校验。
如果对象未验证,s3sync将在终端中显示警告消息。
Amazon S3 Express One Zone存储类不支持ETag作为验证。但您可以使用附加校验和算法。
ETag(MD5摘要或等效):plain-text/SSE-S3
本地到S3 | S3到本地 | S3到S3 | |
---|---|---|---|
多部分对象 | 始终验证 | 尽可能验证(不使用--auto-chunksize )始终验证(使用 --auto-chunksize ) |
尽可能验证(不使用--auto-chunksize )始终验证(使用 --auto-chunksize ) |
单个对象 | 始终验证 | 始终验证 | 始终验证 |
ETag(MD5摘要或等效):SSE-KMS/SSE-C
本地到S3 | S3到本地 | S3到S3 | |
---|---|---|---|
多部分对象 | 不验证 | 不验证 | 不验证 |
单个对象 | 不验证 | 不验证 | 不验证 |
附加校验和:plain-text/SSE-S3/SSE-KMS/SSE-C
本地到S3 | S3到本地 | S3到S3 | |
---|---|---|---|
多部分对象 | 始终验证 | 始终验证 | 尽可能验证(不使用--auto-chunksize )始终验证(使用 --auto-chunksize ) |
单个对象 | 始终验证 | 始终验证 | 始终验证 |
注意:要启用端到端附加校验和验证,必须指定--enable-additional-checksum
。
注意:在S3到S3的情况下,源和目标必须使用相同的校验和算法。
关于--auto-chunksize
如果指定了--auto-chunksize
,s3sync将自动计算多部分上传的正确块大小。
这是通过带有partNumber
参数的HeadObject
API完成的。--auto-chunksize
需要额外的API调用(每个部分1个API调用)。
请记住,并非所有S3兼容存储都支持带有partNumber
参数的HeadObject
API。
如果S3兼容存储不支持它,s3sync将在终端中显示警告消息。
见:https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html#API_HeadObject_RequestSyntax
警告:在S3到S3的情况下,如果源对象使用大块大小上传,s3sync将消耗大量内存。
增量传输
s3sync只传输已修改的对象。它检查LastModified
时间戳。
如果指定了--check-size
,s3sync只检查对象的大小。
首先,增量传输列出目标中的所有对象。
然后,s3sync比较对象并只传输已修改的对象。
因此,增量传输需要时间才能开始,特别是对于大量现有目标对象。
在我的环境中,Amazon S3每10,000个对象列表对象大约需要1秒钟。(这取决于远程存储。)
如果目标对象很少,增量传输会立即开始,无论源对象的数量。
版本支持
s3sync使用用户定义的元数据来检查对象的版本。
如果指定了--enable-versioning
,s3sync会将用户定义的元数据添加到对象中。如果您传输到现有存储桶,由于缺少用户定义的元数据,s3sync将传输对象的全部版本。
通常,您应该在传输到新存储桶时使用--enable-versioning
。
中间删除标记不会同步。最新版本删除标记会同步。
用户定义的元数据:s3sync_origin_version_id
,s3sync_origin_last_modified
元数据支持
以下S3对象的元数据会同步。
- 内容类型
- 内容编码
- 缓存控制
- 内容处置
- 内容语言
- 过期时间
- 用户定义的元数据
SSE支持
以下SSE被支持。
- SSE-S3
- SSE-KMS
- SSE-C
内存使用
s3sync为每个工作进程消耗内存。
对于单个对象,大约为average size of the object * worker-size(默认 16) * 2
。
对于分块对象,大约为multipart chunksize(默认 8MiB) * worker-size(默认 16) * 2
。
因为s3sync使用增量传输,它会列出目标存储桶中的所有对象并将结果存储在内存中。
因此,如果目标存储桶中对象数量很多,s3sync可能会消耗大量内存。
如果您不使用--delete
选项,s3sync将消耗大约每1,000,000个目标对象100MB。
如果您使用--delete
选项,s3sync将消耗大约每1,000,000个目标对象250MB。
为了减少内存使用,您可以通过前缀将目标对象分割并多次运行s3sync,或指定--remove-modified-filter
和--head-each-target
选项。
您也可以通过过滤器将目标对象分割并多次运行s3sync。
--head-each-target
选项会对每个源对象调用HeadObject
API,但这是内存使用和API调用之间的权衡。
S3权限
s3sync需要以下权限。
源存储桶
"Action": [
"s3:GetBucketVersioning",
"s3:GetObject",
"s3:GetObjectAttributes",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionAttributes",
"s3:GetObjectVersionTagging",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3express:CreateSession",
]
目标存储桶
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectTagging",
"s3:GetBucketVersioning",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:PutObject",
"s3:PutObjectTagging",
"s3express:CreateSession"
]
高级选项
--worker-size
工作进程的数量。很多工作进程可以提高性能。但这也增加了CPU和内存的使用。
默认:16
如果您指定了很多工作进程,您可能需要增加打开文件的数量。
例如,在Linux上:ulimit -n 8192
--force-retry-count
s3sync会强制重试AWS Rust SDK无法重试的操作。
例如,在connection reset by peer
的情况下,s3sync将重试操作。
--remove-modified-filter
如果您想覆盖现有对象,指定此选项。
--check-etag
对于增量传输,s3sync会将源对象的ETag与目标对象的ETag进行比较。如果ETag不同,s3sync会传输该对象。
使用--auto-chunksize
,s3sync可以计算并比较每个部分和整个对象的ETag。如果你不知道正确的块大小,这将很有用。但这也需要更多的API调用和时间。
如果双方都是S3,s3sync只比较源对象与目标对象的ETag。如果任一方不是S3,s3sync会计算本地对象的ETag。
你需要了解Amazon S3的ETag。
参见:https://docs.aws.amazon.com/AmazonS3/latest/API/API_Object.html
--put-last-modified-metadata
此选项添加用户定义的元数据,包含源对象的最后修改时间。
用户定义的元数据:s3sync_origin_last_modified
--additional-checksum-algorithm
如果你想要使用额外的校验和进行上传,指定算法。
--enable-additional-checksum
如果你想要使用额外的校验和进行下载,指定此选项。
警告:即使对象是使用额外的校验和上传的,如果没有此选项,s3sync不会验证额外的校验和。
--https-proxy
你可以指定https的代理服务器。
支持代理认证。例如:http(s)://user:password@proxy:port
。
--disable-multipart-verify
当使用分块上传上传对象时,其ETag可能不会与目标对象的ETag匹配。
这可能发生在上传对象时使用的块大小不同的情况下。如果你不知道正确的块大小,你可以使用此选项禁用验证。
你可以使用--multipart-threshold
和--multipart-chunksize(默认:8MiB)指定块大小。
如果允许额外的API调用,你可以使用--auto-chunksize
。
但是请注意,并非所有与S3兼容的存储都支持此选项。
警告:在S3到S3的情况下,如果源对象使用大块大小上传,s3sync将消耗大量内存。
-v
s3sync使用tracing-subscriber进行跟踪。
更多出现次数会增加详细程度。
例如,-v
:显示info
,-vv
:显示debug
,-vvv
:显示trace
默认情况下,s3sync显示警告和错误消息。
info
和debug
消息对于故障排除很有用。trace
消息对于调试很有用。
除了-v
之外,您还可以使用RUST_LOG
环境变量。
--aws-sdk-tracing
为了故障排除,s3sync可以输出Rust的AWS SDK跟踪信息。
除了--aws-sdk-tracing
之外,您还可以使用RUST_LOG
环境变量。
--filter-include-regex
,--filter-exclude-regex
你可以指定正则表达式来过滤源对象。
正则表达式语法与regex相同。
--auto-complete-shell
你可以输出用于完成命令的shell脚本。
s3sync --auto-complete-shell bash
-h/--帮助
有关更多信息,请参阅s3sync -h
。
依赖项
~72MB
~1.5M SLoC