
JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。

使用 JunicsFS 将云厂商的 S3 对象存储挂载到本地,就得到一个几乎无限容量的 VPS 空间了。目前 Juice 支持大部份主流厂商提供的 s3 服务,具体请查阅官方文档。
本文以 腾讯云 COS + 腾讯云轻量服务器,演示一下基本使用。
挂载 COS 到本地
使用以下命令即可创建一个基于 COS 的文件系统,下面演示基于 sqlite 和 redis 的创建、挂载、卸载命令。
自动挂载
具体使用时,可以配置一下自动挂载,方法如下。
首先创建一个从 /sbin/mount.juicefs 到 juicefs 可执行文件的软链接,操作系统解析 fstab 时会调用 /sbin/mount.juicefs 命令。
新增以下内容到 /etc/fstab 使得开机自动挂载,这里以上文 sqlite 为例:
使用 mount -a 使配置生效
限制容量和文件数
没有限制的行为可想而知,JuicsFS 的默认限制较高,可以手动限制一下文件系统的容量和文件数量。
限制容量举例,可以看到设定前后可以看到挂载点容量的变化:
限制文件 inodes 数量举例,可以看到设定前后可以看到挂载点容量的变化:
性能测试
文件系统怎么能没有性能测试呢,下面分别使用 dd 和自带 bench 演示性能。
dd 简单读写测试
juicefs bench 测试
本地文件系统成绩
juicefs + sqlite 成绩
juicefs + redis 成绩
试着跑了一次,结果跑崩了,想玩的自己跑一跑吧。
由于 redis 是内存数据库,跑这种没有上限的测试一定要谨慎。在实际使用中,也要根据自己的需要选择,否则机器很容易 gg。
垃圾清理
juicefs 默认有回收站机制,删除文件默认在回收站保留一天。
可以去挂载目录下执行这条命令彻底删除:
总结
本文介绍了 JuiceFS 的基本用法,为“大盘鸡”需求提供一种新的思路,展示了使用对象存储挂载到机器作为文件系统的基本效果。
目前看来是解决系统盘过小问题的好方案,但具体是不是采纳这种方案,等我明天看看账单再做决定。
第二天看了下账单,跑了大概 10 轮测试,账单 0.02¥ ,初步看还能接受:

至于元数据引擎的选择,在单节点服务器的需求上我还是偏向 sqlite 或 mysql 集群的方案,redis 虽然性能强劲,但实在有点吃不消。
最后,这一定是一个很棒的项目,在对接 docker、k8s 之类的容器设施非常方便,提供了插件,可以像操作默认存储卷一样使用,还可以直接使用挂载在本地的路径,总之,在一些方面 JuiceFS 做的已经很好了,下面就是等待时间的检验了。