> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/run-the-platform/zh/cun-chu/vsan-deletion-process.md).

# VergeOS vSAN 删除流程

## 块级架构基础

VergeOS vSAN 运行在一种 **块级架构** 其中：

* VM 和租户磁盘被划分为多个块
* 每个块都会获得唯一的加密哈希
* 块使用基于哈希的算法分布到各节点
* 同时保留主副本和冗余副本
* **租户作为 LXC 容器运行** 在父级 vSAN 中拥有各自的存储分配

## 删除如何工作

### 1. **引用计数系统**

当你在 VergeOS 中删除 VM、驱动器或租户时：

* 系统不会立即删除实际的数据块
* 而是从哈希映射中移除这些块的引用
* 每个块都维护引用计数，跟踪有多少对象在使用它
* **租户存储遵循相同的引用计数** 与单个 VM 相同，但在 LXC 容器边界内运行

### 2. **重复数据删除的影响**

由于 VergeOS 使用 **块级重复数据删除**:

* 多个 VM 可能共享相同的块（相同哈希）
* **租户存储可以与父系统或其他租户共享块**
* 删除一个 VM 或租户只会减少引用计数
* 只有当引用计数降为零时，块才会被标记为删除

### 3. **垃圾回收过程**

实际删除通过后台进程完成：

* **vSAN 扫描**：系统会定期扫描未被引用的块
* 引用数为零的块会被标记为回收
* 随后释放物理存储空间并使其可用
* **租户删除会触发相同的垃圾回收** 与 VM 删除相同

### 4. **立即与实际回收**

* **立即**：UI 会立即将空间显示为“已释放”
* **实际**：物理空间回收发生在后台 vSAN 操作期间

{% hint style="info" %}
**存储回收时机**

这就是为什么删除后你可能不会立即看到存储空间减少
{% endhint %}

## 驱动器/VM 删除

当你删除 VM 或驱动器时：

1. 引用会从系统中移除
2. 哈希映射条目会更新
3. 后台进程负责实际的块清理

#### **快照与删除**

1. 删除 VM 也会删除其 VM 快照
2. 但是，该 VM 仍会保留在其存在期间创建的系统快照中

## 租户删除场景

### **完全删除租户**

删除租户时：

1. 所有租户 VM、驱动器和元数据引用都会被移除
2. **租户存储层级** 会从父级 vSAN 中解除引用
3. **LXC 容器文件系统和已分配的存储** 会被清理
4. 所有租户块的哈希映射条目都会更新
5. 后台进程负责清理所有租户数据中的块

### **删除租户存储层级**

当从租户中移除已配置的存储层级时：

1. **在移除之前，必须将所有数据迁出该层级** （VM、驱动器、文件）
2. **租户存储层级分配会被移除** 从父级 vSAN 配置中
3. **该特定层级的卷层级限流控制会被释放** 针对该特定层级
4. 该层级上租户块的哈希映射条目会更新
5. 后台进程负责清理已移除层级分配的块

{% hint style="warning" %}
**需要数据迁移**

与完全删除租户不同，移除存储层级需要 **手动迁移数据** 到其他层级，然后才能从租户中取消配置该层级。
{% endhint %}

## 关键注意事项

### **租户内的 VM/驱动器删除**

当删除租户内部的 VM 或驱动器时：

1. 引用会从租户的本地哈希映射中移除
2. **父级 vSAN 哈希映射条目也会更新**
3. 后台进程负责实际的块清理

### **租户与父级 vSAN 的关系**

* **租户作为父级 vSAN 内的 LXC 容器运行** ——它们没有单独的 vSAN
* 租户存储通过容器文件系统层从父级 vSAN 层级中分配
* **块级重复数据删除可跨租户边界工作** 以及在容器之间工作
* 父系统负责租户容器的所有物理存储清理

### **快照与租户删除**

* 删除租户也会删除其本地 VM 快照
* **租户仍会保留在父系统快照中** 这些快照是在其存在期间创建的
* **系统快照可能会阻止立即回收存储**
* 即使删除后，也可以从系统快照恢复租户

### **共享对象和文件共享**

* **父系统与租户之间共享的文件** 可能会保留引用
* 共享的 VM 快照可能会阻止完全清理存储
* **提供给租户的文件** 会创建额外的块引用
* 在估算存储回收时要考虑共享对象

{% hint style="info" %}
**网络资源清理**

删除租户时，所有相关网络资源都会自动清理：

* **IP 地址** 分配给租户 VM 和网络的 IP 会释放回地址池
* **网络块** （子网）分配给租户的会解除分配并返回可用库存
* **网络接口** 和路由配置会自动移除
* **DNS 条目** 以及与租户相关的网络策略会被清理
  {% endhint %}

### **租户存储隔离**

* 每个租户都有 **专用存储卷** 并在其 LXC 容器内支持加密
* **网络和管理隔离** 不会影响容器之间的 vSAN 块共享
* 存储隔离在逻辑上通过 LXC 容器化实现，而不是在块级别上物理隔离
* **容器文件系统层** 在共享底层块的同时提供租户隔离

## 高级租户删除场景

### **嵌套租户删除**

对于托管自己子租户的租户：

* 子租户作为 **嵌套 LXC 容器**
* 子租户删除在容器层次结构内遵循相同的引用计数
* **父租户容器负责管理子租户存储清理**
* 可能会应用多层容器化和引用计数
* 清理过程从最内层容器向最外层容器进行

### **租户恢复对删除的影响**

* **从系统快照恢复已删除的租户** 会重新创建引用
* 之前“已删除”的块可能会再次变为活动状态
* **恢复租户时，存储使用量可能会增加** 在恢复租户时
* 后台清理进程会适应恢复后的引用

## 安全机制

### **租户删除期间的数据完整性**

* 系统在所有删除操作期间都会保持数据完整性
* **冗余副本确保不会丢失数据** 在租户清理期间
* 哈希验证可防止误删被引用的块
* **跨租户的块共享会保留** 直到所有引用都被移除

### **租户删除前提条件**

* **租户及其对应的租户网络必须先关闭电源** 后才能删除
* 所有租户节点都必须离线
* **在租户容器处于活动状态时** 无法删除原始租户节点
* 系统会在允许删除容器前验证不存在活动引用

## 监控租户存储删除

你可以通过以下方式监控该过程：

### **父系统监控**

* **存储仪表板** 用于查看总体层级利用率
* **vSAN 诊断** 用于查看后台操作状态
* **系统日志** 用于查看租户删除和清理详情
* **租户统计** 显示存储消耗趋势

### **租户级监控** （删除前）

* **租户仪表板** 用于查看内部存储使用情况
* **租户历史** 用于查看消耗统计
* **租户环境内的** 内部 vSAN 统计

### **删除后验证**

* **存储层级利用率** 应随着时间下降
* **vSAN 扫描统计** 显示清理进度
* **引用计数验证** 通过 vSAN 诊断

## 故障排除

### **排查回收缓慢问题**

* 检查 **仍然存在的系统快照** 其中包含租户数据
* 验证 **共享对象** 是否已正确清理
* 查看 **系统日志** 查看 vSAN 操作错误
* 使用 **vSAN 诊断** 以监控清理进度


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/run-the-platform/zh/cun-chu/vsan-deletion-process.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
