minio开启版本、对象锁等配置

MinIO 版本控制 & 对象锁完整说明

⚠️关键限制(社区版MinIO,遵循S3标准):对象锁(Object‑Lock)只能在创建桶的时候开启,已经存在的旧桶无法后期追加开启对象锁
如果你的桶已经建好,没有开启对象锁:只能重建桶,使用mc mb --with-lock新建桶,再把旧数据迁移过去。
对象锁开启会自动开启版本控制;版本控制可以后期单独开关。

两个概念区分

  1. 版本控制(Versioning):保存对象多版本,覆盖删除不会直接丢数据,可以后期开启关闭。
  2. 对象锁(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,不能直接开启对象锁,处理方案:

  1. 新建带锁桶;
  2. mc cp --recursive迁移全部旧对象;
  3. 旧桶废弃。

二、如果桶已经是--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控制台操作方式(图形界面)

  1. 创建Bucket → 打开Object Locking(对象锁定)开关,开启后自动打开Versioning版本控制。
  2. 已有桶:创建时没有打开Object Locking,控制台也无法开启,只能重建。
  3. 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

七、踩坑注意事项

  1. 已经存在的普通桶,无法后期开启对象锁,必须重建桶迁移数据,这是S3原生限制,社区版MinIO无法绕过。
  2. 对象锁开启之后不能关闭桶的对象锁,一旦开启永久生效。
  3. retention是有时间期限;legal‑hold是永久锁定,二者可以叠加。
  4. 生命周期ilm删除对象,对开启legal‑hold法律保留的对象不会生效,月度归档不会被清理,正好适配备份场景。
  5. COMPLIANCE模式下,哪怕admin账号,也不能删除还在保留期内的对象,只能等时间到期,或者先清除legal‑hold。
  6. 版本控制会产生大量版本,需要配置--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协议硬性限制):

  1. 对象锁(Object Lock)只能在创建Bucket的时候开启,已经创建完成的Bucket,无论docker还是裸机,无法事后开启对象锁
  2. 对象锁开启,会自动启用版本控制;版本控制可以后续单独开启。
  3. 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浏览器页面)

  1. 登录 http://宿主机IP:9001
  2. Buckets → Create Bucket
  3. 打开 Object Locking 开关,这个开关就是对象锁,开启自动打开Versioning版本控制。

✅注意:只有新建Bucket界面才有这个开关。已经存在的Bucket,页面没有Object Locking开关,无法开启对象锁,只能重建桶迁移数据。

  1. 创建完成后,Bucket设置里面可以配置 Retention 保留模式。

关键Docker-MinIO踩坑清单

  1. docker启动MinIO不需要增加任何环境变量、启动参数来开启对象锁;对象锁是Bucket属性,不是服务全局参数。
  2. 旧桶没有--with‑lock,无论docker还是物理机,都不能后期打开对象锁,S3协议硬性限制。
  3. 对象锁开启后不能关闭桶的对象锁
  4. 容器持久化存储: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"
  1. 开启版本+对象锁会产生多版本对象,务必配置--noncurrent‑expire‑days清理旧版本,否则磁盘持续上涨。
  2. 生命周期ILM是minio服务端异步执行,到期不会立刻删除,存在0‑24小时延迟属于正常现象。

备份脚本适配修改提示

你之前的shell备份脚本,只需要修改MINIO_ALIAS="docker-minio",其余逻辑完全不变,脚本每月1号自动打tag+legalhold锁月度备份。

如果你需要,我把带legalhold永久锁月度归档完整的最终版备份脚本一次性输出。

posted @ 2026-08-31 17:46  念槐聚  阅读(8)  评论(0)    收藏  举报