【山大智云】SeafileServer源码分析之Seafile文件系统

2021SC@SDUSC

Seafile文件系统

相关代码涉及fs-mgrseaf-cryptvc-common。在还没介绍提交、分支管理前,可以认为每个仓库都是独立的文件系统。

文件系统结构

  • 抽象结构

    请添加图片描述
    每个仓库都带有一个seafdir作为根目录,根目录通过一系列直接或间接的链接形成 了文件树。整个文件系统中主要分为三个内容:seafile、seafdirent、seafdir。中间这个seafdirent指的是seafdir对seafdir或seafdir对seafile的链接。

    • 链接实现形式

      根据非关系对象存储中的规定,每个对象都携带了一个id。在实际实现中,这个id都等于对象字节流的SHA1。链接就是通过这个id实现的。并且这样还为文件系统带来了一些好处,比如内容相同则无需创建新的拷贝,所以更节省空间。

  • 物理结构

    存储分为三层:目录、文件、块。(需要注意,seafdirent被包含在了seafdir中)

    第一层和第二层都由对象存储系统维护;第三层由块系统维护。第一层通过seafdirent链接第二层(或第一层);第二层通过block_sha1s块表链接第三层。

    在Seafile CE中,也就是公开的源码中,这三层的底层都是操作系统的文件系统。

文件系统类

我们知道了seafile实现的文件系统主要是通过seafile对象来进行管理的。其中主要包括四个类:

  1. SeafFSObject
    seafile文件系统对象的基类。
  2. Seafile
    seafile文件。其中包含了块的索引。
  3. SeafDir
    seafile目录。其中包含了目录项目列表。
  4. SeafDirent
    seafile目录项目。包含了文件名/目录名、最后修改时间等签名内容,以及一个指向文件id/目录id的指针。

文件系统操作

  • 块加密

    为了确保异地存储的安全性,需要对文件内容进行加密。由于文件被分块存储,而且我们在读写时主要操作的是块,所以主要是对块的内容进行加密/解密。

    为了保证安全性,在仓库中随机生成了一个盐(salt),用于防止彩虹表之类的攻击。用户可以给仓库设置一个密码,以协助进行加密和解密。为了避免密码被明文存储,它与仓库id、盐一起生成了一个magic,用于对密码进行核验。

    当然,仓库的加密和解密仍然不是通过用户密码生成的密钥进行的。仓库会随机生成一个密钥,它被用户密码加密后存储在远程服务器,用户可以提供密码解密并得到这个仓库密钥。仓库密钥才是真正参与块的加密和解密的密钥。

    之所以引入仓库密钥,是因为块存储服务器可能与seafile服务器分离。如果只用用户密码加密,则整个加密过程中seafile服务器与块服务器相互独立,seafile服务器没有对加密过程的绝对控制权,从而存在安全隐患。

  • 文件系统操作

    Seafile对象和字节流的相互转换略。

    • 文件操作

      读:将块解密,然后合并为完整的明文信息;

      写:存在如下四种写的形式:

      1. 给出一个原始文件。分块,生成索引,硬链接块(写块),然后生成seafile对象。
      2. 给出一些块和一个索引。检查索引,然后硬链接块、生成seafile对象。
      3. 给出一些块和一个索引。检查索引,然后只硬链接块。
      4. 给出seafile对象id,一些块和一个索引。检查索引,要求每个块都已存在,然后重新生成seafile对象。

      第一个操作用于首次创建;第二和第三个用于更新;最后一个操作用于校验。

    • 目录操作

      主要都是围绕文件树进行。分为以下两类:

      1. 遍历文件树。包括统计子目录大小、统计文件数量、搜索文件等。
      2. 路径跳转。跳转到相对根目录的某个位置(以/表示根目录),该位置可能是seafile、seafdir或seafdirent。然后获取某些信息。
    • 目录项目操作

      伴随目录操作进行。略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Seafile是一款安全、高性能的开网盘(存储)软件。Seafile提供了主流网盘(盘)产品所具有的功能,包括文件同步、文件共享等。在此基础上,Seafile还提供了高级的安全保护功能以及群组协作功能。由于Seafile是开的,你可以把它部署在私有的环境中,作为私有的企业网盘。Seafile支持Mac、Linux、Windows三个桌面平台,支持Android和iOS两个移动平台。 Seafile是由国内团队开发的国际型项目,目前已有50万左右的用户,以欧洲用户为多。自发布以来,Seafile一直保持开放、国际化、高质量的宗旨,受到国内外大型机构的信赖。目前主要的大型客户包括卡巴斯基、中国平安,以及欧美多家知名大学和科研机构。你可以把Seafile想象成是面向团队的开Dropbox。 Seafile功能: 1、文件同步 任何文件夹的选择性同步。 根据历史记录而不是时间戳正确处理文件冲突。 仅将内容增量传输到服务器。中断的传输可以恢复。 与两个或更多服务器同步。 与现有文件夹同步。 2、文件共享与协作 在用户之间或成组共享文件夹。 下载带有密码保护的链接 上载连结 版本控制 3、吸引客户 通过虚拟驱动器访问中的所有文件文件按需同步。 4、隐私保护 使用用户选择的密码进行库加密。 使用桌面同步时的客户端加密。 5、在线文档和知识管理(新) 以所见即所得的方式进行在线Markdown编辑 在线文档审核工作流程草案 元数据管理,包括:文件标签和相关文件 维基模式 实时通知

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值