概览
[TOC]
MinIO Docker
Docker-compose 部署
目录:
1 | cd /work/minio |
docker-compose.yml
1 | services: |
新建文件夹:
1 | mkdir -p common/minio/data || mkdir -p common/minio/config |
拉取镜像:
1 | docker-compose pull |
启动服务:
1 | docker-compose up -d |
通过浏览器查看:
http://ccogito.xyz:9000/minio/
Minio Client
安装
1 | cd /work/minio |
验证
mc
预先配置了云存储服务URL:https://play.min.io,别名“play”。它是一个用于研发和测试的MinIO服务。如果想测试Amazon S3,你可以将“play”替换为“s3”。
示例:
1 | mc ls play |
添加一个云存储服务
添加一个或多个S3兼容的服务,请参考下面说明。mc
将所有的配置信息都存储在~/.mc/config.json
文件中。
1 | mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE] |
别名就是给你的云存储服务起了一个短点的外号。S3 endpoint,access key和secret key是你的云存储服务提供的。API签名是可选参数,默认情况下,它被设置为”S3v4”。
示例-MinIO云存储
从MinIO服务获得URL、access key和secret key。
1 | mc config host add minio http://localhost:9000 USERAKIAIOSFODNN7EXAMPLE PASSwJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY --api s3v4 |
示例-Amazon S3云存储
参考AWS Credentials指南获取你的AccessKeyID和SecretAccessKey。
1 | mc config host add s3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api s3v4 |
示例-Google云存储
参考Google Credentials Guide获取你的AccessKeyID和SecretAccessKey。
1 | mc config host add gcs https://storage.googleapis.com BKIKJAA5BMMU2RHO6IBB V8f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api s3v2 |
注意:Google云存储只支持旧版签名版本V2,所以你需要选择S3v2。
使用
命令列表
全局参数
参数 [—debug]
Debug参数开启控制台输出debug信息。
示例:输出
ls
命令的详细debug信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Copymc --debug ls play
mc: <DEBUG> GET / HTTP/1.1
Host: play.min.io
User-Agent: MinIO (darwin; amd64) minio-go/1.0.1 mc/2016-04-01T00:22:11Z
Authorization: AWS4-HMAC-SHA256 Credential=**REDACTED**/20160408/us-east-1/s3/aws4_request, SignedHeaders=expect;host;x-amz-content-sha256;x-amz-date, Signature=**REDACTED**
Expect: 100-continue
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20160408T145236Z
Accept-Encoding: gzip
mc: <DEBUG> HTTP/1.1 200 OK
Transfer-Encoding: chunked
Accept-Ranges: bytes
Content-Type: text/xml; charset=utf-8
Date: Fri, 08 Apr 2016 14:54:55 GMT
Server: MinIO/DEVELOPMENT.2016-04-07T18-53-27Z (linux; amd64)
Vary: Origin
X-Amz-Request-Id: HP30I0W2U49BDBIO
mc: <DEBUG> Response Time: 1.220112837s
[...]
[2016-04-08 03:56:14 IST] 0B albums/
[2016-04-04 16:11:45 IST] 0B backup/
[2016-04-01 20:10:53 IST] 0B deebucket/
[2016-03-28 21:53:49 IST] 0B guestbucket/参数 [—json]
JSON参数启用JSON格式的输出。
示例:列出MinIO play服务的所有存储桶。
1
2
3
4
5 Copymc --json ls play
{"status":"success","type":"folder","lastModified":"2016-04-08T03:56:14.577+05:30","size":0,"key":"albums/"}
{"status":"success","type":"folder","lastModified":"2016-04-04T16:11:45.349+05:30","size":0,"key":"backup/"}
{"status":"success","type":"folder","lastModified":"2016-04-01T20:10:53.941+05:30","size":0,"key":"deebucket/"}
{"status":"success","type":"folder","lastModified":"2016-03-28T21:53:49.217+05:30","size":0,"key":"guestbucket/"}参数 [—no-color]
这个参数禁用颜色主题。对于一些比较老的终端有用。
参数 [—quiet]
这个参数关闭控制台日志输出。
参数 [—config-dir]
这个参数参数自定义的配置文件路径。
参数 [ —insecure]
跳过SSL证书验证。
MinIO SDK - Python Client
pip 安装
1 | $ pip install minio |
初始化 MinIO Client
MinIO client需要以下4个参数来连接MinIO对象存储服务。
参数 | 描述 |
---|---|
endpoint | 对象存储服务的URL。 |
access_key | Access key是唯一标识你的账户的用户ID。 |
secret_key | Secret key是你账户的密码。 |
secure | true代表使用HTTPS。 |
1 | from minio import Minio |
示例-上传文件
本示例连接到一个MinIO对象存储服务,创建一个存储桶并上传一个文件到存储桶中。
我们在本示例中使用运行在 https://play.min.io 上的MinIO服务,你可以用这个服务来开发和测试。示例中的访问凭据是公开的。
file-uploader.py
1 | # 引入MinIO包。 |
Run file-uploader
1 | python file_uploader.py |
Python Client API
构造函数
Minio(endpoint, access_key=None, secret_key=None, secure=True, region=None, http_client=None)
初使化一个新的client对象。
参数
参数 | 类型 | 描述 |
---|---|---|
endpoint |
string | S3兼容对象存储服务endpoint。 |
access_key |
string | 对象存储的Access key。(如果是匿名访问则可以为空)。 |
secret_key |
string | 对象存储的Secret key。(如果是匿名访问则可以为空)。 |
secure |
bool | 设为True 代表启用HTTPS。 (默认是True )。 |
region |
string | 设置该值以覆盖自动发现存储桶region。 (可选,默认值是None )。 |
http_client |
urllib3.poolmanager.PoolManager | 设置该值以使用自定义的http client,而不是默认的http client。(可选,默认值是None )。 |
操作桶
make_bucket(bucket_name, location=’us-east-1’)
创建一个存储桶。
示例
1 | try: |
list_buckets()
列出所有的存储桶。
示例
1 | buckets = minioClient.list_buckets() |
bucket_exists(bucket_name)
检查存储桶是否存在。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
示例
1 | Copytry: |
remove_bucket(bucket_name)
删除存储桶。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
示例
1 | Copytry: |
list_objects(bucket_name, prefix=None, recursive=False)
列出存储桶中所有对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
prefix |
string | 用于过滤的对象名称前缀。可选项,默认为None。 |
recursive |
bool | True 代表递归查找,False 代表类似文件夹查找,以’/‘分隔,不查子文件夹。(可选,默认值是False )。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
object |
Object | 该存储桶中所有对象的Iterator,对象的格式如下: |
参数 | 类型 | 描述 |
---|---|---|
object.bucket_name |
string | 对象所在存储桶的名称。 |
object.object_name |
string | 对象的名称。 |
object.is_dir |
bool | True 代表列举的对象是文件夹(对象前缀), False 与之相反。 |
object.size |
int | 对象的大小。 |
object.etag |
string | 对象的etag值。 |
object.last_modified |
datetime.datetime | 最后修改时间。 |
object.content_type |
string | 对象的content-type。 |
object.metadata |
dict | 对象的其它元数据。 |
示例
1 | Copy# List all object paths in bucket that begin with my-prefixname. |
list_objects_v2(bucket_name, prefix=None, recursive=False)
使用V2版本API列出一个存储桶中的对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
prefix |
string | 用于过滤的对象名称前缀。可选项,默认为None。 |
recursive |
bool | True 代表递归查找,False 代表类似文件夹查找,以’/‘分隔,不查子文件夹。(可选,默认值是False )。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
object |
Object | 该存储桶中所有对象的Iterator,对象的格式如下: |
参数 | 类型 | 描述 |
---|---|---|
object.bucket_name |
string | 对象所在存储桶的名称。 |
object.object_name |
string | 对象的名称。 |
object.is_dir |
bool | True 代表列举的对象是文件夹(对象前缀), False 与之相反。 |
object.size |
int | 对象的大小。 |
object.etag |
string | 对象的etag值。 |
object.last_modified |
datetime.datetime | 最后修改时间。 |
object.content_type |
string | 对象的content-type。 |
object.metadata |
dict | 对象的其它元数据。 |
示例
1 | Copy# List all object paths in bucket that begin with my-prefixname. |
list_incomplete_uploads(bucket_name, prefix, recursive=False)
列出存储桶中未完整上传的对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
prefix |
string | 用于过滤的对象名称前缀。 |
recursive |
bool | True 代表递归查找,False 代表类似文件夹查找,以’/‘分隔,不查子文件夹。(可选,默认值是False )。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
multipart_obj |
Object | multipart对象的Iterator,格式如下: |
参数 | 类型 | 描述 |
---|---|---|
multipart_obj.object_name |
string | 未完整上传的对象的名称。 |
multipart_obj.upload_id |
string | 未完整上传的对象的上传ID。 |
multipart_obj.size |
int | 未完整上传的对象的大小。 |
示例
1 | Copy# List all object paths in bucket that begin with my-prefixname. |
get_bucket3_policy(bucket_name, prefix)
获取存储桶的当前策略。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
prefix |
string | 对象的名称前缀。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
Policy |
minio.policy.Policy | Policy枚举:Policy.READ_ONLY,Policy.WRITE_ONLY,Policy.READ_WRITE或 Policy.NONE。 |
示例
1 | Copy# Get current policy of all object paths in bucket that begin with my-prefixname. |
set_bucket_policy(bucket_name, prefix, policy)
给指定的存储桶设置存储桶策略。如果prefix
不为空,则该存储桶策略仅对匹配这个指定前缀的对象生效。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
prefix |
string | 对象的名称前缀。 |
Policy |
minio.policy.Policy | Policy枚举:Policy.READ_ONLY,Policy.WRITE_ONLY,Policy.READ_WRITE或 Policy.NONE。 |
示例
1 | Copy# Set policy Policy.READ_ONLY to all object paths in bucket that begin with my-prefixname. |
get_bucket_notification(bucket_name)
获取存储桶上的通知配置。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
notification |
dict | 如果没有通知配置,则返回一个空的dictionary,否则就和set_bucket_notification的参数结构一样。 |
示例
1 | Copy# Get the notifications configuration for a bucket. |
set_bucket_notification(bucket_name, notification)
给存储桶设置通知配置。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
notification |
dict | 非空dictionary,内部结构格式如下: |
notification
参数格式如下:
- (dict) —
- TopicConfigurations (list) — 服务配置项目的可选列表,指定了AWS SNS Topics做为通知的目标。
- QueueConfigurations (list) — 服务配置项目的可选列表,指定了AWS SQS Queues做为通知的目标。
- CloudFunctionconfigurations (list) — 服务配置项目的可选列表,指定了AWS Lambda Cloud functions做为通知的目标。
以上项目中至少有一项需要在notification
参数中指定。
上面提到的“服务配置项目”具有以下结构:
(dict) —
Id (string) — 配置项的可选ID,如果不指定,服务器自动生成。
Arn (string) — 指定特定的Topic/Queue/Cloud Function identifier。
Events (list) — 一个含有事件类型字符串的非空列表,事件类型取值如下: ‘s3:ReducedRedundancyLostObject’, ‘s3:ObjectCreated:\‘, ‘s3:ObjectCreated:Put’, ‘s3:ObjectCreated:Post’, ‘s3:ObjectCreated:Copy’, ‘s3:ObjectCreated:CompleteMultipartUpload’, ‘s3:ObjectRemoved:*‘, ‘s3:ObjectRemoved:Delete’, ‘s3:ObjectRemoved:DeleteMarkerCreated’*
Filter
(dict) -- 一个可选的dictionary容器,里面含有基于键名称过滤的规则的对象。
- Key
(dict) -- dictionary容器,里面含有基于键名称前缀和后缀过滤的规则的对象。
- FilterRules
(list) -- 指定过滤规则标准的容器列表。
- (dict) -- 键值对的dictionary容器,指定单个的过滤规则。
- **Name** (string) -- 对象的键名称,值为“前缀”或“后缀”。
- **Value** (string) -- 指定规则适用的值。
没有返回值。如果目标服务报错,会抛出ResponseError
。如果有验证错误,会抛出InvalidArgumentError
或者TypeError
。输入参数的configuration不能为空 - 为了删除存储桶上的通知配置,参考remove_all_bucket_notification()
API。
示例
1 | Copynotification = { |
remove_all_bucket_notification(bucket_name)
删除存储桶上配置的所有通知。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
没有返回值,如果操作失败会抛出 ResponseError
异常。
示例
1 | Copy# Remove all the notifications config for a bucket. |
listen_bucket_notification(bucket_name, prefix, suffix, events)
监听存储桶上的通知,可以额外提供前缀、后缀和时间类型来进行过滤。使用该API前不需要先设置存储桶通知。这是一个MinIO的扩展API,MinIO Server会基于过来的请求使用唯一标识符自动注册或者注销。
当通知发生时,产生事件,调用者需要遍历读取这些事件。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 监听事件通知的存储桶名称。 |
prefix |
string | 过滤通知的对象名称前缀。 |
suffix |
string | 过滤通知的对象名称后缀。 |
events |
list | 启用特定事件类型的通知。 |
完整示例请看 这里。
1 | Copy# Put a file with default content-type. |
操作对象
get_object(bucket_name, object_name, request_headers=None)
下载一个对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
request_headers |
dict | 额外的请求头信息 (可选,默认为None)。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
object |
urllib3.response.HTTPResponse | http streaming reader。 |
示例
1 | Copy# Get a full object. |
get_partial_object(bucket_name, object_name, offset=0, length=0, request_headers=None)
下载一个对象的指定区间的字节数组。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
offset |
int | offset 是起始字节的位置 |
length |
int | length 是要读取的长度 (可选,如果无值则代表读到文件结尾)。 |
request_headers |
dict | 额外的请求头信息 (可选,默认为None)。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
object |
urllib3.response.HTTPResponse | http streaming reader。 |
示例
1 | Copy# Offset the download by 2 bytes and retrieve a total of 4 bytes. |
fget_object(bucket_name, object_name, file_path, request_headers=None)
下载并将文件保存到本地。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
file_path |
dict | 对象数据要写入的本地文件路径。 |
request_headers |
dict | 额外的请求头信息 (可选,默认为None)。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
obj |
Object | 对象的统计信息,格式如下: |
参数 | 类型 | 描述 |
---|---|---|
obj.size |
int | 对象的大小。 |
obj.etag |
string | 对象的etag值。 |
obj.content_type |
string | 对象的Content-Type。 |
obj.last_modified |
time.time | 最后修改时间。 |
obj.metadata |
dict | 对象的其它元数据。 |
示例
1 | Copy# Get a full object and prints the original object stat information. |
copy_object(bucket_name, object_name, object_source, copy_conditions=None, metadata=None)
拷贝对象存储服务上的源对象到一个新对象。
注意:本API支持的最大文件大小是5GB。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 新对象的存储桶名称。 |
object_name |
string | 新对象的名称。 |
object_source |
string | 要拷贝的源对象的存储桶名称+对象名称。 |
copy_conditions |
CopyConditions | 拷贝操作需要满足的一些条件(可选,默认为None)。 |
示例
以下所有条件都是允许的,并且可以组合使用。
1 | Copyimport time |
put_object(bucket_name, object_name, data, length, content_type=’application/octet-stream’, metadata=None)
添加一个新的对象到对象存储服务。
注意:本API支持的最大文件大小是5TB。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
data |
io.RawIOBase | 任何实现了io.RawIOBase的python对象。 |
length |
int | 对象的总长度。 |
content_type |
string | 对象的Content type。(可选,默认是“application/octet-stream”)。 |
metadata |
dict | 其它元数据。(可选,默认是None)。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
etag |
string | 对象的etag值。 |
示例
单个对象的最大大小限制在5TB。put_object在对象大于5MiB时,自动使用multiple parts方式上传。这样,当上传失败时,客户端只需要上传未成功的部分即可(类似断点上传)。上传的对象使用MD5SUM签名进行完整性验证。
1 | import os |
fput_object(bucket_name, object_name, file_path, content_type=’application/octet-stream’, metadata=None)
通过文件上传到对象中。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
file_path |
string | 本地文件的路径,会将该文件的内容上传到对象存储服务上。 |
content_type |
string | 对象的Content type(可选,默认是“application/octet-stream”)。 |
metadata |
dict | 其它元数据(可选,默认是None)。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
etag |
string | 对象的etag值。 |
示例
单个对象的最大大小限制在5TB。fput_object在对象大于5MiB时,自动使用multiple parts方式上传。这样,当上传失败时,客户端只需要上传未成功的部分即可(类似断点上传)。上传的对象使用MD5SUM签名进行完整性验证。
1 | Copy# Put an object 'myobject' with contents from '/tmp/otherobject', upon success prints the etag identifier computed by server. |
stat_object(bucket_name, object_name)
获取对象的元数据。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 名称名称。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
obj |
Object | 对象的统计信息,格式如下: |
参数 | 类型 | 描述 |
---|---|---|
obj.size |
int | 对象的大小。 |
obj.etag |
string | 对象的etag值。 |
obj.content_type |
string | 对象的Content-Type。 |
obj.last_modified |
time.time | UTC格式的最后修改时间。 |
obj.metadata |
dict | 对象的其它元数据信息。 |
示例
1 | Copy# Fetch stats on your object. |
remove_object(bucket_name, object_name)
删除一个对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
示例
1 | Copy# Remove an object. |
remove_objects(bucket_name, objects_iter)
删除存储桶中的多个对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
objects_iter |
list , tuple or iterator | 多个对象名称的列表数据。 |
返回值
参数 | 类型 | 描述 |
---|---|---|
delete_error_iterator |
iterator of MultiDeleteError instances | 删除失败的错误信息iterator,格式如下: |
注意
- 由于上面的方法是延迟计算(lazy evaluation),默认是不计算的,所以上面返回的iterator必须被evaluated(比如:使用循环)。
- 该iterator只有在执行删除操作出现错误时才不为空,每一项都包含删除报错的对象的错误信息。
该iterator产生的每一个删除错误信息都有如下结构:
参数 | 类型 | 描述 |
---|---|---|
MultiDeleteError.object_name |
string | 删除报错的对象名称。 |
MultiDeleteError.error_code |
string | 错误码。 |
MultiDeleteError.error_message |
string | 错误信息。 |
示例
1 | Copy# Remove multiple objects in a single library call. |
remove_incomplete_upload(bucket_name, object_name)
删除一个未完整上传的对象。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
示例
1 | Copy# Remove an partially uploaded object. |
Presigned操作
presigned_get_object(bucket_name, object_name, expiry=timedelta(days=7))
生成一个用于HTTP GET操作的presigned URL。浏览器/移动客户端可以在即使存储桶为私有的情况下也可以通过这个URL进行下载。这个presigned URL可以有一个过期时间,默认是7天。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
expiry |
datetime.datetime | 过期时间,单位是秒,默认是7天。 |
response_headers |
dictionary | 额外的响应头 (比如:response-content-type 、response-content-disposition )。 |
示例
1 | Copyfrom datetime import timedelta |
presigned_put_object(bucket_name, object_name, expires=timedelta(days=7))
生成一个用于HTTP PUT操作的presigned URL。浏览器/移动客户端可以在即使存储桶为私有的情况下也可以通过这个URL进行上传。这个presigned URL可以有一个过期时间,默认是7天。
注意:你可以通过只指定对象名称上传到S3。
参数
参数 | 类型 | 描述 |
---|---|---|
bucket_name |
string | 存储桶名称。 |
object_name |
string | 对象名称。 |
expiry |
datetime.datetime | 过期时间,单位是秒,默认是7天。 |
示例
1 | Copyfrom datetime import timedelta |
presigned_post_policy(PostPolicy)
允许给POST操作的presigned URL设置策略条件。这些策略包括比如,接收对象上传的存储桶名称,名称前缀,过期策略。
创建policy:
1 | Copyfrom datetime import datetime, timedelta |
获得POST表单的键值对形式的对象:
1 | Copytry: |
使用curl
POST你的数据:
1 | Copycurl_str = 'curl -X POST {0}'.format(signed_form_data[0]) |
引用
MinIO Client 命令
ls
命令 - 列出对象
ls
命令列出文件、对象和存储桶。使用--incomplete
flag可列出未完整拷贝的内容。
1
2
3
4
5
6
7 Copy用法:
mc ls [FLAGS] TARGET [TARGET ...]
FLAGS:
--help, -h 显示帮助。
--recursive, -r 递归。
--incomplete, -I 列出未完整上传的对象。示例: 列出所有https://play.min.io上的存储桶。
1
2
3
4
5
6 Copymc ls play
[2016-04-08 03:56:14 IST] 0B albums/
[2016-04-04 16:11:45 IST] 0B backup/
[2016-04-01 20:10:53 IST] 0B deebucket/
[2016-03-28 21:53:49 IST] 0B guestbucket/
[2016-04-08 20:58:18 IST] 0B mybucket/
mb
命令 - 创建存储桶
mb
命令在对象存储上创建一个新的存储桶。在文件系统,它就和mkdir -p
命令是一样的。存储桶相当于文件系统中的磁盘或挂载点,不应视为文件夹。MinIO对每个用户创建的存储桶数量没有限制。
在Amazon S3上,每个帐户被限制为100个存储桶。有关更多信息,请参阅S3上的存储桶限制和限制 。
1
2
3
4
5
6 Copy用法:
mc mb [FLAGS] TARGET [TARGET...]
FLAGS:
--help, -h 显示帮助。
--region "us-east-1" 指定存储桶的region,默认是‘us-east-1’.示例:在https://play.min.io上创建一个名叫”mybucket”的存储桶。
1
2 Copymc mb play/mybucket
Bucket created successfully ‘play/mybucket’.
cat
命令 - 合并对象
cat
命令将一个文件或者对象的内容合并到另一个上。你也可以用它将对象的内容输出到stdout。
1
2
3
4
5 Copy用法:
mc cat [FLAGS] SOURCE [SOURCE...]
FLAGS:
--help, -h 显示帮助。示例: 显示
myobject.txt
文件的内容
1
2 Copymc cat play/mybucket/myobject.txt
Hello MinIO!!
pipe
命令 - Pipe到对象
pipe
命令拷贝stdin里的内容到目标输出,如果没有指定目标输出,则输出到stdout。
1
2
3
4
5 Copy用法:
mc pipe [FLAGS] [TARGET]
FLAGS:
--help, -h 显示帮助。示例: 将MySQL数据库dump文件输出到Amazon S3。
1 Copymysqldump -u root -p ******* accountsdb | mc pipe s3/sql-backups/backups/accountsdb-oct-9-2015.sql
cp
命令 - 拷贝对象
cp
命令拷贝一个或多个源文件目标输出。所有到对象存储的拷贝操作都进行了MD4SUM checkSUM校验。可以从故障点恢复中断或失败的复制操作。
1
2
3
4
5
6 Copy用法:
mc cp [FLAGS] SOURCE [SOURCE...] TARGET
FLAGS:
--help, -h 显示帮助。
--recursive, -r 递归拷贝。示例: 拷贝一个文本文件到对象存储。
1
2 Copymc cp myobject.txt play/mybucket
myobject.txt: 14 B / 14 B ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100.00 % 41 B/s 0
rm
命令 - 删除存储桶和对象。使用
rm
命令删除文件对象或者存储桶。
1
2
3
4
5
6
7
8
9
10
11
12 Copy用法:
mc rm [FLAGS] TARGET [TARGET ...]
FLAGS:
--help, -h 显示帮助。
--recursive, -r 递归删除。
--force 强制执行删除操作。
--prefix 删除批配这个前缀的对象。
--incomplete, -I 删除未完整上传的对象。
--fake 模拟一个假的删除操作。
--stdin 从STDIN中读对象列表。
--older-than value 删除N天前的对象(默认是0天)。示例: 删除一个对象。
1
2 Copymc rm play/mybucket/myobject.txt
Removed ‘play/mybucket/myobject.txt’.示例:删除一个存储桶并递归删除里面所有的内容。由于这个操作太危险了,你必须传
--force
参数指定强制删除。
1
2
3 Copymc rm --recursive --force play/myobject
Removed ‘play/myobject/newfile.txt’.
Removed 'play/myobject/otherobject.txt’.示例: 从
mybucket
里删除所有未完整上传的对象。
1
2
3 Copymc rm --incomplete --recursive --force play/mybucket
Removed ‘play/mybucket/mydvd.iso’.
Removed 'play/mybucket/backup.tgz’.示例: 删除一天前的对象。
1 Copymc rm --force --older-than=1 play/mybucket/oldsongs
share
命令 - 共享
share
命令安全地授予上传或下载的权限。此访问只是临时的,与远程用户和应用程序共享也是安全的。如果你想授予永久访问权限,你可以看看mc policy
命令。生成的网址中含有编码后的访问认证信息,任何企图篡改URL的行为都会使访问无效。想了解这种机制是如何工作的,请参考Pre-Signed URL技术。
1
2
3
4
5
6
7
8
9
10 Copy用法:
mc share [FLAGS] COMMAND
FLAGS:
--help, -h 显示帮助。
COMMANDS:
download 生成有下载权限的URL。
upload 生成有上传权限的URL。
list 列出先前共享的对象和文件夹。子命令
share download
- 共享下载
share download
命令生成不需要access key和secret key即可下载的URL,过期参数设置成最大有效期(不大于7天),过期之后权限自动回收。
1
2
3
4
5
6
7 Copy用法:
mc share download [FLAGS] TARGET [TARGET...]
FLAGS:
--help, -h 显示帮助。
--recursive, -r 递归共享所有对象。
--expire, -E "168h" 设置过期时限,NN[h|m|s]。示例: 生成一个对一个对象有4小时访问权限的URL。
1
2
3
4
5 Copy
mc share download --expire 4h play/mybucket/myobject.txt
URL: https://play.min.io/mybucket/myobject.txt
Expire: 0 days 4 hours 0 minutes 0 seconds
Share: https://play.min.io/mybucket/myobject.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=Q3AM3UQ867SPQQA43P2F%2F20160408%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20160408T182008Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=1527fc8f21a3a7e39ce3c456907a10b389125047adc552bcd86630b9d459b634子命令
share upload
- 共享上传
share upload
命令生成不需要access key和secret key即可上传的URL。过期参数设置成最大有效期(不大于7天),过期之后权限自动回收。
Content-type参数限制只允许上传指定类型的文件。
1
2
3
4
5
6
7 Copy用法:
mc share upload [FLAGS] TARGET [TARGET...]
FLAGS:
--help, -h 显示帮助。
--recursive, -r 递归共享所有对象。
--expire, -E "168h" 设置过期时限,NN[h|m|s].示例: 生成一个
curl
命令,赋予上传到play/mybucket/myotherobject.txt
的权限。
1
2
3
4 Copymc share upload play/mybucket/myotherobject.txt
URL: https://play.min.io/mybucket/myotherobject.txt
Expire: 7 days 0 hours 0 minutes 0 seconds
Share: curl https://play.min.io/mybucket -F x-amz-date=20160408T182356Z -F x-amz-signature=de343934bd0ba38bda0903813b5738f23dde67b4065ea2ec2e4e52f6389e51e1 -F bucket=mybucket -F policy=eyJleHBpcmF0aW9uIjoiMjAxNi0wNC0xNVQxODoyMzo1NS4wMDdaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwibXlidWNrZXQiXSxbImVxIiwiJGtleSIsIm15b3RoZXJvYmplY3QudHh0Il0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNjA0MDhUMTgyMzU2WiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIlEzQU0zVVE4NjdTUFFRQTQzUDJGLzIwMTYwNDA4L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=Q3AM3UQ867SPQQA43P2F/20160408/us-east-1/s3/aws4_request -F key=myotherobject.txt -F file=@<FILE>子命令
share list
- 列出之前的共享
share list
列出没未过期的共享URL。
1
2
3
4
5
6 Copy用法:
mc share list COMMAND
COMMAND:
upload: 列出先前共享的有上传权限的URL。
download: 列出先前共享的有下载权限的URL。
mirror
命令 - 存储桶镜像
mirror
命令和rsync
类似,只不过它是在文件系统和对象存储之间做同步。
1
2
3
4
5
6
7
8
9 Copy用法:
mc mirror [FLAGS] SOURCE TARGET
FLAGS:
--help, -h 显示帮助。
--force 强制覆盖已经存在的目标。
--fake 模拟一个假的操作。
--watch, -w 监听改变并执行镜像操作。
--remove 删除目标上的外部的文件。示例: 将一个本地文件夹镜像到https://play.min.io上的’mybucket’存储桶。
1
2 Copymc mirror localdir/ play/mybucket
localdir/b.txt: 40 B / 40 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00 % 73 B/s 0示例: 持续监听本地文件夹修改并镜像到https://play.min.io上的’mybucket’存储桶。
1
2 Copymc mirror -w localdir play/mybucket
localdir/new.txt: 10 MB / 10 MB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00 % 1 MB/s 15s
find
命令 - 查找文件和对象
find
命令通过指定参数查找文件,它只列出满足条件的数据。
1
2
3
4
5
6
7
8
9 Copy用法:
mc find PATH [FLAGS]
FLAGS:
--help, -h 显示帮助。
--exec value 为每个匹配对象生成一个外部进程(请参阅FORMAT)
--name value 查找匹配通配符模式的对象。
...
...示例: 持续从s3存储桶中查找所有jpeg图像,并复制到minio “play/bucket”存储桶
1 Copymc find s3/bucket --name "*.jpg" --watch --exec "mc cp {} play/bucket"
diff
命令 - 显示差异
diff
命令计算两个目录之间的差异。它只列出缺少的或者大小不同的内容。它不比较内容,所以可能的是,名称相同,大小相同但内容不同的对象没有被检测到。这样,它可以在不同站点或者大量数据的情况下快速比较。
1
2
3
4
5 Copy用法:
mc diff [FLAGS] FIRST SECOND
FLAGS:
--help, -h 显示帮助。示例: 比较一个本地文件夹和一个远程对象存储服务
1
2 Copy mc diff localdir play/mybucket
‘localdir/notes.txt’ and ‘https://play.min.io/mybucket/notes.txt’ - only in first.
watch
命令 - 监听文件和对象存储事件。
watch
命令提供了一种方便监听对象存储和文件系统上不同类型事件的方式。
1
2
3
4
5
6
7
8
9 Copy用法:
mc watch [FLAGS] PATH
FLAGS:
--events value 过滤不同类型的事件,默认是所有类型的事件 (默认: "put,delete,get")
--prefix value 基于前缀过滤事件。
--suffix value 基于后缀过滤事件。
--recursive 递归方式监听事件。
--help, -h 显示帮助。示例: 监听对象存储的所有事件
1
2
3
4 Copymc watch play/testbucket
[2016-08-18T00:51:29.735Z] 2.7KiB ObjectCreated https://play.min.io/testbucket/CONTRIBUTING.md
[2016-08-18T00:51:29.780Z] 1009B ObjectCreated https://play.min.io/testbucket/MAINTAINERS.md
[2016-08-18T00:51:29.839Z] 6.9KiB ObjectCreated https://play.min.io/testbucket/README.md示例: 监听本地文件夹的所有事件
1
2
3
4
5 Copymc watch ~/Photos
[2016-08-17T17:54:19.565Z] 3.7MiB ObjectCreated /home/minio/Downloads/tmp/5467026530_a8611b53f9_o.jpg
[2016-08-17T17:54:19.565Z] 3.7MiB ObjectCreated /home/minio/Downloads/tmp/5467026530_a8611b53f9_o.jpg
...
[2016-08-17T17:54:19.565Z] 7.5MiB ObjectCreated /home/minio/Downloads/tmp/8771468997_89b762d104_o.jpg
events
命令 - 管理存储桶事件通知。
events
提供了一种方便的配置存储桶的各种类型事件通知的方式。MinIO事件通知可以配置成使用 AMQP,Redis,ElasticSearch,NATS和PostgreSQL服务。MinIO configuration提供了如何配置的更多细节。
1
2
3
4
5
6
7
8
9
10 Copy用法:
mc events COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
COMMANDS:
add 添加一个新的存储桶通知。
remove 删除一个存储桶通知。使用'--force'可以删除所有存储桶通知。
list 列出存储桶通知。
FLAGS:
--help, -h 显示帮助。示例: 列出所有存储桶通知。
1
2 Copymc events list play/andoria
MyTopic arn:minio:sns:us-east-1:1:TestTopic s3:ObjectCreated:*,s3:ObjectRemoved:* suffix:.jpg示例: 添加一个新的’sqs’通知,仅接收ObjectCreated事件。
1 Copymc events add play/andoria arn:minio:sqs:us-east-1:1:your-queue --events put示例: 添加一个带有过滤器的’sqs’通知。
给
sqs
通知添加prefix
和suffix
过滤规则。
1 Copymc events add play/andoria arn:minio:sqs:us-east-1:1:your-queue --prefix photos/ --suffix .jpg示例: 删除一个’sqs’通知
1 Copymc events remove play/andoria arn:minio:sqs:us-east-1:1:your-queue
policy
命令 - 管理存储桶策略管理匿名访问存储桶和其内部内容的策略。
1
2
3
4
5
6
7
8
9
10 Copy用法:
mc policy [FLAGS] PERMISSION TARGET
mc policy [FLAGS] TARGET
mc policy list [FLAGS] TARGET
PERMISSION:
Allowed policies are: [none, download, upload, public].
FLAGS:
--help, -h 显示帮助。示例: 显示当前匿名存储桶策略
显示当前
mybucket/myphotos/2020/
子文件夹的匿名策略。
1
2 Copymc policy play/mybucket/myphotos/2020/
Access permission for ‘play/mybucket/myphotos/2020/’ is ‘none’示例:设置可下载的匿名存储桶策略。
设置
mybucket/myphotos/2020/
子文件夹可匿名下载的策略。现在,这个文件夹下的对象可被公开访问。比如:mybucket/myphotos/2020/yourobjectname
可通过这个URL https://play.min.io/mybucket/myphotos/2020/yourobjectname访问。
1
2 Copymc policy set download play/mybucket/myphotos/2020/
Access permission for ‘play/mybucket/myphotos/2020/’ is set to 'download'示例:删除当前的匿名存储桶策略
删除所有mybucket/myphotos/2020/这个子文件夹下的匿名存储桶策略。
1
2 Copymc policy set none play/mybucket/myphotos/2020/
Access permission for ‘play/mybucket/myphotos/2020/’ is set to 'none'
config
命令 - 管理配置文件
config host
命令提供了一个方便地管理~/.mc/config.json
配置文件中的主机信息的方式,你也可以用文本编辑器手动修改这个配置文件。
1
2
3
4
5
6
7
8
9
10 Copy用法:
mc config host COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
COMMANDS:
add, a 添加一个新的主机到配置文件。
remove, rm 从配置文件中删除一个主机。
list, ls 列出配置文件中的主机。
FLAGS:
--help, -h 显示帮助。示例: 管理配置文件
添加MinIO服务的access和secret key到配置文件,注意,shell的history特性可能会记录这些信息,从而带来安全隐患。在
bash
shell,使用set -o
和set +o
来关闭和开启history特性。
1
2
3 Copyset +o history
mc config host add myminio http://localhost:9000 OMQAGGOL63D7UNVQFY8X GcY5RHNmnEWvD/1QxD3spEIGj+Vt9L7eHaAaBTkJ
set -o history
update
命令 - 软件更新从https://dl.min.io检查软件更新。Experimental标志会检查unstable实验性的版本,通常用作测试用途。
1
2
3
4
5
6
7 Copy用法:
mc update [FLAGS]
FLAGS:
--quiet, -q 关闭控制台输出。
--json 使用JSON格式输出。
--help, -h 显示帮助。示例: 检查更新
1
2 Copymc update
You are already running the most recent version of ‘mc’.
version
命令 - 显示版本信息显示当前安装的
mc
版本。
1
2
3
4
5
6
7 Copy用法:
mc version [FLAGS]
FLAGS:
--quiet, -q 关闭控制台输出。
--json 使用JSON格式输出。
--help, -h 显示帮助。示例: 输出mc版本。
1
2
3
4 Copymc version
Version: 2016-04-01T00:22:11Z
Release-tag: RELEASE.2016-04-01T00-22-11Z
Commit-id: 12adf3be326f5b6610cdd1438f72dfd861597fce