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 网站上完成注册。然后登录到你的控制台,点击“创建文件系统”按钮,填写下面表单。
在上面的表单中,有几项需要 特别注意:
- 云服务商与你所在的区(Region):创建文件系统时,选择你使用的公有云对象存储的厂商名称和你正在使用的区域。如果你需要的不在列表中,请点击表单中的申请链接,我们会在 72 小时内支持你所需的云平台,24 小时内支持你需要的区域。
点击“创建”按钮后,文件系统就会准备好,此时你可以在网页上会看到刚创建的文件系统信息,密钥和挂载方法等,以及查看监控,设置都在这里。
此时就可以在命令行中挂载文件系统了,我们在下一节介绍。
注意:每次当你创建一个文件系统,JuiceFS 会自动在您的对象存储中创建一个名字对应的 bucket,用来存储您这个文件系统中的所有数据。
安装
客户端是一个叫 juicefs
的 Python 脚本,使用 wget
或 curl
下载即可,通过它来挂载 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
挂载
通过命令行挂载
在一个机器上第一次挂载时,需要提供密钥(Token)以及能够访问对象存储的 API 密钥。 (它们只会保存在 /root/.juicefs
,不会发往任何其他地方)。
$ sudo ./juicefs mount NAME-OF-JUICEFS /jfs
如果你使用 macOS Catalina,可以用如下方式挂载
$ ./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, "accesskey": ACCESSKEY, "secretkey": SECRETKEY}
开机自动挂载
Linux
当 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
macOS
在以下说明中,会使用一些变量指代应填的值,请注意替换:
NAME
文件系统名PATH_TO_JUICEFS
juicefs 路径(如:/usr/local/bin/juicefs
)MOUNTPOINT
挂载路径
参照 卸载 确保目标挂载路径处于卸载状态
参照 记住密钥 将授权信息保存在本地文件
在
~/Library/LaunchAgents
下创建文件com.juicefs.NAME.plist
:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.juicefs.NAME</string>
<key>ProgramArguments</key>
<array>
<string>PATH_TO_JUICEFS</string>
<string>mount</string>
<string>NAME</string>
<string>MOUNTPOINT</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
加载上一步创建的文件, 测试加载是否成功:
launchctl load ~/Library/LaunchAgents/com.juicefs.NAME.plist
launchctl start ~/Library/LaunchAgents/com.juicefs.NAME
ls MOUNTPOINT
如果没有挂载成功,可以在上述
plist
文件中添加以下配置:<key>StandardErrorPath</key>
<string>/tmp/mycommand.err</string>
<key>StandardOutPath</key>
<string>/tmp/mycommand.out</string>
通过以下命令就可以重新加载更新后的配置,查看输出:
launchctl unload ~/Library/LaunchAgents/com.juicefs.NAME.plist
launchctl load ~/Library/LaunchAgents/com.juicefs.NAME.plist
cat /tmp/mycommand.out
cat /tmp/mycommand.err
从 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
进程,也可以等它自己退出。