Seafile 系统中的文件是被拆分成块存储的,这意味着服务器上存储的不是完整文件,而是块。
这种设计便于实现高效的数据去重。
然而,有时管理员希望直接在服务器上访问文件,可以使用
seaf-fuse
实现。
seaf-fuse
是 FUSE 虚拟文件系统的实现,它将 Seafile 管理的所有文件挂载到一个目录(称为“挂载点”),从而可以像访问普通文件夹一样访问 Seafile 服务器上的所有文件。
注意事项:
加密文件夹无法被
seaf-fuse
访问。
当前实现是只读的(read-only),无法通过挂载的文件夹修改文件。
在 Debian/CentOS 系统上,需要加入 "fuse" 用户组才有权限挂载 FUSE 文件夹。
在 Docker 部署中使用 seaf-fuse
假设我们希望挂载到主机的
/opt/seafile-fuse
。
修改 seafile-server.yml
添加以下内容:
seafile:
...
volumes:
...
- type: bind
source: /opt/seafile-fuse
target: /seafile-fuse
bind:
propagation: rshared
privileged: true
cap_add:
- SYS_ADMIN
在容器中启动 seaf-fuse
启动 Seafile 服务器并进入容器:
docker compose up -d
docker exec -it seafile bash
进入 Seafile 服务器目录并启动 seaf-fuse:
cd /opt/seafile/seafile-server-latest/
./seaf-fuse.sh start /seafile-fuse
在二进制包部署中使用 seaf-fuse
假设我们希望挂载到
/data/seafile-fuse
。
创建挂载点目录
mkdir -p /data/seafile-fuse
启动 seaf-fuse
启动 Seafile 服务器:
./seafile.sh start
然后启动 seaf-fuse:
./seaf-fuse.sh start /data/seafile-fuse
seaf-fuse
支持 FUSE 标准挂载选项,例如可以指定挂载目录的所有者:
./seaf-fuse.sh start -o uid=<uid> /data/seafile-fuse
默认情况下,FUSE 会启用块缓存功能以缓存块对象,从而减少对后端存储的访问,但会占用本地磁盘空间。
从 Seafile-pro-10.0.0 开始,可以通过以下选项禁用块缓存:
./seaf-fuse.sh start --disable-block-cache /data/seafile-fuse
完整支持的挂载选项请参考
man fuse
。
停止 seaf-fuse
./seaf-fuse.sh stop
挂载目录内容
顶层目录
列出
/data/seafile-fuse
的内容:
$ ls -lhp /data/seafile-fuse
drwxr-xr-x 2 root root 4.0K Jan 1 2015 abc@abc.com/
drwxr-xr-x 2 root root 4.0K Jan 4 2015 foo@foo.com/
drwxr-xr-x 2 root root 4.0K Jan 1 2015 plus@plus.com/
drwxr-xr-x 2 root root 4.0K Jan 1 2015 sharp@sharp.com/
drwxr-xr-x 2 root root 4.0K Jan 3 2015 test@test.com/
顶层目录包含多个子文件夹,每个子文件夹对应一个用户。
用户目录
列出用户
abc@abc.com
的目录:
$ ls -lhp /data/seafile-fuse/abc@abc.com
drwxr-xr-x 2 root root 924 Jan 1 1970 5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/
drwxr-xr-x 2 root root 1.6K Jan 1 1970 a09ab9fc-7bd0-49f1-929d-6abeb8491397_My Notes/
可以看到,每个用户目录下有若干子文件夹,每个子文件夹代表该用户的一个库,命名格式为
{library_id}-{library-name}
。
库目录
列出某个库的内容:
$ ls -lhp /data/seafile-fuse/abc@abc.com/5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/
-rw-r--r-- 1 root root 501K Jan 1 2015 image.png
-rw-r--r-- 1 root root 501K Jan 1 2015 sample.jpng
遇到 “Permission denied” 错误
如果运行
./seaf-fuse.sh start
时提示 “Permission denied”,很可能是你不在 "fuse" 用户组。
解决方法:
sudo usermod -a -G fuse <your-user-name>
注销并重新登录 shell,然后再次运行:
./seaf-fuse.sh start <挂载路径>