Ceph CSI 鏡像刪除流程與 Trash 機制失效問題分析文檔

#作者:閆乾苓

文章目錄

  • 一、問題背景
  • 二、實際行為
  • 三、源碼分析
  • 四、分析與推論
  • 五、期望行為與建議優化
  • 六、結論

一、問題背景

在生產環境中,為避免因誤操作導致的永久數據丟失,Ceph RBD 提供了 Trash 功能,允許將鏡像“軟刪除”至回收站,再手動恢復或延遲清理。
Kubernetes 集群中通過 Ceph-CSI 插件動態創建 RBD PVC 時,預期在刪除 PVC 后,后端 RBD 鏡像應移動到 Trash 而非直接刪除。為此,系統設置了如下配置:
ceph config set client.rbd rbd_move_to_trash_on_remove true
并確認所有相關 Ceph 客戶端配置已生效:
ceph config dump | grep rbd_move_to_trash_on_remove
client.csi-rbd-node basic rbd_move_to_trash_on_remove true
client.csi-rbd-provisioner basic rbd_move_to_trash_on_remove true
client.rbd basic rbd_move_to_trash_on_remove true

二、實際行為

經多次測試與日志分析發現,即便 rbd_move_to_trash_on_remove=true 已生效,在執行 PVC 刪除操作后:

  • 對應的 RBD 鏡像會短暫進入 Trash;
  • 隨即被立即永久刪除;
  • 最終在 Ceph 后端無法找到該鏡像,無任何 Trash 留存記錄。

該行為顯著違背了 Trash 設計初衷,可能對數據安全構成嚴重隱患。

三、源碼分析

CSI RBD 插件刪除流程路徑(基于 ceph-csi v3.9.x+):
文件:internal/rbd/rbd_util.go

調用棧概覽:

DeleteImage()
└── deleteImage()├── rbdImage.Trash(0)              // 行號約為 699,將鏡像移動到 trash└── trashRemoveImage(...)          // 行號約為 710,立即從 trash 中刪除

關鍵代碼片段解析

// 1. 將鏡像移動到 Trash
err = rbdImage.Trash(0) // 調用 librbd C API: rbd_trash_move
if err != nil {return err
}// 2. 立即清理 Trash 中的鏡像
err = trashRemoveImage(...)

即,CSI 插件顯式繞過了配置項 rbd_move_to_trash_on_remove 所定義的軟刪除行為,而是先主動調用 rbd_trash_move(),再調用 rbd_trash_remove() 徹底刪除鏡像。
這種行為導致:

  • 用戶即使啟用了 Trash 機制,也無法避免 PVC 刪除后數據永久丟失;
  • rbd rm 未被調用,但實現效果等同于 rbd rm。

四、分析與推論

  1. 為何不直接調用 rbd rm?
    可能出于以下設計意圖:
    ?保證鏡像結構一致性(先 trash 再刪邏輯清晰);
    ?利于插入延遲刪除(如后續引入保留時間);
    ?與 Ceph API 接口保持兼容性。
  2. 為何默認行為是立即刪除 Trash 中鏡像?
    源代碼中并未根據配置 rbd_move_to_trash_on_remove 判斷是否保留 Trash 中的鏡像,這導致 Trash 機制在 CSI 插件中形同虛設。

五、期望行為與建議優化

  1. 理想行為
    當設置 rbd_move_to_trash_on_remove=true 時:
  • Ceph-CSI 刪除鏡像應遵循客戶端配置;
  • 鏡像應進入 Trash 并保留,供后續手動恢復或延遲清理;
  • 用戶可通過 rbd trash list 查詢已刪除鏡像。
  1. 推薦優化方向
  • Ceph-CSI 插件層
    在 deleteImage() 中增加配置判斷邏輯,按需 skip trashRemoveImage() 調用:
if rbd_move_to_trash_on_remove_enabled {// Only move to trash, do not removereturn nil
}
  • 文檔更新
    明確說明當前 CSI 插件會直接刪除鏡像,不受 rbd_move_to_trash_on_remove 控制。
  • 提供 CSI 參數控制
    增加如 retainDeletedRBDImages: true 的 StorageClass 參數,使用戶可控制 Trash 保留行為。

六、結論

Ceph CSI 插件當前刪除 RBD 鏡像的實現方式存在與用戶預期不符的問題:

  • 明顯忽略了 Ceph 客戶端配置 rbd_move_to_trash_on_remove;
  • 盡管鏡像短暫進入 Trash,仍立即被永久刪除;
  • 可能造成誤刪數據無法恢復,存在嚴重數據安全隱患。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918885.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET Framework 3.5 不原生支持PreApplicationStartMethod特性

.NET Framework 3.5 不原生支持PreApplicationStartMethod特性。這個特性是在 .NET Framework 4.0 中引入的,用于在應用程序啟動早期執行初始化邏輯。 在.NET 3.5 中,如果你需要實現類似的 “應用啟動時自動注冊模塊” 功能,需要通過手動配置…

智能巡檢技術淺析

從機載智能硬件到深度學習算法,從實時邊緣計算到數字孿生平臺,無人機AI智能巡檢通過多模態感知、自主決策和持續進化,實現從"被動檢查"到"主動預防"的跨越式發展。機載智能硬件邊緣計算與機載AI芯片當代先進巡檢無人機已…

【圖像算法 - 11】基于深度學習 YOLO 與 ByteTrack 的目標檢測與多目標跟蹤系統(系統設計 + 算法實現 + 代碼詳解 + 擴展調優)

前言 詳細視頻介紹 【圖像算法 - 11】基于深度學習 YOLO 與 ByteTrack 的目標檢測與多目標跟蹤系統(系統設計 算法實現 代碼詳解 擴展調優)在計算機視覺應用中,目標檢測與多目標跟蹤的結合是實現智能視頻分析的關鍵。本文基于 YOLO 檢測模…

AI加持下的智能路由監控:Amazon VPC Direct Connect實戰指南

> 一次流量突增引發的生產事故,如何催生出融合流日志、機器學習與自動化告警的智能監控體系 深夜2點,電商平臺運維負責人李明的手機瘋狂報警——北美用戶下單量斷崖式下跌。他緊急登錄系統,發現跨境專線延遲飆升至2000ms。**經過3小時的排查**,罪魁禍首竟是新部署的CDN…

具身智能競速時刻,百度百舸提供全棧加速方案

2025年,全球具身智能賽道迎來快速發展期,技術方向日益清晰。每一家企業都面臨著同樣的核心命題:如何將前沿的模型能力,轉化為在真實世界各類場景中可規模化應用落地的機器人產品?這背后,是研發團隊對模型迭…

JavaScript 壓縮與混淆實戰:Terser 命令行詳解

使用 Terser 壓縮 JavaScript 文件(基礎 現代語法問題解決) 在前端開發中,隨著業務復雜度增加,JavaScript 文件體積越來越大。 文件大帶來的問題: 加載慢:文件越大,瀏覽器下載和解析時間越長…

【數據結構初階】--排序(三):冒泡排序、快速排序

😘個人主頁:Cx330? 👀個人簡介:一個正在努力奮斗逆天改命的二本覺悟生 📖個人專欄:《C語言》《LeetCode刷題集》《數據結構-初階》 前言:在上篇博客的學習中,我們掌握了直接選擇排序…

名詞概念:什么是尾部誤差?

“尾部誤差”就是指誤差分布在兩端的那一小撮、但數值特別大的誤差——也就是離中心(均值/中位數)很遠的“極端樣本”的誤差。對應統計學里的“分布尾部”(tails)。通俗點:大多數樣本誤差都很小,但總會有少…

記對外國某服務器的內網滲透

本專欄是筆者的網絡安全學習筆記,一面分享,同時作為筆記 文章目錄前文鏈接前言上線CS上線rdp后滲透信息收集SMB Pth攻擊權限維持魔幻上線提權關Windows Defenderend前文鏈接 WAMP/DVWA/sqli-labs 搭建burpsuite工具抓包及Intruder暴力破解的使用目錄掃描…

速賣通平臺關鍵字搜索商品列表列表接口實現指南:從接口分析到代碼落地

在跨境電商開發中,速賣通平臺的商品數據獲取是許多開發者關注的焦點。本文將詳細介紹如何實現速賣通關鍵字搜索商品列表接口,涵蓋接口請求參數分析、簽名機制、分頁處理及完整代碼實現,幫助開發者快速對接速賣通開放平臺。一、接口基本信息速…

UE UDP通信

1.確保工程為C工程,在項目工程的xx.Build.cs中加入Networking和Sockets模塊。PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Networking", "Socke…

JavaScript 邏輯運算符與實戰案例:從原理到落地

JavaScript 中的邏輯運算符不僅是條件判斷的核心,還能通過“短路特性”簡化代碼;結合 DOM 操作的實戰案例,更能體現其靈活性。本文整理了邏輯運算符的個人理解、優先級規則,以及 4 個高頻實戰需求的實現方案,附個人思路…

Android RxJava 過濾與條件操作詳解

RxJava 是一個基于觀察者模式的響應式編程庫,在 Android 開發中被廣泛使用。其中,過濾和條件操作是 RxJava 中非常重要的一部分,它們允許我們對數據流進行精細控制。本文將詳細介紹 RxJava 中常用的過濾與條件操作符及其使用場景。一、過濾操…

云手機都具有哪些特點?

云手機擁有著便捷的遠程操作功能,讓用戶無論身處何地,只要能連接網絡,就能通過手機、電腦等終端設備遠程操控云手機,無需受限于物理位置,大大提升了工作的靈活性與便捷性。云手機主要是依賴于云計算技術,能…

Sparse-ICP—(4) 加權稀疏迭代最近點算法(matlab版)

目錄 一、算法原理 1、原理概述 2、參考文獻 二、代碼實現 三、結果展示 一、算法原理 1、原理概述 見:Sparse-ICP—(1)稀疏迭代最近點算法 2、參考文獻 二、代碼實現 SparseWeightedDistance.m function [move_points,T] =

統信UOS安裝NFS共享文件夾

在 UOS ARM 架構系統上安裝和配置 NFS 服務,實現與局域網中其他服務器共享文件夾的步驟如下:1. 安裝 NFS 服務首先更新系統并安裝 NFS 服務器組件:bash# 更新軟件包列表 sudo apt update# 安裝NFS服務器 sudo apt install nfs-kernel-server …

【完整源碼+數據集+部署教程】孔洞檢測系統源碼和數據集:改進yolo11-RetBlock

背景意義 研究背景與意義 隨著工業自動化和智能制造的快速發展,孔洞檢測作為關鍵的質量控制環節,受到了廣泛關注。孔洞的存在可能會影響產品的強度、密封性和整體性能,因此,準確、快速地檢測孔洞對于保障產品質量至關重要。傳統的…

k8s環境使用Operator部署Seaweedfs集群(一)

#作者:閆乾苓 文章目錄4.1 前置條件4.2 部署seaweedfs-operator4.3 準備operator鏡像SeaweedFS Operator是一個Kubernetes Operator,用于自動化部署和管理SeaweedFS集群 README.md:6-8 。部署分為兩個階段:首先部署Operator本身,然…

實踐基地落地:成都影像產業園與重慶五一職院強實訓

近日,成都國際影像產業園與重慶五一職業技術學院合作的實踐基地正式落地,這一舉措為雙方強化實訓合作、培養高素質技能人才注入了新的活力。實踐基地的落地,是雙方基于各自優勢資源的深度融合。成都國際影像產業園作為影像行業的重要聚集地&a…

算法----滑動窗口

滑動窗口 什么是滑動窗口 滑動窗口是一種常用的技術,主要用于處理連續數據序列(如數組、字符串或時間序列數據),通過動態調整一個固定大小的“窗口”來高效地解決問題。窗口在序列上“滑動”,每次移動一個位置&#xf…