JuiceFS 上手指南

系统需求

  • JuiceFS 中的文件数据是保存在您自己使用的公有云对象存储中,第一次挂载时需要提供有读写权限的 API 密钥来访问对象存储(它会保存在您挂载机器的 /root/.juicefs 中,不会上传到我们的服务器)。
  • 用于下载客户端的 wget 或者 curl .
  • 支持 SSL 的 Python 2.5+ or 3.x。
  • JuiceFS 是通过 FUSE 实现的,可以在支持 FUSE 的 Linux, *BSD 和 macOS 上使用,暂时还不支持 Windows。 大多数 Linux 和 BSD 发行版以及内置了 FUSE 模块,没有的话你需要安装或者编译 FUSE 模块。 macOS 上需要安装 FUSE for macOS

安装

客户端是一个叫 juicefs 的 Python 脚本,使用 wgetcurl 下载即可,通过它来挂载 JuiceFS 以及其他功能操作(需要 Python 2.5+ 或者 3.x)。下载后直接运行它可以查看所有参数列表和帮助。

$ curl -L https://juicefs.com/static/juicefs -o juicefs && chmod +x juicefs
$ ./juicefs
juicefs COMMAND [options]

COMMAND could be:
auth      authorize a filesystem
mount     mount a filesystem
info      show information of file or directory

创建文件系统

首先,你需要在 JuiceFS 网站上完成注册。然后登陆到你的控制台,点击“创建文件系统”按钮,填写下面表单。

_images/create-filesystem-zh.png

在上面的表单中,有几项需要 特别注意

  • 云服务商与你所在的区(Region):创建文件系统时,选择你使用的公有云对象存储的厂商名称和你正在使用的区域。如果你需要的不在列表中,请点击表单中的申请链接,我们会在 72 小时内支持你所需的云平台,24 小时内支持你需要的区域。

点击“创建”按钮后,文件系统就会准备好,此时你可以在网页上会看到刚创建的文件系统信息,密钥和挂载方法等,以及查看监控,设置都在这里。

_images/filesystem-setting-zh.png

此时就可以在命令行中挂载文件系统了,我们在下一节介绍。

注意:每次当你创建一个文件系统,JuiceFS 会自动在您的对象存储中创建一个名字对应的 bucket,用来存储您这个文件系统中的所有数据。

挂载

通过命令行挂载

在一个机器上第一次挂载时,需要提供密钥(Token)以及能够访问对象存储的 API 密钥。 (它们只会保存在 /root/.juicefs,不会发往任何其他地方)。

$ sudo ./juicefs mount NAME-OF-JUICEFS  /jfs

一旦授权和测试成功, juicefs 会切换到后台运行,所有日志会记录到 syslog (Facility: LOG_USER).

提示:如果你不知道去哪找对象存储的 API 密钥,可以查看我们整理的 获取各云平台密钥合集

记住密钥

如果不想通过交互的方式提供密码,可以通过下面的方式用命令行参数的方式提供(这方式方便自动化):

$ sudo ./juicefs auth --token TOKEN --accesskey ACCESSKEY --secretkey SECRETKEY NAME
$ sudo ./juicefs mount NAME-OF-JUICEFS MOUNTPONT

或者也可以直接放一个 JSON 配置文件到 /root/.juicefs/NAME.conf,内容如下:

{"token": TOKEN, "accesskeyi": ACCESSKEY, "secretkey": SECRETKEY}

开机自动挂载

可以当 juicefs 拷贝(或者符号链接)到 /sbin/mount.juicefs,就可以用下面的标准方法来挂载 JuiceFS :

$ mount -t juicefs  NAME-OF-JUICEFS /jfs

你也可以把下面这行放入到 /etc/fstab 实现开机自动挂载(需要先记住密钥):

NAME-OF-JUICEFS   /jfs     juicefs    _netdev   0 0

请查看命令行帮助获得更详细信息。

注意:CentOS 6 默认不会启动后挂载网络文件系统,需要运行下面的命令让它在启动后挂载网络文件系统:

$ sudo chkconfig --add netfs

从 Docker 容器中挂载

JuiceFS 也可以从 Docker 或者其他容器中挂载,需要该容器有访问 FUSE 设备的权限,可以通过下面的方式授予:

docker run --cap-add SYS_ADMIN --device=/dev/fuse --security-opt apparmor:unconfined

导入已有的文件

如果你已经在对象存储中有一些文件,很容易将它们快速导入到 JuiceFS 中, 然后你可以像 JuiceFS 中的其他文件已有通过 POSIX 接口很方便的访问,而不需要这些文件。

导入方法如下:

$ sudo ./juicefs import BUCKET-NAME/PREFIX TARGET-DIR-IN-JUICEFS

比如,下面的命令可以将 my-bucket 里面所有以 my-files 开头的文件导入到 /jfs/my-files 文件夹中:

$ sudo ./juicefs import my-bucket/my-files /jfs/my-files

导入过程只会把这些文件的元数据载入到 JuiceFS 中,这些文件还是原样保存在对象存储中,你仍然可以继续用对象存储的 API 去访问。 导入之后,这些文件的属性可以随意更改(改名或者修改权限等), 但所有改动不会同步到对象存储中,在 JuiceFS 中删除这些导入的文件也不会删除对象存储中的对象。

注意: 导入的文件时会使用挂载时的API keys,必须确保它对导入的文件有读权限。

快照

JuiceFS 支持快照,通过它你可以瞬时完成目录或者文件的拷贝,而且该操作是原子的。 快照会尽量复用相关的数据块并不会拷贝实际文件数据,以减少对象存储中的数据量,之后如果对快照或者原始数据进行修改他才会拷贝。

快照可以这样创建:

$ ./juicefs snapshot SRC DST

还可以快速删除整个快照:

$ ./juicefs snapshot -d DST

注意: ./juicefs snapshot -d 只能删除快照,否则它会报错说 ‘Operation not permitted’ (没有操作权限).

卸载

使用系统提供的 umount 命令卸载 JuiceFS 文件系统。

$ sudo umount /jfs

如果挂载点正在使用中,建议用 lsof MOUNTPOINT 找到正在使用的文件并停止相关的应用再卸载。

可以通过下面的命令延后(使用者不受影响)或者强行卸载:

$ sudo umount /jfs -l                # for Linux
$ sudo diskutil unmount force /jfs   # for Mac

之后你可以杀掉 juicefs 进程,也可以等它自己退出。