文档

mc mirror

语法

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

注意

mc mirror 仅同步当前对象,不包含任何版本信息或元数据。要同步对象的版本历史记录和元数据,请考虑使用 mc replicate 进行 桶复制,或者使用 mc admin replicate 进行 站点复制

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

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
  • 方括号 [] 表示可选参数。

  • 共享一行参数是相互依赖的。

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

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

参数

SOURCE
必需

要同步到 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
必需

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

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

  • PATH 是桶的路径。

mc mirror SOURCE play/mybucket

mc mirror 在同步到 TARGET 桶时,使用 SOURCE 中的对象或文件名。

--active-active
可选

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

例如

在站点 A 上,从 A 镜像到 B

mc mirror --active-active siteA siteB

在站点 B 上,从 B 镜像到 A

mc mirror --active-active siteB siteA
--attr
可选

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

--checksum
可选

RELEASE.2024-10-02T08-27-28Z 版本中的新增功能。

将校验和添加到上传的对象。

有效值为:- MD5 - CRC32 - CRC32C - SHA1 - SHA256

该标志需要服务器尾部标头,并且适用于 AWS 或 MinIO 目标。

--disable-multipart
可选

禁用同步会话的多部分上传。

--dry-run
可选

执行模拟镜像操作。使用此操作测试 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
可选

使用服务器端 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
可选

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

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

KEY

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

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

VALUE

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

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

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

  • VALUE - 用于加密对象(s) 的 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
可选

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

--exclude-bucket
可选

mc: RELEASE.2024-03-03T00-13-08Z 版本中的新增功能

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

--exclude-storageclass
可选

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

使用此标志排除具有需要重新水合或恢复对象的存储类的对象,例如从 AWS S3 桶迁移,其中一些对象具有 GLACIERDEEP_ARCHIVE 存储类。

--limit-download
可选

限制客户端下载速率,使其不超过以 KiB/s、MiB/s 或 GiB/s 为单位的指定速率。这仅影响到 MinIO 客户端运行的本地设备的下载。有效的单位包括

  • B 代表字节

  • K 代表千字节

  • M 代表兆字节

  • G 代表吉字节

  • T 代表太字节

  • Ki 代表Kibibytes

  • Mi 代表Mibibytes

  • Gi 代表Gibibytes

  • Ti 代表Tebibytes

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

--limit-download 1G

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

--limit-upload
可选

限制客户端上传速率,使其不超过以 KiB/s、MiB/s 或 GiB/s 为单位的指定速率。这仅影响到 MinIO 客户端运行的本地设备的上传。有效的单位包括

  • B 代表字节

  • K 代表千字节

  • M 代表兆字节

  • G 代表吉字节

  • T 代表太字节

  • Ki 代表Kibibytes

  • Mi 代表Mibibytes

  • Gi 代表Gibibytes

  • Ti 代表Tebibytes

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

--limit-upload 1G

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

--md5
可选

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

--monitoring-address
可选

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

--newer-than
可选

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

--older-than
可选

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

默认为 0(所有对象)。

--overwrite
可选

覆盖 TARGET 上的对象。

例如,考虑一个活动的 mc mirror --overwrite,它将内容从 Source 同步到 Destination。

如果 Source 上的对象发生更改,mc mirror --overwrite 会同步并覆盖 Destination 上任何匹配的文件。

如果没有 --overwrite,如果对象已存在于 Destination 上,则镜像过程将无法同步该对象。 mc mirror 会记录错误并继续同步其他对象。

--preserve, a
可选

保留 SOURCE 上的文件系统属性和桶策略规则,这些规则位于 TARGET 上。

--region
可选

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

默认为 "us-east-1"

--remove
可选

删除 Target 上不存在于 Source 上的对象。

使用 --remove 标志使 Source 和 Target 上的对象列表相同。

例如,对象 A、B 和 C 存在于 Source 上。对象 C、D 和 E 存在于 Target 上。

运行 mc mirror --remove 时,对象 A 和 B 会同步到 Target,对象 D 和 E 会从 Target 中删除。由于对象 C 同时存在于两端,因此不会从 Source 移动到 Target。

操作结束后,Source 和 Target 上都只有对象 A、B 和 C。

mc mirror --remove 不会验证对象 C 的内容在 Source 和 Target 上是否相同,只会验证名为 C 的对象是否存在于两端。要确保 Source 和 Target 上的对象在名称和内容上都匹配,请使用 --overwrite--watch

Changed in version RELEASE.2023-05-04T18-10-16Z: mc mirror --remove 如果目标路径是本地文件系统目录并且不存在,则会返回错误。

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

--retry
可选

如果镜像过程中出现错误,请对每个出错的对象重试。

--storage-class, sc
可选

TARGET 上的新对象设置存储类别。

有关 S3 存储类别的更多信息,请参见 Amazon 文档中的 存储类别

--skip-errors
可选

New in version mc: RELEASE.2024-01-28T16-23-14Z

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

--summary
可选

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

--watch, w
可选

使用 --watch 标志将对象从 Source 镜像到 Target,其中 Target 也可能包含 Source 上不存在的额外对象。

  • --watch 会持续地将文件从 Source 同步到 Target,直到显式终止为止。

  • Target 上可能存在 Source 上不存在的文件。

  • --watch 会覆盖 Target 上的对象(如果 Source 上存在匹配项),类似于 --overwrite 标志。

默认为 0(所有对象)。

例如,对象 A 和 B 存在于被监视的 Source 上。对象 A、B 和 C 存在于被监视的 Target 上。

客户端将对象 D 写入 Source 并删除对象 B。

操作后,对象 A 和 D 存在于 Source 上。对象 A、C 和 D 存在于 Target 上。

全局标志

此命令支持任何 全局标志

示例

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

使用 mc mirror 将文件从文件系统镜像到 S3 主机。

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

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

  • PATH 替换为目标桶。

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

使用 mc mirror 以及 --watch 将文件从文件系统持续镜像到与 S3 兼容的主机,其中添加到文件系统或从文件系统删除的对象将被添加到主机或从主机中删除。

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

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

  • PATH 替换为目标桶。

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

使用 mc mirror--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 命令删除了 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 命令可能按文档工作,但任何此类使用都是您自己的风险。