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
,其中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
- --active-active
- 可选
在两个站点之间建立活动-活动镜像活动。必须在每个站点上重复该命令。
例如
在站点 A 上,从 A 镜像到 B
mc mirror --active-active siteA siteB
在站点 B 上,从 B 镜像到 A
mc mirror --active-active siteB siteA
- --checksum
- 可选
RELEASE.2024-10-02T08-27-28Z 版本中的新增功能。
将校验和添加到上传的对象。
有效值为:-
MD5
-CRC32
-CRC32C
-SHA1
-SHA256
该标志需要服务器尾部标头,并且适用于 AWS 或 MinIO 目标。
- --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-storageclass
- 可选
排除
SOURCE
上具有指定存储类的对象。您可以在一个命令中多次使用此标志来排除多个存储类的对象。使用此标志排除具有需要重新水合或恢复对象的存储类的对象,例如从 AWS S3 桶迁移,其中一些对象具有
GLACIER
或DEEP_ARCHIVE
存储类。
- --limit-download
- 可选
限制客户端下载速率,使其不超过以 KiB/s、MiB/s 或 GiB/s 为单位的指定速率。这仅影响到 MinIO 客户端运行的本地设备的下载。有效的单位包括
B
代表字节K
代表千字节M
代表兆字节G
代表吉字节T
代表太字节Ki
代表KibibytesMi
代表MibibytesGi
代表GibibytesTi
代表Tebibytes
例如,要将下载速率限制为不超过 1 GiB/s,请使用以下命令:
--limit-download 1G
如果未指定,MinIO 将使用无限下载速率。
- --limit-upload
- 可选
限制客户端上传速率,使其不超过以 KiB/s、MiB/s 或 GiB/s 为单位的指定速率。这仅影响到 MinIO 客户端运行的本地设备的上传。有效的单位包括
B
代表字节K
代表千字节M
代表兆字节G
代表吉字节T
代表太字节Ki
代表KibibytesMi
代表MibibytesGi
代表GibibytesTi
代表Tebibytes
例如,要将上传速率限制为不超过 1 GiB/s,请使用以下命令:
--limit-upload 1G
如果未指定,MinIO 将使用无限上传速率。
- --monitoring-address
- 可选
创建一个用于监控镜像活动的 Prometheus 端点。指定要创建抓取端点的本地网络适配器和端口地址。默认为
localhost:8081
)。
- --overwrite
- 可选
覆盖
TARGET
上的对象。例如,考虑一个活动的
mc mirror --overwrite
,它将内容从 Source 同步到 Destination。如果 Source 上的对象发生更改,
mc mirror --overwrite
会同步并覆盖 Destination 上任何匹配的文件。如果没有
--overwrite
,如果对象已存在于 Destination 上,则镜像过程将无法同步该对象。mc mirror
会记录错误并继续同步其他对象。
- --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
文件夹。
- --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
将本地目录持续镜像到与 S3 兼容的主机
使用 mc mirror
以及 --watch
将文件从文件系统持续镜像到与 S3 兼容的主机,其中添加到文件系统或从文件系统删除的对象将被添加到主机或从主机中删除。
mc mirror --watch FILEPATH ALIAS/PATH
持续将 S3 存储桶镜像到 S3 兼容主机
使用 mc mirror
和 --watch
持续镜像一个 S3 兼容主机上的存储桶中的对象到另一个 S3 兼容主机,其中添加到或从存储桶中删除的对象将被添加到或从主机中删除。
mc mirror --watch SRCALIAS/SRCPATH TGTALIAS/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
行为
镜像在对象失败时继续
如果目标上存在相同名称的对象,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 命令可能按文档工作,但任何此类使用都是您自己的风险。