---
date: "2022-11-01T00:00:00+00:00"
slug: "storage"
sidebar_position: 3
---

# 存儲

本文檔描述了套件註冊表的存儲及其管理方式。

## 去重

套件註冊表具有內置的上傳 blob 去重功能。
如果上傳了兩個相同的文件，則文件系統上只會保存一個 blob。
這確保了不會為重複的文件浪費空間。

如果上傳了兩個包含相同文件的套件，這兩個套件將顯示相同的大小，但在文件系統上它們只需要一半的大小。
每當刪除套件時，只會刪除對底層 blob 的引用。
此時不會刪除 blob，因此它們仍然需要文件系統上的空間。
當上傳新套件時，現有的 blob 可能會再次被引用。

這些未引用的 blob 會被[清理作業](../../administration/config-cheat-sheet.md#cron---cleanup-expired-packages-croncleanup_packages)刪除。
配置設置 `OLDER_THAN` 配置了未引用的 blob 在刪除前保留的時間。

## 清理規則

隨著時間的推移，套件註冊表可能會變得很大而不進行清理。
建議刪除不必要的套件並設置清理規則以自動管理套件註冊表的使用。
每個套件擁有者（用戶或組織）管理應用於其套件的清理規則。

| 設置                       | 描述                                                                                                                             |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| 啟用                       | 打開或關閉清理規則。                                                                                                             |
| 類型                       | 每個規則管理特定的套件類型。                                                                                                     |
| 將模式應用於完整的套件名稱 | 如果啟用，下面的模式將應用於完整的套件名稱（`package/version`）。否則僅應用於版本（`version`）。                                 |
| 保留最新的                 | 每個套件要*始終*保留的版本數量。                                                                                                 |
| 保留匹配的版本             | 確定要保留的版本的正則表達式模式。空模式不保留任何版本，而 `.+` 保留所有版本。即使未配置，容器註冊表也會始終保留 `latest` 版本。 |
| 刪除早於的版本             | 只刪除早於選定天數的版本。                                                                                                       |
| 刪除匹配的版本             | 確定要刪除的版本的正則表達式模式。空模式或 `.+` 將導致刪除所有套件，如果沒有其他設置告訴否則。                                   |

每個清理規則都可以顯示受影響套件的預覽。
這可以用來檢查清理規則是否配置正確。

### 正則表達式示例

正則表達式模式會自動用 `\A` 和 `\z` 錨點包圍。
不要在正則表達式模式中包含任何 `\A`、`\z`、`^` 或 `$` 符號，因為它們不是必需的。
這些模式是不區分大小寫的，這與 Gitea 中套件註冊表的行為相匹配。

| 模式                         | 描述                                                                                                                |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `.*`                         | 匹配所有可能的版本。                                                                                                |
| `v.+`                        | 匹配以 `v` 開頭的版本。                                                                                             |
| `release`                    | 只匹配版本 `release`。                                                                                              |
| `release.*`                  | 匹配命名為或以 `release` 開頭的版本。                                                                               |
| `.+-temp-.+`                 | 匹配包含 `-temp-` 的版本。                                                                                          |
| `v.+\|release`               | 匹配以 `v` 開頭的版本或命名為 `release` 的版本。                                                                    |
| `package/v.+\|other/release` | 匹配套件 `package` 的以 `v` 開頭的版本或套件 `other` 的版本 `release`。這需要啟用設置*將模式應用於完整的套件名稱*。 |

### 清理規則的工作原理

清理規則是[清理作業](../../administration/config-cheat-sheet.md#cron---cleanup-expired-packages-croncleanup_packages)的一部分，並定期運行。

清理規則：

1. 收集擁有者註冊表的所有套件類型的所有套件。
2. 對於每個套件，它收集所有版本。
3. 根據*保留最新的*值從列表中排除版本。
4. 排除與*保留匹配的版本*值匹配的任何版本。
5. 排除比*刪除早於的版本*值更新的版本。
6. 排除與*刪除匹配的版本*值不匹配的任何版本。
7. 刪除剩餘的版本。
