操作场景
您可以通过OBS管理控制台、API、SDK、OBS Browser+、obsutil方式删除无用的文件或文件夹,以优化存空间,节约成本。
本小节主要介绍如何手动删除文件或文件夹。手动和自动删除对比参见表1。
表1 删除方式 | 场景 | 删除规则 | 规则说明 |
| 未开启多版本控制功能 | 单个删除 | 如果需要对少量或者无规律的文件进行删除时,可以选择具体某个文件,然后进行删除操作。 |
| 批量删除 | 如果需要删除桶中大量文件,或者删除一些周期性的文件,可以通过勾选多个文件,以批量方式删除文件。还可以通过生命周期功能,定期自动删除桶中对象,提高删除效率。了解如何结合生命周期删除对象,请参见结合生命周期。 |
| 已开启/暂停多版本控制功能 | 单个删除 | 如果需要对少量或者无规律的文件进行删除时,可以选择手动方式。 |
| 批量删除 | 如果需要删除桶中大量文件,或者删除一些周期性的文件,可以通过勾选多个文件,以批量方式删除文件。还可以通过生命周期功能,定期自动删除桶中对象,提高删除效率。了解如何结合生命周期删除对象,请参见结合生命周期。 |
对于并行文件系统目录,大数据场景下(目录层级深、目录下文件多)的删除,可能会因超时而删除失败,建议使用:
- hadoop 客户端(嵌套OBS客户端插件OBSA)删除目录:hadoop fs - rmr obs://{并行文件系统名}/{目录名}。
- 给目录配置生命周期,通过生命周期后台删除。
注意事项
对于重要文件可新增数据备份,以防止误删除。相关操作可参考复制对象。
权限控制
只有对象拥有者和被授予obs:object:DeleteObject(未开启多版本)、obs:object:DeleteObjectVersion(开启或暂停多版本)权限的用户才能删除对象。您可以使用IAM或桶策略进行授权,授权操作请参见创建IAM自定义策略或自定义创建桶策略。
如果您在 IAM 用户或角色策略中拥有删除对象的权限或授权,但是删除对象失败,可能是SCP策略或桶策略中对于 obs:object:DeleteObject(未开启多版本)、obs:object:DeleteObjectVersion(开启或暂停多版本)包含了 Deny 语句。请先放开该权限,然后再进行删除对象操作。
与其他功能结合使用
OBS支持多版本控制功能,通过多版本控制,用户可以在一个桶中保留多个版本的对象,还可以更方便地检索和还原各个版本,在意外操作或应用程序故障时快速恢复数据。删除对象有丢失数据的风险,需要谨慎操作,而利用多版本控制功能可以降低该风险。了解更多多版本相关信息请参见多版本控制。
| 场景 | 删除对象的当前版本 | 删除对象的历史版本 |
| 未开启多版本控制功能 | OBS将彻底删除这些对象,已删除的对象不可恢复,请谨慎操作。 | 不涉及 |
| 暂停多版本控制功能 | - 如果当前版本没有删除标记且当前版本ID不为null,则当前版本会成为历史版本,系统创建ID为null的删除标记成为当前版本。
- 如果当前版本没有删除标记且当前版本ID为null,则系统创建ID为null的删除标记直接覆盖当前版本。此时,删除标记成为最新版本,被覆盖的版本数据无法恢复。
- 如果当前版本有删除标记,则不执行任何操作。
说明: - 暂停多版本后,新上传的对象版本号为null。如果之前有空版本号的同名对象,则上传对象会覆盖该带空版本号的对象。
- 开启“历史版本”开关,可以查看一个对象的版本ID。
| 删除的历史版本无法恢复。 |
| 已开启多版本控制功能 | - 如果当前版本没有删除标记,删除后系统会创建删除标记,当前版本会成为历史版本,删除标记成为当前版本。
- 如果当前版本有删除标记,执行彻底删除操作后,则删除带删除标记的版本对象,即恢复对象。
| 删除的历史版本无法恢复。 |
由于打开了WORM开关的桶默认开启了多版本,当您不指定版本号进行删除对象操作时,由于多版本机制并不会真正删除此对象,您的操作可以成功并为最新版本的对象产生一个带唯一版本号的删除标记。当您指定版本号进行删除对象操作时,如果对象处于WORM保护状态,WORM的保护模式会限制对象的删除。删除标记不会被WORM保护。
结合生命周期
用户通过配置生命周期规则,定期清理不需要的文件夹和文件,可以释放存储空间,节约存储成本。执行生命周期规则时,OBS会根据桶的多版本状态,针对文件执行不同的删除操作。了解使用生命周期删除对象相关信息,请参见使用生命周期删除和转换对象存储类别的规则。
使用方式
OBS支持通过管理控制台、API、SDK、OBS Browser+、obsutil方式删除对象或文件夹,单次最多可删除1000个对象。
删除未开启多版本控制的对象
删除对象
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 选中待删除的文件或文件夹,并单击右侧的“更多 > 删除”。
图1 删除文件或文件夹 
- 单击“确定”,确认删除文件或文件夹。
图2 删除对象 
如果您的删除对象所在的OBS桶启用了多版本控制功能,那么删除的对象不会被立即删除,而是保留在对象列表中(打开对象列表上方的“历史版本”开关即可看到),该对象的历史版本仍然会被保存下来且会占用存储空间,因此OBS仍然会对所有版本收取存储费用。如果您不再需要该对象,为避免删除后持续计费,请再按照以下步骤进行彻底删除。
- 对于启用了多版本控制或者已暂停多版本控制的OBS桶,想要彻底删除文件或文件夹,还需要执行以下步骤:
- 启用“历史版本”开关。
- 勾选所有对象版本,单击搜索栏上方的“彻底删除”。
图3 彻底删除对象 
- 单击弹窗中的“确定”,完成对象的彻底删除。
批量删除对象
如果需要删除桶中大量文件,或者删除一些周期性的文件,可以通过勾选多个文件,以批量方式删除文件。
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 根据实际需求情况,勾选全部或需要删除的多个文件或文件夹,单击文件列表上方的“删除”。
- 单击“确定”,确认删除文件或文件夹。
还可以通过生命周期功能,定期自动删除桶中对象,提高删除效率。了解如何结合生命周期删除对象,请参见结合生命周期。
删除已开启/暂停多版本控制的对象
删除对象
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 启用“历史版本”开关。
- 勾选需要删除的文件或文件夹,单击搜索栏上方的“彻底删除”。
图4 彻底删除对象 
- 单击弹窗中的“确定”,删除对象成功。
批量删除对象
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 启用“历史版本”开关。
- 根据实际需求情况,勾选全部或需要删除的多个文件或文件夹,单击搜索栏上方的“彻底删除”。
- 单击弹窗中的“确定”,批量删除对象成功。
使用SDK
使用BrowserJS SDK与OBS服务交互时,必须将AK/SK暴露到前端,这样会存在安全问题。为避免该问题出现,可让后端生成临时签名URL给前端,前端再与OBS交互。相关操作请参见如何在不暴露AKSK的条件下实现与OBS交互。
使用图形化工具OBS Browser+
- 登录OBS Browser+。
- 选中待配置的桶,进入文件列表。
- 右键待删除的文件或文件夹,并单击“删除”。
也可以选中多个文件或文件夹,单击文件列表上方的“更多>删除”进行批量删除。
- 选中待删除的文件或文件夹后,在消息确认框中单击“是”。
使用命令行工具obsutil
命令结构:
- Windows操作系统
- 删除单个对象
obsutil rm obs://bucket/key [-f] [-versionId=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量删除对象
obsutil rm obs://bucket/[key] -r [-j=1] [-f] [-v] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- macOS/Linux操作系统
- 删除单个对象
./obsutil rm obs://bucket/key [-f] [-versionId=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量删除对象
./obsutil rm obs://bucket/[key] -r [-j=1] [-f] [-v] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
运行示例:
- 以Windows操作系统为例,运行obsutil rm obs://bucket-test/key -f,删除bucket-test桶中名为key的单个对象。
obsutil rm obs://bucket-test/key -f
Start at 2024-09-25 04:48:10.1147483 +0000 UTC
Delete object [key] in the bucket [bucket-test] successfully, cost [152], request id [0000016979E1D2B2860BB5181229C72C]
参数说明:
| 参数 | 约束 | 描述 |
| bucket | 必选 | 桶名。 |
| key | 删除单个对象时必选 批量删除对象时可选 | 待删除的对象名,或批量删除的对象名前缀。 说明: 批量删除对象时,如果该参数为空,则表示删除桶中所有的对象。请谨慎操作。 |
| fr | 附加参数,删除单个对象时可选 | 删除单个对象时生成结果清单文件。 |
| f | 附加参数,可选 | 强制操作,不进行询问提示。请谨慎使用。 |
| versionId | 附加参数,删除单个对象时可选 删除多版本对象时必选。 | 待删除对象的版本号。 |
| r | 附加参数,批量删除对象时必选 | 按指定的对象名前缀批量删除对象。 注意: 批量删除对象时,会将与前缀匹配的所有对象删除,请谨慎使用。 |
| j | 附加参数,批量删除对象时可选 | 批量删除对象时的最大并发数,默认为配置文件中的defaultJobs。 |
| v | 附加参数,批量删除对象时可选 | 按指定的对象名前缀批量删除多版本对象和多版本删除标记。 |
| o | 附加参数,可选 | 生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果和失败结果两个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。 说明: - 结果清单文件命名规则:rm_{succeed | failed}_report_时间_TaskId.txt。
- 单个结果清单文件默认情况下最大为30MB且最大可保留的文件个数为1024,可在配置文件中通过recordMaxLogSize和recordBackups分别配置。
- 当涉及多文件/文件夹时,如需确认失败任务的具体错误信息,可参考结果清单文件夹下的失败结果清单文件“cp_failed_report_时间_TaskId.txt”和日志路径下的日志文件。
|
| bucket-cname | 附加参数,可选 | 指定桶绑定的自定义域名 |
| config | 附加参数,可选 | 运行当前命令时的自定义配置文件。可支持的配置参数请参考配置参数说明。 |
| e | 附加参数,可选 | 指定终端节点。 |
| i | 附加参数,可选 | 指定用户的AK。 |
| k | 附加参数,可选 | 指定用户的SK。 |
| t | 附加参数,可选 | 指定用户的securitytoken。 |
响应结果:
| 字段名 | 描述 |
| Parallel | 请求中的-p参数。 |
| Jobs | 请求中的-j参数。 |
| Threshold | 请求中的-threshold参数。 |
| PartSize | 请求中的-ps参数。 |
| Exclude | 请求中的-exclude参数。 |
| Include | 请求中的-include参数。 |
| TimeRange | 请求中的-timeRange参数。 |
| VerifyLength | 请求中的-vlength参数。 |
| VerifyMd5 | 请求中的-vmd5参数。 |
| CheckpointDir | 请求中的-cpd参数。 |
| OutputDir | 请求中的-o参数。 |
| ArcDir | 请求中的-arcDir参数。 |
| Succeed count | 成功的任务数。 |
| Failed count | 失败的任务数。 |
| Skip count | 增量上传/下载/复制、同步上传/下载/复制跳过的任务数。 |
| Warning count | 执行完成但包含警告的任务数。 说明: - 产生警告的任务可能是失败的也可能是成功的,需要根据成功或失败的结果清单进一步判断。
- 产生警告的任务数与成功/失败任务数是相互独立的,总任务数仍是成功的任务数+失败的任务数。
|
| Succeed bytes | 上传/下载成功的字节数。 |
| max cost | 所有任务中的最长耗时,单位:毫秒。 |
| min cost | 所有任务中的最短耗时,单位:毫秒。 |
| average cost | 平均耗时,单位:毫秒。 |
| average tps | 平均每秒的任务完成个数。 |
| Task id | 每次运行的唯一标识号,用于查找批量任务生成的结果清单文件。 |
日志与监控
为帮助用户及时感知并处理删除操作,OBS提供了从实时感知到事后审计的完整管控能力。用户可以配置删除对象监控的操作REST.PUT.NOTIFICATION,系统会记录所有删除对象操作的详细日志,供用户审计或进一步分析。了解配置监控日志相关操作,请参见使用桶日志记录OBS日志信息。