JuiceFS 上手指南

系统需求

  • JuiceFS 中的文件数据是保存在您自己使用的公有云对象存储中,第一次挂载时需要提供有读写权限的 API 密钥来访问对象存储(它会保存在您挂载机器的 /root/.juicefs 中,不会上传到我们的服务器)。

  • 用于下载客户端的 wget 或者 curl .

  • 支持 SSL 的 Python 2.5+ 或者 3.x。

  • JuiceFS 是通过 FUSE 实现的,可以在支持 FUSE 的 Linux 和 macOS 上使用,暂时还不支持 Windows。 大多数 Linux 发行版已经内置了 FUSE 模块,没有的话你需要安装或者编译 FUSE 模块。 macOS 上需要安装 FUSE for macOS

创建文件系统

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

_images/create-filesystem-zh.png

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

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

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

_images/filesystem-setting-zh.png

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

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

安装

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

  1. $ curl -L https://juicefs.com/static/juicefs -o juicefs && chmod +x juicefs
  2. $ ./juicefs
  3. juicefs COMMAND [options]
  4. COMMAND could be:
  5. auth authorize a filesystem
  6. mount mount a filesystem
  7. info show information of file or directory

挂载

通过命令行挂载

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

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

如果你使用 macOS Catalina,可以用如下方式挂载

  1. $ ./juicefs mount NAME-OF-JUICEFS ~/jfs

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

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

记住密钥

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

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

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

  1. {"token": TOKEN, "accesskey": ACCESSKEY, "secretkey": SECRETKEY}

开机自动挂载

Linux

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

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

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

  1. NAME-OF-JUICEFS /jfs juicefs _netdev 0 0

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

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

  1. $ sudo chkconfig --add netfs

macOS

在以下说明中,会使用一些变量指代应填的值,请注意替换:

  • NAME 文件系统名

  • PATH_TO_JUICEFS juicefs 路径(如:/usr/local/bin/juicefs

  • MOUNTPOINT 挂载路径

  1. 参照 卸载 确保目标挂载路径处于卸载状态

  2. 参照 记住密钥 将授权信息保存在本地文件

  3. ~/Library/LaunchAgents 下创建文件 com.juicefs.NAME.plist

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    3. <plist version="1.0">
    4. <dict>
    5. <key>Label</key>
    6. <string>com.juicefs.NAME</string>
    7. <key>ProgramArguments</key>
    8. <array>
    9. <string>PATH_TO_JUICEFS</string>
    10. <string>mount</string>
    11. <string>NAME</string>
    12. <string>MOUNTPOINT</string>
    13. </array>
    14. <key>RunAtLoad</key>
    15. <true/>
    16. </dict>
    17. </plist>
  4. 加载上一步创建的文件, 测试加载是否成功:

    1. launchctl load ~/Library/LaunchAgents/com.juicefs.NAME.plist
    2. launchctl start ~/Library/LaunchAgents/com.juicefs.NAME
    3. ls MOUNTPOINT
  5. 如果没有挂载成功,可以在上述 plist 文件中添加以下配置:

    1. <key>StandardErrorPath</key>
    2. <string>/tmp/mycommand.err</string>
    3. <key>StandardOutPath</key>
    4. <string>/tmp/mycommand.out</string>

    通过以下命令就可以重新加载更新后的配置,查看输出:

    1. launchctl unload ~/Library/LaunchAgents/com.juicefs.NAME.plist
    2. launchctl load ~/Library/LaunchAgents/com.juicefs.NAME.plist
    3. cat /tmp/mycommand.out
    4. cat /tmp/mycommand.err

从 Docker 容器中挂载

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

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

导入已有的文件

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

导入方法如下:

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

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

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

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

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

快照

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

快照可以这样创建:

  1. $ ./juicefs snapshot SRC DST

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

  1. $ ./juicefs snapshot -d DST

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

卸载

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

  1. $ sudo umount /jfs

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

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

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

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