blob 軟刪除透過在系統中保留已刪除的資料一段時間,保護單一 blob、快照或版本免於意外刪除或覆寫。 在保留期限內,您可以將軟刪除的物件還原至該物件遭到刪除時的狀態。 保留期限屆滿後,該物件將永久刪除。
推薦的資料保護組態
Blob 軟刪除是帳戶內針對 Blob 資料的整體資料保護策略之一。 為了最佳保護你的 blob 資料,Microsoft 建議啟用以下資料保護功能:
Blob 虛刪除可以還原您已刪除的 Blob、快照集或版本。 若要了解如何啟用 Blob 虛刪除,請參閱啟用及管理 Blob 虛刪除。
容器軟刪除,用來還原你刪除的容器。 若要了解如何啟用容器虛刪除,請參閱啟用及管理容器虛刪除。
為了防範更廣泛的資料遺失情境,如帳號意外刪除或勒索軟體,建議除了帳號內功能外,還應啟用 Azure 備份。 若要深入了解 Microsoft 的資料保護建議,請參閱資料保護概觀。
提示
要在大規模啟用 blob 和容器軟刪除,請使用內建的 Azure 原則 「在儲存帳戶上為 blob 和容器設定軟刪除」。
Blob 虛刪除的運作方式
當你啟用儲存帳號的 blob 軟刪除時,請指定已刪除物件的保留期為 1 到 365 天。 保留期限表示資料在遭到刪除或覆寫之後,仍可提供使用的時間長度。 一旦物件被刪除或覆寫,保留期限的到期時間就會被設定。
在保留期間,你可以呼叫「還原刪除的 blob」操作,還原已刪除的 blob,連同其快照和版本。 下圖顯示啟用 blob 虛刪除時,如何還原已刪除的物件:
你可以隨時更新設定的保留期限。
如果你停用 blob 軟刪除,你可以繼續存取並恢復儲存帳號中被軟刪除的物件,直到軟刪除保留期結束。
Azure 儲存體 REST API 版本 2017-07-29 及以上支援 blob 軟刪除。
重要
你只能用 blob 軟刪除來還原單一的 blob 或目錄(在階層命名空間中),以及它們所有相關的快照和版本(僅限於平面命名空間)。 要恢復容器及其內容,你也必須啟用儲存帳號的容器軟刪除功能。
Blob 軟刪除不會在容器或帳戶層級提供保護。 參考 資料保護概述,根據您的工作負載提供保護建議。
啟用軟刪除時如何處理刪除
當你啟用 blob 軟刪除時,刪除一個 blob 會將該 blob 標記為軟刪除。 刪除過程不會產生快照。 當保留期限結束時,系統會永久刪除軟刪除的 blob。 在具有階層命名空間的帳號中,若 blob 被恢復,blob 的存取控制清單會保持完整。
如果 Blob 有快照,則除非您同時刪除這些快照,否則無法刪除 Blob。 當您刪除 blob 及其快照集時,blob 和快照集都會標示為虛刪除。 刪除過程不會產生新的快照。
您也可以在不刪除基底 Blob 的情況下刪除一或多個作用中快照。 在此情況下,快照會標記為虛刪除。
如果你刪除帳號中啟用階層命名空間功能的目錄,該目錄及其所有內容都會被標記為軟刪除。 你只能存取軟刪除的目錄。 若要存取已虛刪除目錄的內容,您需要先將已虛刪除的目錄還原。
軟刪除的物件除非你明確顯示或列出,否則它們是看不見的。 如需如何列出虛刪除物件的詳細資訊,請參閱管理與還原虛刪除 Blob。
啟用虛刪除時如何處理覆寫
重要
本節不適用於具有階層命名空間的帳戶。
呼叫運算 (例如放置 Blob、放置 Block 清單或複製 Blob) 會覆寫 blob 中的資料。 當你啟用 blob 軟刪除時,覆寫 blob 會自動建立一個 blob 在寫入作業之前狀態的軟刪除快照。 當保留期限屆滿時,系統會永久刪除軟刪除的快照。 系統執行的快照建立操作不會出現在 Azure 監視器 資源日誌或 儲存體分析 日誌中。
除非您明確顯示或列出已虛刪除的物件,否則虛刪除的快照集是不可見的。 如需如何列出虛刪除物件的詳細資訊,請參閱管理與還原虛刪除 Blob。
Blob 虛刪除無法防止作業寫入 blob 中繼資料或屬性。 當 blob 的中繼資料或屬性更新時,不會建立軟刪除的快照集。 要擷取 blob 的元資料,請參見 Blob 版本管理。
對於進階儲存體帳戶,虛刪除快照不會計入每個 Blob 的 100 個快照上限。
還原軟刪除的物件
您可以在保留期間內呼叫 Undelete Blob 作業,以還原虛刪除 Blob 或目錄 (在階層命名空間中)。 取消刪除 Blob 操作會還原一個 blob,以及任何與其相關聯的虛刪除快照或版本。 它會恢復保留期間被刪除的任何快照。 在具有階層命名空間的帳戶中,Blob 的存取控制清單也會隨著 Blob 一併還原。
在擁有階層命名空間的帳號中,你也可以使用 「還原 Blob 」操作來恢復軟刪除的目錄及其所有內容。 如果您重新命名含有已軟刪除 blobs 的目錄,則這些已軟刪除的 blobs 將會與目錄中斷連線。 若要還原那些 Blob,您必須將目錄名稱改回原始名稱,或建立另一個使用原始目錄名稱的目錄。 否則,當您嘗試還原那些已虛刪除 Blob 時會收到錯誤。 你也無法將目錄或 blob 還原到已存在同名目錄或 blob 的檔案路徑。 舉例來說,如果你刪除 a.txt (1)並上傳一個同樣名為 a.txt (2)的新檔案,你無法恢復軟刪除 a.txt 的(1),除非啟用的 a.txt (2)被刪除或重新命名。 在目錄取消刪除之前,您無法存取已虛刪除目錄的內容。
對未軟刪除的 blob 呼叫 Undelete Blob ,會恢復所有與該 blob 相關的軟刪除快照。 如果 blob 沒有任何快照集且未暫刪除,則呼叫還原 blob 不會有任何作用。
若要將虛刪除快照提升為基底 Blob,請先對基底 Blob 呼叫 Undelete Blob,以還原 Blob 與其快照。 接著,將所需的快照複製覆寫到基底 Blob 上。 您也可以將快照複製到新的 Blob。
在物件還原之前,你無法讀取軟刪除的 blob 或快照中的資料。
如需如何還原虛刪除物件的詳細資訊,請參閱管理與還原虛刪除 Blob。
提示
要根據你定義的條件,跨多個儲存帳戶大規模還原 blob,請使用 儲存任務。 儲存任務是 Azure 儲存體 Actions 中可用的資源:這是一個無伺服器框架,你可以用它來對跨多個儲存帳號的數百萬個物件執行常見的資料操作。 欲了解更多,請參閱 「什麼是 Azure 儲存行動?」
依作業區分的 Blob 虛刪除保護
下表說明啟用 blob 虛刪除時 (不論是否啟用 blob 版本設定) 刪除和寫入作業的預期行為。 在以下表格中, 「無變更 」表示無論是否啟用 blob 軟刪除,操作的行為都相同。
儲存體帳戶 (無階層命名空間)
| REST API 操作 | 已啟用虛刪除 | 已啟用虛刪除與版本控制 |
|---|---|---|
| 刪除儲存體帳戶 | 沒有變更。 已刪除帳戶中的容器和 Blob 無法復原。 | 沒有變更。 已刪除帳戶中的容器和 Blob 無法復原。 |
| 刪除容器 | 沒有變更。 已刪除的容器中的 blobs,除非啟用 容器軟刪除,否則無法復原。 | 沒有變更。 已刪除容器中的 Blob 無法復原。 |
| 刪除 Blob | 若用於刪除 blob,該操作會標記該 blob 為軟刪除。 若用於刪除 blob 快照,該操作會標記該快照為軟刪除。 |
如果用於刪除 Blob,目前版本會變成先前版本,且目前版本會被刪除。 此作業不會建立新版本,也不會產生已軟刪除的快照。 若用於刪除 blob 版本,該操作會標記該版本為軟刪除。 |
| Undelete Blob | 還原在保留期間內刪除的 Blob 與任何快照。 | 還原在保留期間內刪除的 Blob 與任何版本。 |
|
Put Blob 上傳區塊列表 Copy Blob 從 URL 複製 Blob |
若在活躍的 blob 上呼叫,該操作會自動產生該 blob 在操作前的狀態快照。 如果在軟刪除的 blob 上呼叫,只有當 blob 被同類型的 blob 取代時,操作才會產生該 blob 先前狀態的快照。 若 blob 類型不同,操作會永久刪除所有已軟刪除的資料。 |
操作會自動產生一個新版本,捕捉該 blob 在操作前的狀態。 |
| Put Block | 如果用於提交區塊到作用中 Blob,則不會有任何變更。 若用於將區塊提交至軟刪除的 blob,該操作會建立新的 blob,並自動產生快照以捕捉軟刪除 blob 的狀態。 |
沒有變更。 |
|
Put Page 從 URL 插入頁面 |
沒有變更。 操作覆蓋或清除的頁面 blob 資料不會被儲存,也無法恢復。 | 沒有變更。 操作覆蓋或清除的頁面 blob 資料不會被儲存,也無法恢復。 |
|
附加區塊 從 URL 添加區塊 |
沒有變更。 | 沒有變更。 |
| 設定 Blob 屬性 | 沒有變更。 覆寫的 Blob 屬性無法復原。 | 沒有變更。 覆寫的 Blob 屬性無法復原。 |
| 設定 Blob 中繼資料 | 沒有變更。 覆寫的 Blob 中繼資料無法復原。 | 操作會自動產生一個新版本,捕捉該 blob 在操作前的狀態。 |
| 設定 Blob 級別 | 基底 Blob 會移至新的層。 任何作用中或虛刪除的快照都會保留在原始層。 不會建立任何虛刪除快照。 | 基底 Blob 會移至新的層。 任何作用中或虛刪除的版本都會保留在原始層。 不會建立新的版本。 |
儲存體帳戶 (階層命名空間)
| REST API 作業 | 啟用軟刪除 |
|---|---|
| 刪除儲存體帳戶 | 沒有變更。 已刪除帳戶中的容器和 Blob 無法復原。 |
| 檔案系統:刪除 | 沒有變更。 已刪除容器中的 Blob 無法復原。 |
| 刪除容器 | 沒有變更。 已刪除容器中的 Blob 除非啟用 容器虛刪除,否則無法復原。 |
| 路徑 - 刪除 | 此操作會建立一個軟刪除的 blob 或目錄。 虛刪除物件會在保留期間後刪除。 |
| 刪除 Blob | 此操作會建立一個已虛刪除的物件。 虛刪除物件會在保留期間後刪除。 你無法刪除已有快照的 blob。 |
| Path - Create 會重新命名 Blob 或目錄 | 現有的目的地 blob 或空目錄會被軟刪除,來源會替換它。 虛刪除物件會在保留期間後刪除。 |
| 設定 Blob 到期,為現有 Blob 設定到期日 | 沒有變更。 過期的 Blob 到期時不會變成虛刪除 Blob。 |
功能支援
啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。
工作量考量
啟用軟刪除不會影響你現有的資料,但會改變刪除和覆寫操作的行為。 在啟用生產工作負載軟刪除前,請考慮以下因素:
列出所有 blobs 現在會回傳軟刪除的 blob。 這項改變影響最大。 那些使用 all 旗標(舊版 SDK 中為
BlobStates.All,或 v12BlobListingDetails.AllSDK 中為Azure.Storage.Blobs)列出 blob 的應用程式,啟用軟刪除後,就會開始在清單結果中收到已軟刪除的 blob。 假設只回傳活躍 blob 的應用程式邏輯可能會出現異常行為,備份或還原程序也可能將軟刪除的 blob 誤認為是活動資料。 在啟用前,請審核你的程式碼是否有所有 listing 旗標並進行測試。 若要只列出活躍的 blob,請使用BlobStates.None。 若要列出版本並排除軟刪除的 Blob,請使用BlobStates.Versioned。刪除和覆寫現在會保留資料並繼續計費。 當你啟用軟刪除時,刪除或覆寫一個 blob 並不會立刻釋放空間。 先前狀態會保留為軟刪除資料,並以與有效資料相同的費率計費,直到保留期限結束。 依賴刪除或覆寫操作來回收儲存空間的工作負載,會因保留期間期間產生額外成本。
頻繁覆寫的工作負載會累積已軟刪除的快照。 在 FNS 帳號中,如果沒有啟用版本控制,每次覆寫都會產生一個軟刪除快照,捕捉先前的狀態。 經常覆寫相同 Blob 的應用程式,如日誌、檢查點或暫存檔,可能會產生大量軟刪除資料,並導致非預期的成本。 如果您未變更 Blob 或快照集的階層,則需為整個 Blob 中的唯一資料區塊、其快照集,及其可能具有的任何版本支付費用。 請參閱螢幕擷圖:價格與帳單。 選擇一個反映你復原需求的保留期,且不會過度保留資料輪替。
在扁平命名空間帳戶上封鎖 DFS 端點。 當你在沒有階層命名空間的帳號啟用軟刪除時,透過 Data Lake Storage(DFS)端點(
*.dfs.core.windows.net)的操作會被阻擋,並因EndpointUnsupportedAccountFeatures而失敗。 改用 Blob 端點(*.blob.core.windows.net),或將帳號升級為階層命名空間,以便使用 DFS 端點並啟用軟刪除功能。
功能互動
Blob 版本設定
重要
階層命名空間不支援版本控制。
覆寫會產生一個版本,而不是軟刪除的快照: 如果你同時啟用 blob 版本控制和 blob 軟刪除,覆寫 blob 會產生一個新的前一個版本,捕捉該 blob 之前的狀態。 這個操作不會產生軟刪除快照。 新版本不會標記為虛刪除,且在虛刪除保留期間到期時也不會移除。
刪除先前版本僅軟刪除該版本: 刪除特定 先前版本,軟刪除該版本,該版本會保留至軟刪除保留期結束。 保留期結束後,軟刪除版本將永久刪除。
復原 Blob 可恢復所有軟刪除版本: 還原 Blob 操作會一次還原所有軟刪除的 blob 版本;你無法選擇性還原其中一個。 它不會將任何版本設為目前版本。 要恢復目前版本,先取消刪除,然後將想要的先前版本複製到基礎 blob 上。 更多資訊請參見 功能互動。
Blob 快照集
當版本控制被停用時,覆寫會產生軟刪除快照: 在沒有版本控制的平面命名空間帳號中,覆寫 blob 會自動產生一個軟刪除快照,捕捉寫入前該 blob 的狀態。 當保留期限屆滿時,快照會被永久刪除。
軟刪除保護你明確刪除的快照: 刪除活躍快照即軟刪除該快照,且會保留至保留期限結束。 你無法刪除帶有快照的基礎 blob,除非你也刪除它的快照。 當你刪除兩者時,你會把所有項目標記為軟刪除。
Premium 帳號不會將軟刪除快照計入快照限制: 在 Premium 區塊 blob 帳號中,軟刪除快照不計入每個 blob 100 張快照的限制。
生命週期管理
- 生命週期刪除動作會產生軟刪除物件: 當生命週期管理政策刪除 blob、快照或版本時,軟刪除仍然適用。 被刪除的物件會進入軟刪除狀態,並在保留期間內保持可恢復,而非立即被移除。 如果你使用生命週期規則來控制儲存成長,請考慮額外的保留時段,因為刪除的資料會持續計費直到保留期限結束。
永久刪除
- 永久刪除會覆蓋快照和版本的軟刪除保留: 如果你在帳號上啟用永久刪除功能,擁有適當權限的呼叫者可以在保留期限結束前永久移除軟刪除的快照和版本。 如果你想要整個保留期間的完整軟刪除保護,請關閉永久刪除。
容器虛刪除
Blob 軟刪除和容器軟刪除保護不同的範圍: Blob 軟刪除會還原個別的 blob、快照和版本,但無法恢復已刪除的容器。 容器軟刪除會恢復已刪除的容器及其內容,但無法防止存活容器中單一的 blob 被刪除。 這兩個功能是互補的,Microsoft 建議同時啟用兩者。
你無法從軟刪除的容器中還原單一 blob: 容器軟刪除會將整個容器還原到刪除時的狀態。 你無法選擇性地從軟刪除的容器中還原個別 Blob。 先還原整個容器,然後再處理其中的 blob。 欲了解更多資訊,請參閱 容器軟刪除。
已知的限制
它無法防止容器或帳號被刪除。 blob 軟刪除僅在 blob、快照、版本及目錄層級(在階層命名空間中)運作。 要恢復已刪除的容器及其內容,你也必須啟用容器軟刪除。 為了防範更廣泛的資料遺失情境,例如帳號意外刪除或勒索軟體,請啟用 Azure 備份。
它無法保護元資料或屬性寫入。 更新 blob 的元資料或屬性時,不會產生軟刪除快照。 你無法透過軟刪除來恢復這些變更。
不會保護階層式命名空間帳戶免於遭到覆寫。 對於具有階層命名空間的帳戶,軟刪除僅能防止刪除。 覆寫不會被擷取為軟刪除的快照,也無法恢復。
保留期限為1至365天,且無法延長。 一旦保留期限結束,保留期限將無法延長,且該物件將永久刪除。
永久刪除功能會覆寫軟刪除的保留期。 如果你在帳號啟用永久刪除功能,它可以在保留期限結束前永久移除軟刪除的快照和版本。
由「設定 Blob 到期日」所執行的刪除作業無法復原。 透過僅支援 ADLS 的 Set Blob Expiry 操作刪除的 blobs 不會變成軟刪除的 blob,也無法復原。
封鎖將平面命名空間帳戶升級為階層命名空間(ADLS)。 當你在扁平命名空間帳號啟用 blob 或容器軟刪除時,將帳號升級為階層命名空間會被阻擋(例如 via
Invoke-AzStorageAccountHierarchicalNamespaceUpgrade或az storage account hns-migration start)。 要遷移,先停用軟刪除,完成升級後再重新啟用軟刪除。 最好是在帳號建立時啟用 ADLS。
定價和帳務
所有虛刪除的資料都會比照作用中資料的相同費率計費。 當一個 blob 被軟刪除時,它會保持在同一層級,而你也在同一層級付費。 保存期限過後永久刪除的資料不會被收費。
啟用軟刪除時,請保留較短的期限,以更了解此功能如何影響帳單。 建議的最小保留期限為七天。
啟用對經常覆寫的資料進行軟刪除,可能會導致儲存容量增加,並在列出 blobs 時延遲增加。 當 Blob 遭覆寫或刪除時,您不會針對自動產生快照或版本的交易收費。 您會依寫入作業的交易費率,針對呼叫 Undelete Blob 作業收取交易費用。
如需有關 Blob 儲存體價格的詳細資訊,請參閱 Blob 儲存體定價頁面。
Blob 虛刪除與虛擬機器磁碟
Blob 虛刪除適用於進階與標準非受控磁碟,這些磁碟在內部是頁面 Blob。 虛刪除可協助您復原由 Delete Blob、Put Blob、Put Block List 與 Copy Blob 作業刪除或覆寫的資料。
呼叫Put Page覆寫的資料無法復原。 Azure 虛擬機器會使用 Put Page 呼叫來寫入非受控磁碟,因此,使用虛刪除來復原 Azure VM 對非受控磁碟所做的寫入,並不是支援的情況。
監視與疑難排解
若要在 Azure 入口網站中查看軟刪除的 blobs,請在容器檢視中啟用「顯示活躍與已刪除的 blobs」。
在程式設計上,可以使用 List Blobs 作業和 include=deleted(或 Azure.Storage.Blobs v12 SDK 中的 BlobStates.Deleted 旗標)來列出它們。 若要量化軟刪除的資料,請執行 Azure 儲存體 blob 庫存報告,並將 includeDeleted 篩選條件設為 true,然後彙總 Content-Length 欄位;請注意,Azure 監視器 中的 BlobCapacity 指標會報告總帳戶容量,且不會將軟刪除的資料與作用中資料分開。
我的應用程式開始傳回已刪除的 blob,或是在啟用虛刪除後失敗: 如果你的程式碼使用「all」旗標來列出 blob(在舊版 SDK 中為
BlobListingDetails.All,或在 v12 的Azure.Storage.BlobsSDK 中為BlobStates.All),現在結果中也會包含已虛刪除的 blob。 假設只回傳活躍 blob 的應用程式邏輯可能會出現異常行為,備份或還原程序也可能將軟刪除的 blob 誤認為是活動資料。 檢查你的程式碼是否有「all」列表旗標。 若要只列出活躍的 blob,請使用BlobStates.None;若要列出版本並排除軟刪除的 blob,請使用BlobStates.Versioned。我的 DFS 端點操作因 EndpointUnsupportedAccountFeatures 而失敗:在平面命名空間帳戶上,啟用軟刪除會封鎖 Data Lake Storage(DFS)端點。 對
*.dfs.core.windows.net的操作因EndpointUnsupportedAccountFeatures而失敗。 確認你的連線串或監控是否顯示 DFS 端點請求。 解決方法是將工作負載更新為使用 Blob 端點(*.blob.core.windows.net),或將帳號升級為階層命名空間,讓 DFS 端點在啟用軟刪除時正常運作。已刪除的 blob 不會出現在容器裡: 軟刪除的 blob 在標準清單操作中是隱藏的。 在 Azure 入口網站中,啟用顯示已刪除的 blobs;程式化地設定
include=deleted。 如果 blob 還是沒出現,請確認軟刪除是在刪除 blob 之前 就啟用了,且保留期限還沒過。我的 blob 被永久刪除了,儘管已啟用軟刪除: 請檢查以下兩件事。 首先,如果帳號啟用 永久刪除 功能,軟刪除的快照和版本可以在保留期限到期前移除;請關閉此功能以獲得全面保護。 其次,透過僅限 ADLS 的 Set Blob Expiry 操作刪除的檔案不會變成軟刪除,也無法復原。 否則,請確認保存期限尚未過,因為一旦過了資料就會永久移除。
啟用軟刪除後,我的儲存成本增加了: 軟刪除的 blob、快照和版本在保留期限結束前,會以與活躍資料相同的費用收費。 重覆寫工作負載在關閉版本控制時會迅速累積軟刪除快照。 使用 blob inventory 來識別軟刪除的資料,並考慮較短的保留期限。
我無法用 blob 軟刪除還原已刪除的容器: blob 軟刪除是保護個別 blob,不是容器。 如果容器被刪除,其 blobs 無法透過 blob 軟刪除還原。 容器恢復需要事先啟用容器軟刪除。 請參見 容器軟刪除。
我需要在因為啟用範圍過於廣泛後大規模停用軟刪除: 請參閱 為容器啟用虛刪除,了解如何使用各種工具停用軟刪除。
我設定的保留期限太長,希望我的 blob 能更早被永久刪除: 為了永久刪除已經軟刪除的 blob,請還原軟刪除的 blob,關閉 blob 軟刪除功能,然後重新刪除這些 blob。