ossfs概述

ossfs能将阿里云对象存储服务OSS挂载成本地文件系统,方便用户像操作本地文件一样管理OSS数据。

ossfs介绍

ossfs是一个用户空间文件系统(userspace filesystem),它允许您在Linux系统上将OSS存储空间挂载为本地文件系统,且支持以下功能:

  • 支持POSIX文件协议标准的大部分功能,例如上传下载文件、目录,设置用户权限等。

  • 默认使用OSS的分片上传和断点续传功能上传文件。

  • 支持MD5校验,保证数据的完整性。

运行环境

ossfs基于FUSE(Filesystem in Userspace)用户态文件系统开发,只能运行在支持FUSE的机器上。ossfs提供Ubuntu系统和CentOS系统的安装包。如果需要在其他环境下运行,可以通过源码方式构建目标程序。

  • Linux系统

    • CentOS 7.0及以上版本。

    • Ubuntu 14.04及以上版本。

    • Anolis7及以上版本。

  • fuse软件:2.8.4以上版本

    您可以执行fusermount -V命令判断fuse软件的版本。当返回结果中fusermount version的值为2.8.4以上版本(例如fusermount version: 2.9.2)时,表示fuse满足版本要求。

使用限制

使用ossfs将远程Bucket数据及功能映射到本地文件系统时存在如下限制:

  • 不适合高并发混合读写的场景。

    说明
    • 在ossfs的实现中,对数据的随机读取和所有写入均需要落盘。在高并发读写混合场景下,磁盘性能对于读和写会形成瓶颈。

    • 在ossfs的实现中并发的读写请求之间存在竞争,影响带宽。

  • 不支持文件硬链接。

  • 不支持挂载归档存储、冷归档存储或者深度冷归档存储类型Bucket。

  • 编辑已上传文件会导致文件被重新上传。

  • 元数据操作,例如list directory,因为需要远程访问OSS服务器,所以性能较差。

  • 重命名文件或文件夹可能会出错。若操作失败,可能会导致数据不一致。

  • 多个客户端挂载同一个OSS Bucket,且同时写入同一个文件时,无法保证数据的一致性。

使用指南

以下内容适用于ossfs 1.91.3及以上版本。最新版ossfs的下载安装,请参见安装ossfs

ossfs提供了三种适用于不同场景下的模式策略:

默认模式

适合小文件(指page cache能够缓存文件)和大文件随机只读场景。如:AI 训练中大量原始图片素材文件。使用纯直读模式,即使开启了部分乱序仍然读取性能很差时,建议尝试使用默认模式。

ossfs读文件时,内核会缓存一份ossfs挂载点文件的数据在内存中,另外ossfs会将数据写在磁盘缓存文件上,因此内存还有一份缓存文件的数据,即一个文件会在内存中有双倍缓存。

  • 如果您的操作系统page cache最多缓存6 GB的脏数据,那么理论上默认模式适合大小为3 GB以下的文件读。

  • 您可以设置parallel_count参数调节下载数据的并发数量,设置multipart_size参数调节单个任务下载数据量。

纯直读模式

适合顺序只读大文件的场景,支持一定乱序(如跳跃范围为少量chunk)。如:AI推理加载大型safetensors模型文件。

  • 您需要开启-odirect_read

  • 直读模式的数据保留窗口为[-direct_read_backward_chunks * direct_read_chunk_size, +direct_read_prefetch_chunks * direct_read_chunk_size],其中direct_read_chunk_size默认为4 MB,direct_read_prefetch_chunks默认为32,direct_read_backward_chunks默认为1,即默认数据保留窗口为[-4 MB, +128 MB]。如果读取乱序确定在小范围内(例如:部分safetensors模型文件,连续两次读的位置跳跃范围在[-32 MB, +32 MB]之间),则可以设置-odirect_read_backward_chunks=8,保留当前偏移量之前32 MB的数据。

  • 您还可以适当调整direct_read_prefetch_chunksdirect_read_chunk_size参数,提升并行预取的数据量,充分利用网络带宽。

混合直读模式

适合小文件(指page cache能够缓存文件)和大文件混杂只读场景,支持一定乱序(如跳跃范围为数个chunk)。如:AI推理加载大型safetensors模型文件。如果大文件读取中出现大幅随机跳跃,此模式性能会低于默认模式。

  • 您需要开启-odirect_read

  • 您需要设置direct_read_local_file_cache_size_mb参数来控制下载落盘的数据大小。如机器page cache最多6 GB时,可以设置-odirect_read_local_file_cache_size_mb=3072,当下载数据到达3 GB时,切换到直读模式。

  • 直读模式的数据保留窗口为[-direct_read_backward_chunks * direct_read_chunk_size, +direct_read_prefetch_chunks * direct_read_chunk_size]direct_read_chunk_size默认为4 MB,direct_read_prefetch_chunks默认为32,direct_read_backward_chunks默认为1,则默认数据保留窗口为[-4 MB, +128 MB]。如果读取乱序确定在少量范围内(如:部分safetensors模型文件,连续两次读的位置跳跃范围在[-32 MB, +32 MB]之间),则可以设置-odirect_read_backward_chunks=8,保留当前偏移量之前32 MB的数据。

  • 您还可以适当调整direct_read_prefetch_chunksdirect_read_chunk_size参数,提升并行预取的数据量,充分利用网络带宽。

如何选择3种模式:

  • 如果您的文件是在通过ossfs写入时进行读取,请直接使用默认模式。

  • 如果您的ossfs只会对文件进行读取,或通过ossfs写入和读取的是不同文件:

    场景

    说明

    只有小文件

    请使用默认模式。

    只有大文件

    • 顺序读取或小幅跳跃(部分safetensors模型文件),请使用纯直读模式。

    • 大幅跳跃随机读取,请使用默认模式。

    • 无法确认读取模式,或使用纯直读模式并调整了direct_read_backward_chunks后,性能仍然差时,请使用默认模式。

    小文件和大文件混杂

    • 大文件为顺序读取或小幅跳跃(部分safetensors模型文件),请使用混合直读。

    • 大文件会大幅随机跳跃读取、无法确认读取模式或使用混合直读模式并调整了direct_read_backward_chunks后,性能仍然差时,请使用默认模式。

    说明

    当尝试纯直读模式和混合直读模式发现性能较差时,建议使用默认模式,将文件缓存至本地磁盘。使用默认模式时,磁盘性能容易成为ossfs的瓶颈,建议提高ossfs使用的磁盘配置。例如:使用ESSD AutoPL,并配置适当的预配置性能或使用性能突发。

后续步骤

在使用ossfs将对象存储服务挂载成本地文件系统之前,您需要安装并配置挂载ossfs。具体操作,请参见安装ossfsossfs配置与挂载

相关文档