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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…