OSS删除bucket报错Bucket不为空的排查方案

简介: 本文主要介绍在删除不使用的bucket时候报错bucket不为空无法删除的排查方法,来实现删除bucket;

背景

用户在使用OSS服务中对于不需要的bucket在清除时候
如果存储空间不为空则存储空间无法删除,必须删除存储空间中的所有文件、未完成的分片文件、存在的livechannel以及多版本数据,存储空间才能成功删除,下面会对于这四个因素来进行介绍查看和删除的方法。
image.png
本文使用的工具ossutil来进行操作。
注意:删除数据和bucket是不可逆的操作,确认bucket没有关键数据后再进行删除

存储文件和碎片查看和删除

查看bucket数据和碎片简单的方法是可以通过控制台查看下bucket中是否有存在文件,如果有可以使用控制台删除或者是工具ossuti删除
image.png
工具ossutil删除文件和碎片并删除bucket,命令如下

./ossutil rm oss://bucket1 -bar

如果指定以上操作再删除bucket的时候还是报错bucekt不为空,无法删除则继续排查多版本。

Bucket多版本查看和删除

多版本的作用是针对数据的覆盖和删除操作将会以历史版本的形式保存下来。通过文件(Object)的版本控制,在错误覆盖或者删除Object后,能够将Bucket中存储的Object恢复至任意时刻的历史版本,但是控制台和工具查看(不指定版本号的查询)只显示最新数据,历史版本不显示的。

  1. 查看是否开启版本控制
    image.png

2.命令查看
可以使用ousstil工具来查看
image.png
如果bucket是开启了版本控制功能,可以直接删除bucket中数据的版本数据,ossutil删除多版本命令

./ossutil rm oss://bucket1/ --all-versions -r

image.png
执行完以上操作后可以尝试删除bucket测试是否可以删除成功,如果还是报错bucket不为空,则排查bucket的Livechannel

Bucket查看和删除LiveChannel

目前对于bucket的LiveChannel查看和删除还未有工具和控制台的查看方法可以使用接口或者是SDK来实现操作,如下代码

至此涉及到所有的数据全部被清理,可以直接对于该bucket进行删除操作。


import java.util.List;
import com.alibaba.fastjson.JSON;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CreateLiveChannelRequest;
import com.aliyun.oss.model.CreateLiveChannelResult;
import com.aliyun.oss.model.ListLiveChannelsRequest;
import com.aliyun.oss.model.LiveChannelGenericRequest;
import com.aliyun.oss.model.LiveChannelListing;
import com.aliyun.oss.model.LiveChannelStatus;
import com.aliyun.oss.model.LiveChannelTarget;
import com.aliyun.oss.model.LiveChannel;

public class DeleteLiveChannel {
     private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
     // 阿里云主账号 AccessKey 拥有所有 API 的访问权限,风险很高。
     // 强烈建议您创建并使用 RAM 账号进行 API 访问或日常运维,请登录 https://ram.console.aliyun.com 创建 RAM 账号。
     private static String accessKeyId = "xx";
     private static String accessKeySecret = "xx";
     private static String bucketName = "bucktname";
    
    public static void createLiveChannel() {

        // 创建 OSSClient 实例。
        String liveChannelName = "liveChannelName1";
        OSS oss = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
                liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
        CreateLiveChannelResult result = oss.createLiveChannel(request);

        //获取推流地址。
        List<String> publishUrls = result.getPublishUrls();
        for (String item : publishUrls) {
            System.out.println(item);
        }

        //获取播放地址。
        List<String> playUrls = result.getPlayUrls();
        for (String item : playUrls) {
            System.out.println(item);
        }

        oss.shutdown();
    }
    public static void listLiveChannels() {
       

        // 创建 OSSClient 实例。
        OSS oss = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        ListLiveChannelsRequest request = new ListLiveChannelsRequest(bucketName);
        LiveChannelListing liveChannelListing = oss.listLiveChannels(request);
        List<LiveChannel> list = liveChannelListing.getLiveChannels();
        for(LiveChannel i:list){
            deleteLiveChannel(i.getName());
        }
        oss.shutdown();
    }
    public static void deleteLiveChannel(String liveChannelName) {

        // 创建 OSSClient 实例。
        OSS oss = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        LiveChannelGenericRequest request = new LiveChannelGenericRequest(bucketName, liveChannelName);
        System.out.println("Delete liveChanne "+liveChannelName+" Done");
        try {
            oss.deleteLiveChannel(request);
        } catch (OSSException ex) {
            ex.printStackTrace();
        } catch (ClientException ex) {
            ex.printStackTrace();
        } finally {
            oss.shutdown();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DeleteLiveChannel.listLiveChannels();
    }

}
相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
7月前
|
Web App开发 监控 安全
OSS客户端签名直传实践:Web端安全上传TB级文件方案(含STS临时授权)
本文深入解析了客户端直传技术,涵盖架构设计、安全机制、性能优化等方面。通过STS临时凭证与分片上传实现高效安全的文件传输,显著降低服务端负载与上传耗时,提升系统稳定性与用户体验。
725 2
|
7月前
|
存储 Prometheus 监控
OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
本方案基于Prometheus构建OSS监控系统,涵盖架构设计、指标采集、可视化、告警及性能优化,助力企业实现高可用、低成本的自建监控体系。
756 1
|
7月前
|
存储 人工智能 运维
防御OSS Bucket泄露:RAM权限策略+日志审计+敏感数据扫描三重防护
云存储安全三重防护体系,聚焦RAM权限控制、日志审计与敏感数据扫描,通过策略精控、异常检测与主动扫描构建闭环防御,有效应对配置错误导致的数据泄露风险,提升企业云上数据安全性。
509 0
|
5月前
|
存储 安全 对象存储
OSS遭遇滥用:内容涉诈导致bucket被封禁
近期,有诈骗分子批量利用阿里云客户应用系统的文件上传漏洞,将诈骗内容存储到客户开放公开读的OSS Bucket 中,然后利用OSS公共域名的可信特点,诱骗受害者扫码填写个人信息造成财产损失。受害者报案后,因涉嫌参与诈骗链条,客户相关的 OSS Bucket 面临因涉嫌参与诈骗链条封禁风险。
|
7月前
|
存储 运维 分布式计算
OSS迁移实战:从自建MinIO到阿里云OSS的完整数据迁移方案
本文介绍了从自建MinIO迁移至阿里云OSS的完整方案,涵盖成本优化、稳定性提升与生态集成需求。通过双写代理、增量同步、分层校验等技术,解决数据一致性、权限迁移、海量小文件处理等挑战,实现业务零中断与数据强一致性,最终达成79%的TCO降低和显著性能提升。
1857 0
|
分布式计算 DataWorks 调度
oss数据同步maxcompute报错
在使用阿里云DataWorks同步OSS数据至MaxCompute时,遇到“Input is not in the .gz format”的报错。问题源于目标目录中存在一个空文件,导致同步时识别错误。
|
10月前
|
关系型数据库 数据库 对象存储
Dify实践|Dify on DMS+对象存储OSS,实现多副本部署方案
本文介绍了在DMS上部署Dify的详细步骤,用户可选择一键购买资源或基于现有资源部署Dify,需配置RDS PostgreSQL、Redis、AnalyticDB for PostgreSQL等实例,并设置存储路径和资源规格。文中还提供了具体配置参数说明及操作截图,帮助用户顺利完成部署。
|
存储 人工智能 数据管理
云端问道17期方案教学-AI场景下的对象存储OSS数据管理实践
本文介绍了AI场景下的对象存储OSS数据管理实践,由阿里云技术专家明锦分享。主要内容分为两部分:1) AI场景下对象存储实践方案,包括对象存储的应用、优势及在模型推理中的优化;2) OSS常用工具介绍,如OSSFS、Python SDK、Go SDK等,并详细说明了这些工具的特点和使用场景。文中还探讨了不同模式下的性能优化,以及即将推出的OS Connector for AI/ML工具,旨在提升数据下载速度和IO性能。
315 0
|
Java Serverless 数据库连接
函数计算操作报错合集之调用打包的OSS函数时发生报错,该怎么办
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
260 2
|
弹性计算 JavaScript Ubuntu
ECS 挂载 OSS 多Bucket
ECS 挂载 OSS 多Bucket
284 0

热门文章

最新文章