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
,其中: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
- --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 目标配合使用。
- --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-storageclass
- Optional
在
SOURCE
上排除具有指定存储类别的对象。 你可以在这个标志上多次使用,在一次命令中排除多个存储类别的对象。使用此选项来排除具有需要重新激活或恢复的对象的存储类,例如从 AWS S3 桶迁移时,其中一些对象具有
GLACIER
或DEEP_ARCHIVE
存储类。
- --limit-download
- Optional
将客户端的下载速率限制在指定的KiB/s、MiB/s或GiB/s之内。 只影响运行MinIO客户端的本地设备的下载。 有效的单位包括:
B
for bytesK
for kilobytesM
for megabytesG
for gigabytesT
for terabytesKi
for kibibytesMi
for mibibytesGi
for gibibytesTi
for tebibytes
例如,如果要将下载速率限制在不超过1 GiB/s,可以使用以下命令:
--limit-download 1G
如果未指定,MinIO 将使用不限下载速率。
- --limit-upload
- :optional:
将客户端的上传速率限制在规定的KiB/s、MiB/s或GiB/s以下。 这只影响运行MinIO Client的本地设备的上传。 有效的单位包括:
B
for bytesK
for kilobytesM
for megabytesG
for gigabytesT
for terabytesKi
for kibibytesMi
for mibibytesGi
for gibibytesTi
for tebibytes
例如,要将上传速率限制为不超过1 GiB/s,可以使用以下方法:
--limit-upload 1G
如果未指定,MinIO将使用无限上传速率。
- --monitoring-address
- Optional
创建一个 Prometheus 端点用于监控镜像活动。 指定创建抓取端点的本地网络适配器和端口地址。 默认为
localhost:8081
)。
- --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
上。
- --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 --overwrite
或mc mirror --watch
命令。在 RELEASE.2023-05-04T18-10-16Z 版本发生变更: 如果目标路径是一个不存在的地方文件系统目录,
mc mirror --remove
将会返回一个错误。在早期版本中,指定
/path/to/directory
会导致如果directory
不存在,则删除/path/to
文件夹。
- --storage-class, sc
- Optional
在
mc mirror TARGET
上为新对象设置存储类。有关 S3 存储类别的更多信息,请参阅 Amazon 官方文档:Storage Classes 。
- --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
将本地目录持续镜像到 S3 兼容主机
使用 mc mirror
命令与 --watch
选项(在 macOS 上是 --watch
)来自动持续地将文件系统中的文件镜像到一个支持 S3 的主机上。在这种情况下,文件系统中的任何添加或删除的对象都会相应地在主机上进行添加或删除操作:
mc mirror --watch FILEPATH ALIAS/PATH
将 S3 存储桶持续镜像到 S3 兼容主机
使用 mc mirror
命令与 --watch
选项(在 macOS 上是 --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: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 命令 可能 如文档中所 述工作,但任何此类使用都是您自己的风险。