FUSE 扩展

Seafile 将文件拆分为数据块进行存储,以实现高效的数据去重。因此,在服务器的存储目录中通常无法直接找到完整的用户文件。
seaf-fuse 基于 FUSE(用户空间文件系统),可以将 Seafile 管理的文件挂载到服务器上的一个目录(挂载点)。挂载后,管理员可以像访问普通目录一样浏览和读取文件。
使用限制:
  • 只读访问 : seaf-fuse 不能通过挂载目录创建、修改或删除 Seafile 中的文件。
  • 不支持加密文件夹 :通过 Seafile 加密的文件夹无法由 seaf-fuse 访问。
  • 挂载权限 :在 Debian、CentOS 等 Linux 系统中,非特权用户可能需要加入 fuse 用户组才能进行 FUSE 挂载。
以下操作适用于 Seafile 14 和 Seafile 13。
在 Docker 部署中使用 seaf-fuse
以下以 Seafile 的 Docker Compose 配置目录为 /opt/seafile 、宿主机挂载点为 /opt/seafile-fuse 为例。如果实际部署路径不同,请相应调整。
1. 创建宿主机挂载点
在 Docker 宿主机上创建挂载目录:
            
                
                
sudo mkdir -p /opt/seafile-fuse
2. 修改 seafile-server.yml
编辑 Seafile 使用的 seafile-server.yml ,在现有的 services.seafile 配置中新增 FUSE 目录挂载,并设置所需的容器权限:
            
                
                
services:
seafile:
volumes:
# 保留现有的 Seafile 数据卷等挂载配置,并新增以下内容:
- type: bind
source: /opt/seafile-fuse
target: /seafile-fuse
bind:
propagation: rshared
privileged: true
cap_add:
- SYS_ADMIN
请将这些字段 合并到原有 seafile 服务中 ,不要用上述片段替换整个服务配置,也不要删除原有数据卷、环境变量或依赖项。如果原配置已有 volumes 或 cap_add ,应在现有列表中追加所需内容。
配置项
说明
source
宿主机上的挂载目录,本例为 /opt/seafile-fuse 。
target
Seafile 容器内的挂载目录,本例为 /seafile-fuse 。
propagation: rshared
允许 FUSE 挂载事件在容器和宿主机之间传播。
privileged: true
赋予容器扩展的系统权限,以支持 FUSE 挂载。
SYS_ADMIN
FUSE 挂载所需的系统管理能力。
安全提醒: privileged: true 会赋予容器较高权限。应仅在可信的宿主机和容器环境中启用,并限制可管理 Docker 和宿主机的用户。
3. 启动 Seafile 容器
进入 Docker Compose 配置目录,检查并启动服务:
            
                
                
cd /opt/seafile
docker compose config --quiet
docker compose up -d
进入 Seafile 容器:
            
                
                
docker exec -it seafile bash
4. 启动 seaf-fuse
在容器中执行:
            
                
                
cd /opt/seafile/seafile-server-latest/
./seaf-fuse.sh start /seafile-fuse
启动后,可以在 宿主机 上查看挂载目录:
            
                
                
ls -lhp /opt/seafile-fuse
如果可以看到用户目录,则说明可以通过宿主机访问 FUSE 挂载的文件。
5. 停止 seaf-fuse
需要停止 FUSE 挂载时,在 Seafile 容器中进入服务器目录并执行:
            
                
                
cd /opt/seafile/seafile-server-latest/
./seaf-fuse.sh stop
在二进制包部署中使用 seaf-fuse
以下以 /data/seafile-fuse 作为挂载目录。执行启动和停止脚本时,应使用具有相应权限的 Seafile 服务运行用户。
1. 创建挂载目录
            
                
                
mkdir -p /data/seafile-fuse
2. 启动 Seafile 服务
进入 Seafile 服务器安装目录,先启动 Seafile 服务:
            
                
                
cd /opt/seafile/seafile-server-latest/
./seafile.sh start
如果 Seafile 服务已经运行,则无需重复启动。
3. 启动 seaf-fuse
            
                
                
./seaf-fuse.sh start /data/seafile-fuse
挂载成功后,可通过以下命令查看目录:
            
                
                
ls -lhp /data/seafile-fuse
4. 停止 seaf-fuse
在 Seafile 服务器安装目录执行:
            
                
                
./seaf-fuse.sh stop
挂载选项
seaf-fuse 支持标准的 FUSE 挂载选项。
指定挂载目录的所有者
例如,将挂载目录显示的所有者 UID 设置为 1000 :
            
                
                
./seaf-fuse.sh start -o uid=1000 /data/seafile-fuse
请根据实际用户的 UID 修改 1000 。如需了解更多挂载选项,可查看 man fuse 。
禁用块缓存(专业版)
Seafile 专业版在使用对象存储后端时 , seaf-fuse 默认会缓存数据块,以减少访问对象存储的次数,但缓存会占用服务器本地磁盘空间。
如果不希望使用块缓存,可以在启动时添加 --disable-block-cache :
            
                
                
./seaf-fuse.sh start --disable-block-cache /data/seafile-fuse
以上示例以二进制部署的挂载路径为例;Docker 部署时请将路径替换为容器内的 /seafile-fuse 。
挂载目录结构
seaf-fuse 的挂载目录依次包含 用户目录 → 资料库目录 → 文件和子目录 。下面以二进制部署的 /data/seafile-fuse 为例说明。Docker 部署时,可以改为查看宿主机的 /opt/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/
顶层目录中的每个子目录对应一个 Seafile 用户。
用户目录
            
                
                
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/
每个子目录代表一个资料库,目录名称包含 资料库 ID 和资料库名称 。例如,上面的 5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos 对应一个名为 Photos 的资料库。
资料库目录
            
                
                
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
可以像读取普通文件一样读取这些文件,但 不能通过挂载目录修改 Seafile 中的内容 。
常见问题
启动时出现 Permission denied
如果执行 ./seaf-fuse.sh start 时提示 Permission denied ,可能是执行命令的用户没有 FUSE 挂载权限。在需要使用 fuse 用户组的 Linux 发行版上,可将相应用户加入该组:
            
                
                
sudo usermod -a -G fuse <your-user-name>
将 <your-user-name> 替换为实际用户名。完成后退出当前登录会话并重新登录,再执行挂载命令。
如果是在 Docker 中部署,还需要检查 seafile-server.yml 中是否正确设置了 FUSE 挂载目录、 privileged 和 SYS_ADMIN 。如果宿主机无法看到容器中的挂载结果,应检查挂载目录及其所在文件系统是否支持所需的共享挂载传播方式( rshared )。
为什么无法修改挂载目录中的文件?
seaf-fuse 只提供只读访问。要修改文件,请使用 Seafile 网页端或客户端。
为什么无法看到加密文件夹?
seaf-fuse 不支持访问加密文件夹,因此无法在挂载目录中读取这些文件夹的内容。