Apple M1 芯片如何使用 JuiceFS

Herald Yu 2021.09.02

2020 年11月,苹果发布了首颗专为 Mac 打造的 M1 芯片。距今将近一年的时间,它的能耗之低、性能之强有目共睹。而在发布之初大家普遍担心的软件兼容性问题,各大主流软件厂商在这不到一年的时间里陆续完成了对 M1 芯片的支持。

JuiceFS 作为一款分布式文件系统,它通常被部署在云计算平台,用于大规模数据的存储和跨云跨地区的数据共享。MacBook 虽然不是它的主要工作环境,但相信很多小伙伴会使用 MacBook 处理日常的开发或运维工作,比如一些工作流涉及对同一份数据进行云端和终端工作站的分级处理,这就需要在每个端点都挂载 JuiceFS 文件系统,实时共享数据。

有此需求的小伙伴敬请放心,JuiceFS 面向 macOS 的客户端同时支持 Apple M1 芯片和 Intel 芯片,安装和使用方法也完全相同。接下来我们就简要的介绍一下如何在 M1 芯片的 Macbook 电脑上安装和使用 JuiceFS 客户端。

准备工作

macFUSE

JuiceFS 通过 FUSE 实现 POSIX 接口的兼容,在 macOS 系统上原生并没有提供 FUSE 的支持,需要借助 macFUSE 来实现相应接口的抽象。

macFUSE 是开源工具,可以在项目主页免费下载使用:https://osxfuse.github.io

截止本文发布,macFUSE 的最新版是 v4.1.2。

不过需要注意的是,在 M1 芯片的 MacBook 上安装 macFUSE 时需要启用第三方内核模块支持,系统会在程序安装时给出设置说明,按照提示重启电脑进行设置即可。

对象存储和数据库

这两项“原材料”不用过多赘述,它们是 JuiceFS 文件系统的关键组成部分。取决于你的应用场景:

  1. 如果只是想把对象存储挂在 MacBook 上当作个人的大容量网盘,那么可以采用【对象存储 + SQLite】的组合,即在公有云创建对象存储,数据库直接在本地创建 SQLite 数据库。
  2. 如果要像前面说的那样与云上的服务器共享挂载 JuiceFS 存储,那么直接使用已经创建了文件系统的数据库地址即可。
  3. 再有就是使用【对象存储 + 云数据库】的组合,从头创建新的文件系统。

JuiceFS 客户端

访问项目主页,找到最新的版本:

https://github.com/juicedata/juicefs/releases/latest

在文件列表中找到并下载 juicefs-x.xx.x-darwin-amd64.tar.gz 即文件名中带有 darwin 字样的压缩包。

为了便于使用,可以将压缩包解压后,通过终端将 juicefs 二进制文件安装到系统的 $PATH 可执行路径中:

$ sudo install juicefs /usr/local/bin

这样一来,只要打开终端,在任何工作路径中都能使用 juicefs 命令。

架构说明

需要注意的是,这里我们下载的软件包是面向 64 位 PC 架构(amd64)的版本,在 M1 芯片的电脑上会自动通过 Rosetta2 转译运行。

当然,你也可以手动编译面向 M1 芯片(arm64)的 JuiceFS 客户端。大致的流程如下:

克隆代码到本地

$ git clone https://github.com/juicedata/juicefs.git

编译 JuiceFS 需要使用 gcc 5.4+ 和 go 1.15+,相关信息可以查阅文档:

https://github.com/juicedata/juicefs/blob/main/docs/zh_cn/client_compile_and_upgrade.md

执行编译

$ cd juicefs
$ make

将编译出的客户端安装到可执行路径:

$ sudo install juicefs /usr/local/bin

使用

创建文件系统

这里我们采用对象存储与本地 SQLite 数据库的组合形式,创建一个文件系统:

$ juicefs format --storage oss \
  --bucket https://<bucket-name>.oss-cn-shanghai.aliyuncs.com/media \
  --access-key <access-key-id> \
  --secret-key <secret-key-secret> \
  sqlite3://media-jfs.db \
  media

上述命令创建了名为 media 的文件系统,使用阿里云 OSS 存储数据,在当前目录创建了名为 media-jfs.db 的 SQLite 数据库存储元数据。

更多对象存储和数据库的设置方法,请查阅官方文档:

https://github.com/juicedata/juicefs/tree/main/docs/zh_cn

挂载文件系统

使用 JuiceFS 的 mount 子命令挂载文件系统,将我们创建的文件系统挂载到当前用户家目录下的 jfs 文件夹:

$ juicefs mount -d sqlite3://media-jfs.db ~/jfs

使用 sudo 是为了让 juicefs 客户端可以有权限使用 FUSE 设备和创建缓存目录,-d 选项让客户端在后台执行挂载。

注意:SQLite 是单文件数据库,挂载时请注意数据库文件的路径。

挂载成功会看到类似下面的输出:

2021/08/31 19:44:58.280548 juicefs[27092] <INFO>: Meta address: sqlite3://media-jfs.db
2021/08/31 19:44:58.517104 juicefs[27092] <INFO>: Ping redis: 11.417958ms
2021/08/31 19:44:58.530399 juicefs[27092] <INFO>: Data use s3://<bucket-name>.oss-cn-shanghai.aliyuncs.com/media/
2021/08/31 19:44:58.531557 juicefs[27092] <INFO>: Disk cache (/Users/herald/.juicefs/cache/0646fec9-e490-485a-a196-c1a5b63dd053/): capacity (1024 MB), free ratio (10%), max pending pages (15)
2021/08/31 19:44:58.597751 juicefs[27092] <INFO>: Mounting volume jfs at /Users/herald/jfs ...
2021/08/31 19:44:59.034297 juicefs[27092] <INFO>: OK, jfs is ready at /Users/herald/jfs

根据数据的内容可以看到,默认的本地缓存是 1024 MB,可以在挂载参数中使用 --cache-size 调整缓存大小,比如以下命令将本地缓存设置为 20GB:

$ juicefs mount -d --cache-size 20000 sqlite3://media-jfs.db ~/jfs

卸载文件系统

在 macOS 卸载 JuiceFS 存储非常方便,默认情况下挂载的文件系统会生成一个新的设备图标显示在桌面,鼠标右键点击,选择“推出设备”即可。也可以在 Finder 中找到文件的挂载位置,鼠标右键点选“推出”。

写在最后

虽然 JuiceFS 主要被用于大规模数据存储,但它依然可以被方便的用在轻量的、小规模的环境中。就像本文介绍的在 MacBook 上安装和使用,不同的情境可以有不同的用法,你既可以把它作为大数据处理的一环,也可以把它当作一个纯私有的个人云盘。