中文文档

mc mirror

语法

mc mirror 命令用于将内容同步到 MinIO 部署,类似于 rsync 工具。 mc mirror 支持将文件系统、MinIO 部署和其他 S3 兼容主机作为同步源。

备注

mc mirror 命令仅同步当前对象,不包含任何版本信息或元数据。 为了同步对象的版本历史和元数据,可以考虑使用 mc replicate 来进行桶复制( bucket replication )或使用 mc admin replicate 来进行站点复制( site replication )。

以下命令将本地文件系统目录中的内容同步到 mydata 桶中的 myminio MinIO 部署。

mc mirror --watch ~/mydata myminio/mydata

该命令 “监控” 本地文件系统中添加或删除文件的操作,并将这些操作同步到 MinIO,直到显式终止。

mc mirror --watch 将本地文件系统中更改的文件更新到 MinIO( 请参阅 --overwrite )。 --watch 不会删除 MinIO 中不在本地文件系统中的其他文件( 请参阅 --remove )。

该命令具有以下语法:

mc [GLOBALFLAGS] mirror                            \
                 [--active-active]                 \
                 [--attr "string"]                 \
                 [--checksum "value"]              \
                 [--disable-multipart]             \
                 [--dry-run]                       \
                 [--enc-kms "string"]              \
                 [--enc-s3 "string"]               \
                 [--enc-c "string"]                \
                 [--exclude "string"]              \
                 [--exclude-bucket "string"]       \
                 [--exclude-storageclass "string"] \
                 [--limit-download string]         \
                 [--limit-upload string]           \
                 [--md5]                           \
                 [--monitoring-address "string"]   \
                 [--newer-than "string"]           \
                 [--older-than "string"]           \
                 [--overwrite]                     \
                 [--preserve]                      \
                 [--region "string"]               \
                 [--remove]                        \
                 [--retry]                         \
                 [--skip-errors]                   \
                 [--storage-class "string"]        \
                 [--summary]                       \
                 [--watch]                         \
                 SOURCE                            \
                 TARGET
  • 方括号 [] 表示可选参数。

  • 参数在同一行表示它们是相互依赖的。

  • 使用管道 | 运算符分隔的参数是相互排斥的。

在终端/壳中运行命令之前,将示例复制到文本编辑器中并按需进行修改。

参数

SOURCE
:required:

要同步到 TARGET S3 主机的文件或对象。

对于 S3 兼容主机上的对象,请将对象的路径指定为 ALIAS/PATH ,其中:

  • ALIAS 是已配置的 S3 兼容主机的 alias

  • PATH 是桶或对象的路径。如果指定了一个桶,mc mirror 同步该桶中的所有对象。

mc mirror [FLAGS] play/mybucket/ myminio/mybucket

对于文件系统的文件,指定文件或目录的完整文件系统路径:

mc mirror [FLAGS] ~/data/ myminio/mybucket

如果指定的是一个目录,mc mirror 会同步该目录中的所有文件。

TARGET
Required

mc mirror 同步源对象的完整目标桶路径。将 TARGET 指定为 ALIAS/PATH ,其中:

  • ALIAS 是配置好的 S3 兼容宿主的 alias并且

  • PATH 是桶的路径。

mc mirror SOURCE play/mybucket

mc mirror 在将内容同步到 TARGET 桶时,会使用来自 SOURCE 的对象或文件名。

--active-active
Optional

在两个站点之间建立主动-主动镜像活动。 必须在每个站点重复执行该命令。

例如:

在 A 站点,从 A 镜像到 B

mc mirror --active-active siteA siteB

在 B 站点,从 B 镜像到 A

mc mirror --active-active siteB siteA
--attr
Optional

为镜像的对象添加自定义元数据。指定键值对作为 KEY=VALUE\; 的形式。 例如, --attr key1=value1\;key2=value2\;key3=value3

--checksum
Optional

在 RELEASE.2024-10-02T08-27-28Z 版本加入.

为已上传的对象添加校验和。

Valid values are: - MD5 - CRC32 - CRC32C - SHA1 - SHA256

该标志需要服务器尾随标头并与 AWS 或 MinIO 目标配合使用。

--disable-multipart
Optional

禁用多部分上传,本次同步会话中不使用多部分上传。

--dry-run
Optional

执行模拟镜像操作。 使用此操作来测试 mc mirror 操作只会镜像所需的对象或桶。

--enc-kms

使用服务器端 SSE-KMS 加密 和客户端管理的密钥加密或解密对象。

该参数接受键值对,格式为 KEY=VALUE

KEY

对象的完整路径,即 alias/bucket/path/object.ext

您可以只指定顶层路径,以便对该路径中的所有操作使用单个加密密钥。

VALUE

指定外部 KMS 上的现有数据密钥。

有关创建数据密钥,请参阅 mc admin kms key create 参考。

例如:

--enc-kms "myminio/mybucket/prefix/object.obj=mybucketencryptionkey"

重复该参数可指定多个加密密钥。

指定一个前缀的路径,以便对该路径上的所有匹配对象进行加密:

--enc-kms "myminio/mybucket/prefix/=mybucketencryptionkey"
--enc-s3
Optional

使用服务器端 SSE-S3 加密 和 KMS 管理的密钥加密或解密对象。 将对象的完整路径指定为 alias/bucket/prefix/object

例如:

--enc-s3 "myminio/mybucket/prefix/object.obj"

您可以多次指定该参数,以表示要加密的不同对象:

--enc-s3 "myminio/mybucket/foo/fooobject.obj" --enc-s3 "myminio/mybucket/bar/barobject.obj"

指定一个前缀的路径,以便对该路径上的所有匹配对象进行加密:

--enc-s3 "myminio/mybucket/foo"
--enc-c
Optional

使用服务器端 SSE-C 加密 和客户端管理的密钥加密或解密对象。

该参数接受键值对,格式为 KEY=VALUE

KEY

对象的完整路径,即 alias/bucket/path/object.ext

您可以只指定顶层路径,以便对该路径中的所有操作使用单个加密密钥。

VALUE

指定用于 SSE-C 加密的 32 字节 RawBase64 编码密钥 64 字节十六进制编码密钥。

原始 Base64 编码 拒绝 = 填充键。 省略填充或使用支持 RAW 格式的 Base64 编码器。

  • KEY - 对象的完整路径为 alias/bucket/path/object

  • VALUE - 用于加密对象的 32 字节 RAW Base64 编码数据密钥。

例如:

# RawBase64-Encoded string "mybucket32byteencryptionkeyssec"
--enc-c "myminio/mybucket/prefix/object.obj=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"

重复该参数可指定多个加密密钥。

指定一个前缀的路径,以便对该路径上的所有匹配对象进行加密:

--enc-c "myminio/mybucket/prefix/=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"

备注

MinIO 强烈建议不要在生产工作负载中使用 SSE-C 加密。 通过 --enc-kms 参数使用 SSE-KMS 或通过 --enc-s3 参数使用 SSE-S3。

--exclude
Optional

排除 SOURCE 路径中与指定对象 名称模式 匹配的对象。

--exclude-bucket
Optional

在 mc 版本加入: RELEASE.2024-03-03T00-13-08Z

排除 SOURCE 路径中与指定存储桶 名称模式 匹配的存储桶。

--exclude-storageclass
Optional

SOURCE 上排除具有指定存储类别的对象。 你可以在这个标志上多次使用,在一次命令中排除多个存储类别的对象。

使用此选项来排除具有需要重新激活或恢复的对象的存储类,例如从 AWS S3 桶迁移时,其中一些对象具有 GLACIERDEEP_ARCHIVE 存储类。

--limit-download
Optional

将客户端的下载速率限制在指定的KiB/s、MiB/s或GiB/s之内。 只影响运行MinIO客户端的本地设备的下载。 有效的单位包括:

  • B for bytes

  • K for kilobytes

  • M for megabytes

  • G for gigabytes

  • T for terabytes

  • Ki for kibibytes

  • Mi for mibibytes

  • Gi for gibibytes

  • Ti for tebibytes

例如,如果要将下载速率限制在不超过1 GiB/s,可以使用以下命令:

--limit-download 1G

如果未指定,MinIO 将使用不限下载速率。

--limit-upload
:optional:

将客户端的上传速率限制在规定的KiB/s、MiB/s或GiB/s以下。 这只影响运行MinIO Client的本地设备的上传。 有效的单位包括:

  • B for bytes

  • K for kilobytes

  • M for megabytes

  • G for gigabytes

  • T for terabytes

  • Ki for kibibytes

  • Mi for mibibytes

  • Gi for gibibytes

  • Ti for tebibytes

例如,要将上传速率限制为不超过1 GiB/s,可以使用以下方法:

--limit-upload 1G

如果未指定,MinIO将使用无限上传速率。

--md5
Optional

强制所有上传计算MD5校验和。

--monitoring-address
Optional

创建一个 Prometheus 端点用于监控镜像活动。 指定创建抓取端点的本地网络适配器和端口地址。 默认为 localhost:8081 )。

--newer-than
Optional

镜像比指定天数更新的对象。 以 #d#hh#mm#ss 格式指定字符串。 例如: --newer-than 1d2hh3mm4ss

--older-than
Optional

镜像比指定时间限制更旧的对象。 以 #d#hh#mm#ss 格式指定字符串。 例如: --older-than 1d2hh3mm4ss

默认为 0 (所有对象)。

--overwrite
Optional

TARGET 上覆盖对象。

例如,考虑一个正在运行的 mc mirror --overwrite 命令,它将源(Source)的内容同步到目标(Destination)。

如果源(Source)上的某个对象发生变化, mc mirror --overwrite 命令会同步并覆盖目标(Destination)上与之匹配的任何文件。

如果没有使用 --overwrite 选项,如果目标(Destination)上已经存在一个与源(Source)上相同的对象,镜像过程将无法同步该对象,导致同步失败。 mc mirror 命令在日志中记录错误,并继续同步其他对象。

--preserve, a
Optional

保留 mc mirror SOURCE 的文件系统属性和桶策略规则在 mc mirror TARGET 上。

--region
Optional

在目标上创建新存储桶时指定 string 区域。

默认为 us-east-1

--remove
Optional

删除目标上不存在于源上的对象。

使用 --remove 标志以确保源和目标上有相同的对象列表。

例如,对象 A、B 和 C 存在于源上。 目标上存在对象 C、D 和 E。

当运行 mc mirror --remove 命令时,对象 A 和 B 同步到目标上,而对象 D 和 E 从目标上被删除。 由于对象 C 已经同时存在于源和目标上,所以没有任何对象从源移动到目标。

在执行此操作后,源和目标上只存在对象 A、B 和 C。对象 D 和 E 已被从目标上删除。

mc mirror --remove 命令不会验证对象 C 在源和目标上的内容是否相同,它只检查是否在两个位置上都存在一个名为 C 的对象。 为了确保源和目标上的对象在名称 内容上都匹配,请使用 mc mirror --overwritemc mirror --watch 命令。

在 RELEASE.2023-05-04T18-10-16Z 版本发生变更: 如果目标路径是一个不存在的地方文件系统目录, mc mirror --remove 将会返回一个错误。

在早期版本中,指定 /path/to/directory 会导致如果 directory 不存在,则删除 /path/to 文件夹。

--retry
Optional

在镜像过程中出现错误时,对每个出错的对象进行重试。

--storage-class, sc
Optional

mc mirror TARGET 上为新对象设置存储类。

有关 S3 存储类别的更多信息,请参阅 Amazon 官方文档:Storage Classes

--skip-errors
Optional

在 mc 版本加入: RELEASE.2024-01-28T16-23-14Z

在镜像过程中跳过任何产生错误的对象。

--summary
Optional

完成后,输出已同步数据的摘要。

--watch, w
Optional

使用 --watch 标志可以将源对象镜像到目标,同时目标可能还包含源中不存在的其他对象。

  • --watch 持续从源同步文件到目标,直到明确终止

  • 目标上可能存在源上不存在的文件

  • --watch 在目标上覆盖对象,如果源上存在匹配的对象,就像 --overwrite 标志一样。

默认为 0 (所有对象)。

例如,被监视的源上存在对象 A 和 B。 在监视的目标上存在对象 A、B 和 C。

客户端将对象 D 写入源,并移除了对象 B。

在操作之后,源上存在对象 A 和 D。 在目标上存在对象 A、C 和 D。

全局标记

此命令支持任何 全局标志

示例

将本地目录镜像到 S3 兼容主机

使用 :mc:`mc mirror`命令将文件系统中的文件镜像到S3兼容主机:

mc mirror FILEPATH ALIAS/PATH
  • FILEPATH 替换为要镜像的目录的完整文件路径。

  • ALIAS 替换为配置好的S3兼容主机的 alias

  • PATH 替换为目标桶的名称。

将本地目录持续镜像到 S3 兼容主机

使用 mc mirror 命令与 --watch 选项(在 macOS 上是 --watch )来自动持续地将文件系统中的文件镜像到一个支持 S3 的主机上。在这种情况下,文件系统中的任何添加或删除的对象都会相应地在主机上进行添加或删除操作:

mc mirror --watch FILEPATH ALIAS/PATH
  • FILEPATH 替换为要镜像的目录的完整文件路径。

  • ALIAS 替换为配置好的 S3 兼容主机的 alias

  • PATH 替换为目标桶的名称。

将 S3 存储桶持续镜像到 S3 兼容主机

使用 mc mirror 命令与 --watch 选项(在 macOS 上是 --watch)来自动持续地将一个 S3 兼容主机上的桶中的对象镜像到另一个 S3 兼容主机上,其中桶中添加或删除的对象会相应地在目标主机上进行添加或删除操作。

mc mirror --watch SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • SRCALIAS 替换为配置好的 S3 兼容主机的 alias

  • SRCPATH 替换为要镜像的桶。

  • TGTALIAS 替换为配置好的 S3 兼容主机的 alias

  • TGTPATH 替换为目的地桶。

将对象从 AWS S3 镜像到 MinIO 跳过 GLACIER 中的对象

使用 mc mirror 命令并加上 --exclude-storageclass 选项,可以将从 AWS S3 镜像的对象到 MinIO,同时不包括存储在 GLACIER 或 DEEP_ARCHIVE 存储中的对象。

mc mirror --exclude-storageclass GLACIER  \
   --exclude-storageclass DEEP_ARCHIVE SRCALIAS/SRCPATH TGALIAS/TGPATH
  • SRCALIAS 替换为配置好的 S3 主机的一个 alias

  • SRCPATH 替换为要镜像的桶。

  • TGTALIAS 替换为配置好的 S3 主机的一个 alias

  • TGTPATH 替换为目的地桶。

行为

镜像在失败的对象上继续进行

如果目标上已经存在同名对象,MinIO 会输出一个关于重复对象的错误。 在遇到错误后, mc mirror 会继续将从源地址到目标地址的其他对象进行镜像操作。

MinIO 在删除对象时会修剪空的前缀。

mc mirror --watch 命令持续同步源目标和目标目标上添加和删除的对象。 这包括如果对象在源上被删除,自动在目标上删除相同对象。

为了使源上的对象更新也反映在目标上,请使用 –overwrite 选项。 为了从目标中删除那些在源上不存在的对象,请使用 –remove 选项。

mc mirror --watch 依赖于 mc 删除 API 来删除对象。 在删除存储桶前缀中的最后一个对象时,mc 还会递归地删除前缀中的每个空部分,直到存储桶根目录。 mc 只对作为对象写入操作一部分 隐式 创建的 前缀应用递归删除 - 也就是说,前缀不是使用如 mc mb 的显式目录创建命令创建的。

例如, 假设有一个名为 photos 的存储桶,其包含以下对象前缀:

  • photos/2021/january/myphoto.jpg

  • photos/2021/february/myotherphoto.jpg

  • photos/NYE21/NewYears.jpg

photos/NYE21 是使用 mc mb 显式创建的*唯一*前缀。 所有其他前缀都是作为写入对象的一部分 隐式 创建的 位于该前缀。

如果一个 mc 命令删除了 myphoto.jpg , 删除 API 会自动删除空的前缀 /january 。 如果后续的 mc 命令删除了 myotherphoto.jpg , 删除 API 会自动删除 /february 前缀 以及 现在为空的 前缀 /2021 。如果一个 mc:mc 命令删除了 NewYears.jpg/NYE21 前缀保持不变,因为它是由 显式 创建的。

如果使用 mc mirror --watch 对文件系统进行操作, mc 会通过递归删除空目录路径直到根目录来应用相同的行为。 然而,mc 的删除 API 无法区分显式创建的目录路径 和隐式创建的目录路径。如果 mc mirror --watch 删除了 文件系统路径中的最后一个对象,mc 在删除操作 过程中会递归地删除该路径内所有的空目录,直到根目录。

S3兼容性

mc 命令行工具是为了与 AWS S3 API 兼容而构建的,并且已经过测试, 以确保在与 MinIO 和 AWS S3 配合使用时,功能和行为符合预期。

MinIO 不对其他 S3 兼容服务提供任何保证,因为它们的 S3 API 实现是 未知的,因此不受支持。尽管 mc 命令 可能 如文档中所 述工作,但任何此类使用都是您自己的风险。

Join Slack 商业支持购买咨询