7 个版本

0.6.4 2023 年 8 月 8 日
0.6.3 2023 年 6 月 17 日
0.6.2 2023 年 2 月 24 日
0.6.0 2023 年 1 月 31 日
0.5.0 2022 年 6 月 16 日

#214 in 文件系统

Download history 1442/week @ 2024-03-14 1194/week @ 2024-03-21 1168/week @ 2024-03-28 919/week @ 2024-04-04 1158/week @ 2024-04-11 1380/week @ 2024-04-18 1076/week @ 2024-04-25 928/week @ 2024-05-02 1246/week @ 2024-05-09 1267/week @ 2024-05-16 1082/week @ 2024-05-23 1205/week @ 2024-05-30 1054/week @ 2024-06-06 1114/week @ 2024-06-13 1372/week @ 2024-06-20 835/week @ 2024-06-27

4,525 每月下载量
用于 6 个 crates (4 直接)

Apache-2.0 OR BSD-3-Clause

1MB
22K SLoC

nydus-storage

Nydus Image Service 的核心存储子系统

  • 从存储后端(如 Registry、OSS、S3、本地磁盘和文件系统等)获取 blob 对象。
  • 按需从存储后端加载数据。
  • 在本地存储上缓存 blob 对象。

支持

平台:

  • x86_64
  • aarch64

操作系统:

  • Linux
  • MacOS

许可协议

此代码根据 Apache-2.0BSD-3-Clause 许可。


lib.rs:

分块 blob 存储服务,支持 Rafs 文件系统。

Rafs 文件系统是一种基于 blob 的具有块去重功能的文件系统。一个 Rafs 文件系统由一个元数据 blob 和零个或多个数据 blob 组成。blob 只是一个包含数据块的普通对象存储。数据块可以通过内容校验值进行压缩、加密和去重。当使用 Rafs 文件系统作为容器镜像时,Rafs 元数据 blob 包含所有文件系统元数据,如目录、文件名、权限等。实际上,文件内容被分割成块并存储在数据 blob 中。Rafs 可以为每个容器镜像层构建一个数据 blob,也可以根据构建选项为整个镜像构建一个单一的数据 blob。

nydus-storage crate 用于管理和访问 Rafs 文件系统的分块 blob,它包含三个层次

  • 后端:访问远程存储后端的原始 blob 对象。
  • 缓存:以优化性能的形式将远程 blob 内容缓存在本地存储上。
  • 设备:分块 blob 的公共 API

公共 API 提供了几个核心抽象

  • BlobInfo:提供有关blob的信息,通常从Rafs文件系统元数据的blob数组构建。
  • BlobDevice:提供对Rafs文件系统所有blob的访问,这些blob由BlobInfo对象数组构建。
  • BlobChunkInfo:提供关于数据块的信息,该数据块从Rafs元数据加载。
  • BlobIoDesc:一个blob IO描述符,包含一个块内连续IO范围的有关信息。
  • BlobIoVec:一个用于blob IO操作的分散/收集列表,包含一个或多个blob IO描述符。

要从Rafs文件系统中读取数据,Rafs文件系统驱动程序将准备一个BlobIoVec对象,并将其提交给相应的BlobDevice对象以执行实际的IO操作。

依赖项

~15-33MB
~572K SLoC