minio开启版本、对象锁等配置
MinIO 版本控制 & 对象锁完整说明
⚠️关键限制(社区版MinIO,遵循S3标准):对象锁(Object‑Lock)只能在创建桶的时候开启,已经存在的旧桶无法后期追加开启对象锁。
如果你的桶已经建好,没有开启对象锁:只能重建桶,使用mc mb --with-lock新建桶,再把旧数据迁移过去。
对象锁开启会自动开启版本控制;版本控制可以后期单独开关。
两个概念区分
- 版本控制(Versioning):保存对象多版本,覆盖删除不会直接丢数据,可以后期开启关闭。
- 对象锁(Object Lock / WORM):防误删、防篡改(备份核心),创建桶时必须指定
--with‑lock,开启后不可关闭。retention:时间到期自动解锁(COMPLIANCE / GOVERNANCE两种模式)legal‑hold法律保留:永久锁定,手动才能解除,无过期时间。
一、新建备份桶(Gitlab、禅道备份桶,推荐直接这样建)
# 创建桶同时开启对象锁(自动开启版本控制)
mc mb --with-lock minio/gitlab-backup
mc mb --with-lock minio/zentao-backup
如果桶已经存在,创建时没有加
--with‑lock,不能直接开启对象锁,处理方案:
- 新建带锁桶;
mc cp --recursive迁移全部旧对象;- 旧桶废弃。
二、如果桶已经是--with‑lock创建,确认/开启版本控制
--with‑lock创建的桶,版本控制默认已经打开;可手动确认/重新开启
# 开启版本控制
mc version enable minio/gitlab-backup
mc version enable minio/zentao-backup
# 查看版本状态
mc version info minio/gitlab-backup
三、桶默认保留策略 retention(备份场景)
COMPLIANCE模式:root管理员也不能删除修改对象,直到到期,备份防勒索首选。
GOVERNANCE模式:有特殊权限账号可以绕过删除,灵活性高。
# 设置桶默认COMPLIANCE模式,默认0d(不强制桶全局过期,由生命周期ilm控制过期)
mc retention set --default COMPLIANCE 0d minio/gitlab-backup
mc retention set --default COMPLIANCE 0d minio/zentao-backup
# 查询桶对象锁配置
mc retention info minio/gitlab-backup
0d含义:桶本身不强制默认保留时长,我们依靠ilm生命周期做过期;月度归档对象单独打标签,用legal‑hold永久锁定。
四、法律保留 legal‑hold(给月度归档备份永久锁死)
月度备份打上legal‑hold,永久不可删除,不受生命周期过期影响,必须手动解除才能删,适合归档。
# 开启法律保留(永久锁定对象)
mc legalhold set minio/gitlab-backup/gitlab-backup/20260901_020000_gitlab_backup.tar
mc legalhold set minio/gitlab-backup/gitlab-config/gitlab-config-20260901_020000.tar.gz
mc legalhold set minio/zentao-backup/zentao_full_20260901_020000.tar.gz
# 查看对象锁状态
mc legalhold info minio/gitlab-backup/gitlab-backup/20260901_020000_gitlab_backup.tar
# 如果未来需要删除归档备份,先关闭legalhold
mc legalhold clear minio/gitlab-backup/gitlab-backup/20260901_020000_gitlab_backup.tar
✨集成备份脚本片段:每月1号备份完成,除了打tag,同时执行
mc legalhold set永久锁住月度备份。
五、web控制台操作方式(图形界面)
- 创建Bucket → 打开
Object Locking(对象锁定)开关,开启后自动打开Versioning版本控制。 - 已有桶:创建时没有打开Object Locking,控制台也无法开启,只能重建。
- Bucket设置 → Retention,可以设置桶默认保留模式。
六、完整校验全套状态命令
# 1.查看版本控制状态
mc version info minio/gitlab-backup
# 2.查看桶对象锁状态
mc retention info minio/gitlab-backup
#3.查看生命周期ilm规则
mc ilm list minio/gitlab-backup
#4.查看单个对象的锁、法律保留状态
mc retention info minio/gitlab-backup/gitlab-backup/xxx.tar
mc legalhold info minio/gitlab-backup/gitlab-backup/xxx.tar
七、踩坑注意事项
- ❌已经存在的普通桶,无法后期开启对象锁,必须重建桶迁移数据,这是S3原生限制,社区版MinIO无法绕过。
- 对象锁开启之后不能关闭桶的对象锁,一旦开启永久生效。
retention是有时间期限;legal‑hold是永久锁定,二者可以叠加。- 生命周期ilm删除对象,对开启legal‑hold法律保留的对象不会生效,月度归档不会被清理,正好适配备份场景。
- COMPLIANCE模式下,哪怕admin账号,也不能删除还在保留期内的对象,只能等时间到期,或者先清除legal‑hold。
- 版本控制会产生大量版本,需要配置
--noncurrent‑expire‑days清理旧版本,不然磁盘会持续上涨。
八、新旧桶迁移简易脚本(旧桶没有对象锁,迁移到新建带锁桶)
# 将旧桶全部数据迁移到新开启对象锁的桶
mc cp --recursive minio/old-gitlab-backup/ minio/gitlab-backup/
mc cp --recursive minio/old-zentao-backup/ minio/zentao-backup/
迁移完成后,再配置ilm生命周期规则。
如果你需要,我可以把legalhold永久锁月度备份的片段合并到前面的shell备份脚本完整输出一份。
基于docker 运行的 minio 开启版本、对象锁
基于docker 运行的 minio,如何 开启版本、对象锁,请给我具体的操作命令和步骤。
Docker部署MinIO 开启版本控制 & 对象锁完整步骤
重要前置约束(S3协议硬性限制):
- 对象锁(Object Lock)只能在创建Bucket的时候开启,已经创建完成的Bucket,无论docker还是裸机,无法事后开启对象锁。
- 对象锁开启,会自动启用版本控制;版本控制可以后续单独开启。
- docker运行MinIO本身不需要额外启动参数,对象锁/版本控制是Bucket层面配置,不是容器启动参数。
环境:docker运行minio,mc客户端可以部署在宿主机,也可以装在minio容器内部;推荐宿主机安装mc,操作更方便。
环境信息示例
- MinIO docker容器名:
minio - MinIO服务地址:
http://127.0.0.1:9000 - AccessKey:
minioadmin - SecretKey:
minioadmin - mc别名:
docker-minio
方案一:宿主机安装mc客户端(推荐)
步骤1:宿主机安装mc客户端
# linux下载mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/mc
步骤2:配置mc连接docker里面运行的MinIO
mc alias set docker-minio http://127.0.0.1:9000 minioadmin minioadmin
验证连通:
mc ls docker-minio
步骤3:新建带【对象锁】的备份桶(重点!--with-lock)
⚠️ 如果你的gitlab‑backup、zentao‑backup桶已经提前创建,没有加
--with‑lock,不能开启对象锁。
处理方式:新建桶,迁移旧数据,废弃旧桶。
# 创建桶,--with-lock 开启对象锁,自动开启版本控制
mc mb --with-lock docker-minio/gitlab-backup
mc mb --with-lock docker-minio/zentao-backup
如果有旧桶需要迁移数据:
# 将旧桶全部数据拷贝到新带锁桶
mc cp --recursive docker-minio/old-gitlab-backup/ docker-minio/gitlab-backup/
mc cp --recursive docker-minio/old-zentao-backup/ docker-minio/zentao-backup/
步骤4:确认版本控制状态(--with‑lock创建的桶默认开启版本)
mc version info docker-minio/gitlab-backup
如果显示 Versioning: Enabled 代表正常。
如果意外关闭,可以手动开启版本:
mc version enable docker-minio/gitlab-backup
mc version enable docker-minio/zentao-backup
步骤5:设置桶默认保留策略 COMPLIANCE(备份防勒索)
# 0d:桶全局不设置强制保留时长,依靠ilm生命周期管理过期
mc retention set --default COMPLIANCE 0d docker-minio/gitlab-backup
mc retention set --default COMPLIANCE 0d docker-minio/zentao-backup
# 查询对象锁配置
mc retention info docker-minio/gitlab-backup
步骤6:配置生命周期ILM规则(沿用之前的规则)
# 清空旧规则
mc ilm rule rm --all docker-minio/gitlab-backup
mc ilm rule rm --all docker-minio/zentao-backup
# 日常备份30天过期,带backup_type=monthly标签跳过过期
mc ilm rule add docker-minio/gitlab-backup \
--tag "backup_type!=monthly" \
--expire-days 30
mc ilm rule add docker-minio/gitlab-backup \
--noncurrent-expire-days 30
mc ilm rule add docker-minio/gitlab-backup \
--expire-delete-marker true
mc ilm rule add docker-minio/zentao-backup \
--tag "backup_type!=monthly" \
--expire-days 30
mc ilm rule add docker-minio/zentao-backup \
--noncurrent-expire-days 30
mc ilm rule add docker-minio/zentao-backup \
--expire-delete-marker true
步骤7:月度归档备份,设置法律保留legal‑hold永久锁死对象
# 给月度备份开启法律保留,永久锁定,ilm不会删除
mc legalhold set docker-minio/gitlab-backup/gitlab-backup/20260901_020000_gitlab_backup.tar
mc legalhold set docker-minio/gitlab-backup/gitlab-config/gitlab-config-20260901_020000.tar.gz
mc legalhold set docker-minio/zentao-backup/zentao_full_20260901_020000.tar.gz
# 查看法律保留状态
mc legalhold info docker-minio/gitlab-backup/gitlab-backup/20260901_020000_gitlab_backup.tar
# 未来需要删除归档的时候,先清除锁
# mc legalhold clear docker-minio/gitlab-backup/gitlab-backup/20260901_020000_gitlab_backup.tar
步骤8:全套状态校验命令
#版本控制
mc version info docker-minio/gitlab-backup
#对象锁保留策略
mc retention info docker-minio/gitlab-backup
#生命周期
mc ilm list docker-minio/gitlab-backup
方案二:在MinIO容器内部使用mc客户端(不推荐,应急用)
#进入minio容器
docker exec -it minio bash
#容器内配置mc,访问本机minio服务
mc alias set local http://127.0.0.1:9000 minioadmin minioadmin
#创建带锁桶
mc mb --with-lock local/gitlab-backup
mc mb --with-lock local/zentao-backup
不建议日常使用,容器重建会丢失mc alias配置。优先使用宿主机mc。
WebUI图形界面操作(docker minio浏览器页面)
- 登录
http://宿主机IP:9001 - Buckets → Create Bucket
- 打开 Object Locking 开关,这个开关就是对象锁,开启自动打开Versioning版本控制。
✅注意:只有新建Bucket界面才有这个开关。已经存在的Bucket,页面没有Object Locking开关,无法开启对象锁,只能重建桶迁移数据。
- 创建完成后,Bucket设置里面可以配置 Retention 保留模式。
关键Docker-MinIO踩坑清单
- docker启动MinIO不需要增加任何环境变量、启动参数来开启对象锁;对象锁是Bucket属性,不是服务全局参数。
- 旧桶没有
--with‑lock,无论docker还是物理机,都不能后期打开对象锁,S3协议硬性限制。 - 对象锁开启后不能关闭桶的对象锁。
- 容器持久化存储:docker运行minio务必把数据目录映射到宿主机磁盘,底层磁盘建议RAID1/5,MinIO本身不做磁盘冗余。
示例docker run片段参考:
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-v /data/minio-data:/data \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
minio/minio server /data --console-address ":9001"
- 开启版本+对象锁会产生多版本对象,务必配置
--noncurrent‑expire‑days清理旧版本,否则磁盘持续上涨。 - 生命周期ILM是minio服务端异步执行,到期不会立刻删除,存在0‑24小时延迟属于正常现象。
备份脚本适配修改提示
你之前的shell备份脚本,只需要修改MINIO_ALIAS="docker-minio",其余逻辑完全不变,脚本每月1号自动打tag+legalhold锁月度备份。
如果你需要,我把带legalhold永久锁月度归档完整的最终版备份脚本一次性输出。
赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。

浙公网安备 33010602011771号