全部產品
Search
文件中心

Object Storage Service:刪除OSS中的Bucket時提示“Bucket不為空白”

更新時間:Aug 28, 2026

問題描述

使用阿里雲Object Storage Service過程中,對於不再需要的Bucket,在使用OSS SDK、ossutil等工具刪除或者在控制台刪除時,刪除失敗,相應的報錯資訊如下:

  • 使用OSS SDK或者ossutil工具刪除Bucket時,提示“The bucket you tried to delete is not empty”錯誤。

  • 在OSS管理主控台中刪除Bucket時,提示“Bucket不為空白,請檢查該Bucket是否包含未刪除的Object或者未成功的Multipart片段”錯誤。

問題原因

需要刪除的Bucket中有未刪除的Object、片段、Livechannel或未完成的分區上傳任務,為了防止誤刪除的發生,OSS不允許刪除一個非空的Bucket。

解決方案

由於刪除Bucket後資料不可恢複,請您確保資料備份完成後,刪除該Bucket下的所有檔案(Object)、片段(Part)以及Livechannel,再次操作刪除Bucket,請參見以下操作刪除Bucket:

檢查Bucket中是否存在未刪除的檔案和片段

如何刪除的Bucket中不存在檔案和片段,具體操作如下:

  1. 登入OSS管理主控台。

  2. 單擊左側導覽列的Bucket 列表,然後單擊目標Bucket名稱。

  3. 在檔案清單頁簽下,查看下是否存在檔案。

  4. 單擊碎片管理頁簽,在碎片管理(Multipart)頁面,刪除片段檔案。

    • 如果要刪除該儲存空間所有的片段檔案,單擊刪除所有。

    • 如果要刪除部分片段檔案,選擇或搜尋片段檔案,然後單擊刪除。

  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。

    1. 在左側導覽列,選擇文件管理 > 檔案清單。

    2. 找到不再需要的歷史版本Object,單擊右側的徹底刪除。

    3. 單擊確定。

  4. 執行完以上操作後,可以嘗試刪除Bucket,測試是否可以刪除成功。如果還是報錯,請繼續執行下一步。

使用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

      系統顯示類似如下。

    • 如果未開啟版本控制功能,則返回結果為Disable。

  2. 執行完以上操作後,可以嘗試刪除Bucket,測試是否可以刪除成功。如果還是報錯,請繼續執行下一步。

排查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;
import com.aliyun.oss.common.auth.*;

public class DeleteLiveChannel {
    private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

    /**
     * 通過環境變數擷取訪問憑證
     */
    private static final EnvironmentVariableCredentialsProvider CREDENTIALS_PROVIDER = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

    private static String bucketName = "bucktname";
    
    public static void createLiveChannel() {

        // 建立OSSClient執行個體。
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        String liveChannelName = "liveChannelName1";
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
        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, CREDENTIALS_PROVIDER);

        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, CREDENTIALS_PROVIDER);
        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();
    }

}