数据同步
juicefs sync 是强大的数据同步工具,可以在所有支持的存储之间并发同步或迁移数据,包括对象存储、JuiceFS、本地文件系统,你可以在这三者之间以任意方向和搭配进行数据同步。除此之外,还支持同步通过 SSH 访问远程目录、HDFS、WebDAV 等,同时提供增量同步、模式匹配(类似 rsync)、分布式同步等高级功能。
混用社区版和企业版客户端
juicefs sync 功能的代码在社区版和企业版之间共享代码,因此即便交叉混用不同版本的 JuiceFS 客户端,sync 命令也能正常工作——除了一个特例,就是使用 jfs:// 协议头的情况。社区版和企业版客户端有着不同的元数据引擎实现,因此如果用到了 jfs:// 协议头,则不能混用不同版本的客户端。
juicefs sync 用法如下:
juicefs sync [command options] SRC DST
# 从 OSS 同步到 S3
juicefs sync oss://ACCESS_KEY:[email protected] s3://mybucket.s3.us-east-2.amazonaws.com
# 从 S3 直接同步到 JuiceFS
juicefs sync s3://mybucket.s3.us-east-2.amazonaws.com/ jfs://VOL_NAME/
# 拷贝所有以 .gz 结尾的文件
juicefs sync --match-full-path --include='**.gz' --exclude='*' s3://xxx jfs://VOL_NAME/
# 拷贝不以 .gz 结尾的所有文件
juicefs sync --match-full-path --exclude='**.gz' s3://xxx/ jfs://VOL_NAME/
# 拷贝所有文件,但忽略名为 tmpdir 的子目录
juicefs sync --match-full-path --exclude='**/tmpdir/**' s3://xxx/ jfs://VOL_NAME/
# 将 s3 的 /a 目录拷贝到 JuiceFS 文件系统,但是忽略 /a/b 目录下的内容
juicefs sync --match-full-path --exclude='b/**' s3://a/ jfs://VOL_NAME/a/
模式匹配
你可以通过 --exclude 和 --include 来包含或排除要同步的文件路径。如果不提供任何规则,默认会同步所有扫描到的文件(默认就是 --include='*')。但如果需要使用 --include 实现只包含特定命名模式的文件,则必须同时使用 --exclude 来排除其他文件,具体请参考上方的示范命令。
试运行
当提供多个匹配模式时,取决于你具体使用的「过滤模式」,对于判断是否要同步某个文件可能会变得很困难。此时建议加上 --dry --debug 选项提前查看要同步的具体文件是否符合预期,如果不符合预期则需要调整匹配模式。
匹配规则
在 --exclude,--include 过滤器中传入的路径,会和 SRC 中的路径进行拼接,比方说如果需要将 S3 桶的 /a 目录拷贝到 JuiceFS 文件系统,但是忽略 /a/b 目录下的内容,正确的写法是:
juicefs sync --match-full-path --exclude='b/**' s3://a/ jfs://VOL_NAME/a/