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_chunks
、direct_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_chunks
、direct_read_chunk_size
参数,提升并行预取的数据量,充分利用网络带宽。
如何选择3种模式:
如果您的文件是在通过ossfs写入时进行读取,请直接使用默认模式。
如果您的ossfs只会对文件进行读取,或通过ossfs写入和读取的是不同文件:
场景
说明
只有小文件
请使用默认模式。
只有大文件
顺序读取或小幅跳跃(部分safetensors模型文件),请使用纯直读模式。
大幅跳跃随机读取,请使用默认模式。
无法确认读取模式,或使用纯直读模式并调整了direct_read_backward_chunks后,性能仍然差时,请使用默认模式。
小文件和大文件混杂
大文件为顺序读取或小幅跳跃(部分safetensors模型文件),请使用混合直读。
大文件会大幅随机跳跃读取、无法确认读取模式或使用混合直读模式并调整了direct_read_backward_chunks后,性能仍然差时,请使用默认模式。
说明当尝试纯直读模式和混合直读模式发现性能较差时,建议使用默认模式,将文件缓存至本地磁盘。使用默认模式时,磁盘性能容易成为ossfs的瓶颈,建议提高ossfs使用的磁盘配置。例如:使用ESSD AutoPL,并配置适当的预配置性能或使用性能突发。
后续步骤
在使用ossfs将对象存储服务挂载成本地文件系统之前,您需要安装并配置挂载ossfs。具体操作,请参见安装ossfs和ossfs配置与挂载。
相关文档
关于ossfs挂载配置的更多信息,请参见ossfs配置与挂载。
关于ossfs命令参数选项的更多信息,请参见ossfs挂载选项说明。
如需了解ossfs不同版本的新功能介绍,请参见ossfs版本更新功能介绍。
如果使用ossfs过程中遇到问题,请参考ossfs常见问题文档处理。