开发者社区> 问答> 正文

【OSS】删除OSS中的Bucket时提示“Bucket不为空”,如何处理?

已解决

删除OSS中的Bucket时提示“Bucket不为空”,如何处理?

展开
收起
云上猫猫 2022-01-18 11:14:23 1198 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    由于删除Bucket后数据不可恢复,请您确保数据备份完成后,删除该Bucket下的所有文件(Object)、碎片(Part)以及Livechannel,再次操作删除Bucket,请参见以下操作删除Bucket:

    检查Bucket中是否存在未删除的文件和碎片

    如何删除的Bucket中不存在文件和碎片,具体操作如下:

    1、登录OSS管理控制台。

    2、单击左侧导航栏的Bucket列表,然后单击目标Bucket名称。

    3、在文件管理页签下,查看下是否存在文件。

    a.如果存在,可以选择一个或多个文件,选择批量操作>删除,删除文件。或者通过工具ossuti删除,详情请参见使用ossutil工具删除Bucket、文件和碎片。

    b.如果不存在,请继续执行下一步。

    4、单击碎片管理,在碎片管理页面,删除碎片文件。

    a.如果要删除该存储空间所有的碎片文件,单击删除所有。

    b.如果要删除部分碎片文件,选择或搜索碎片文件,然后单击删除。

    5、使用ossutil工具,执行以下命令,删除Bucket。如果还是存在Bucket不为空的报错,请继续执行下一步。

    ./ossutil rm oss://[$Bucket_Name] -bar

    说明:[$Bucket_Name]为Bucket名称。

    检查是否存在历史版本Object

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

    • 在OSS管理控制台删除

    1、登录OSS管理控制台。

    2、单击Bucket列表,然后单击目标Bucket名称。

    3、在左侧导航栏,选择冗余与容错>版本控制,检查是否开启了版本控制功能。如果开启了版本控制功能,请执行以下操作,删除历史版本Object。

    a.在Bucket管理页面,单击文件管理。

    b.找到不再需要的历史版本Object,单击右侧的彻底删除。您也可以批量选中待删除的历史版本,单击批量操作>彻底删除。

    c.单击确定。

    4、执行完以上操作后,可以尝试删除Bucket,测试是否可以删除成功,如果还是报错,请执行排查Bucket中是否存在LiveChannel。

    • 使用ossutil工具查看

    1、通过执行以下命令查看是否开启版本控制功能,详情请参见bucket-versioning(版本控制)。

    ./ossutil bucket-versioning --method get oss://[$Bucket_Name]

    系统显示类似如下。

    bucket versioning status:Enabled

    如果开启了版本控制功能,则返回结果为Enabled,可执行以下命令,删除Bucket中的历史版本Object数据。

    ./ossutil rm oss://[$Bucket_Name]/ --all-versions -r

    系统显示类似如下。

    1.png

    如果未开启版本控制功能,则返回结果为Disable。

    执行完以上操作后,可以尝试删除Bucket,测试是否可以删除成功,如果还是报错,请执行排查Bucket中是否存在LiveChannel。

    排查Bucket中是否存在LiveChannel

    Bucket的LiveChannel查看和删除暂不支持通过工具和控制台操作,可以使用接口或者是SDK来实现操作,请参见DeleteLiveChannel,删除指定的LiveChannel。示例代码如下:

    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();
        }
    
    }
    
    2022-01-18 11:30:12
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载