FUSE 扩展

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 <挂载路径>