如何在家制作自己的 Dropbox / Ubuntu One 服务器?

use*_*978 70 software-recommendation file-server

有没有人知道任何可以向我展示如何在家制作自己的“Dropbox, Ubuntu One”服务器的资源?

我真的很喜欢这些服务的想法,但我不想把我的“东西”放在云端。理想情况下,它应该有一个在 Linux 和 Windows 上运行的客户端。

我尝试在我的 Ubuntu 10.04 上设置 iFolder,但到目前为止没有任何成功。

Hen*_*rik 44

实际上有很多。

  • SparkleShare (deps: git/subversion, mono, python) at github 基于 GUI 的同步软件。

    一种。版本控制:通过源代码控制系统,因此它是通过版本号基于中央服务器的互斥锁。

    湾 状态:开发中

    C。优点:OSS,基于单声道,因此易于修改,缺点:用户级进程,依赖于 GC,无效的共享协议数量级,因为 git 主要用于小文本文件,相当难以编译(我试过)。使用高级工具。

  • lipsync (deps: Unison, rsync) 基于命令行服务的软件。

    一种。版本控制:通过rsync delta 算法。我假设程序员必须选择冲突解决方案。

    湾 状态:我找不到它的源代码,所以我不知道。他的 git repo 中唯一的东西是二进制文件。

    C。优点:设置不错,使用中级工具。

  • iFolder - Novell 的 Dropbox。我还没有研究它的来源。我只想结束这个编辑,如果人们感兴趣,我会添加更多。

    一种。版本控制:

    湾 状态:让它甚至在 Ubuntu 上编译都有问题,更不用说包了。这是详细的安装指南

    C。优点:Windows X64 客户端,成熟,与 ACL 的 AD 集成,其他项目尚未开始实施的功能。我认为这可能是一个很好的起点。缺点:Novell 可能不会将其公共 svn 存储库用作主要存储库,而只会执行代码删除。虽然我不完全清楚这一点。可能与 openSUSE 耦合太强,无法轻松安装在 Ubuntu 上。看看它的算法。

  • scp/rcp - 不推荐使用 rsync

  • DRDB - 用于分布式 RAID-1 的块设备镜像工具,即 Dropbox 的服务器变体。我还没有检查它的源代码,但它只是 linux。实际的算法可能很容易与我在此软件列表下方的思考中的源代码结合使用。

    一种。版本控制:LAN/WAN 上的内部消息格式

    湾 状态:看起来足够成熟

    C。优点:对于 linux 足够稳定,缺点:不支持其他操作系统


现在我正在研究改进虚拟化 Windows 7 上的编译时间,其中金属上的 Windows 7 上的编译时间是 40 秒,但虚拟化大约 3m 20 秒。我正在考虑编写一个 ioctl 驱动程序,它是一个直写缓存,看起来像 NTFS 上选定文件夹的 ram 磁盘。

使用上述软件,我认为一周的 2-3 人全职开发将产生一个可用的 Alpha,通过组合上述软件不会丢失您的文件。


在我的系统上,一般的想法是;

  1. 挂载一个虚拟驱动器 \?{GUID},即 ram-disk 和 RW-cache。创建此虚拟驱动器的软件需要两个输入参数(至关重要):

    一种。目标文件夹;这是 SMB 文件夹,因此我将让操作系统的网络堆栈处理实际的 IO。就我而言,这又是 VMWare 虚拟文件夹,它本身在 ext4 驱动器上有一个目标,但它很容易成为使用 SAMBA/SMB 的文件服务器。

    湾 要挂载的文件夹的路径,例如C:\ramdisk

    这段用于创建虚拟卷的代码取自TrueCrypt 的代码,位于 /Driver/DriverFilter.c (以及其他文件中)

  2. 驱动在启动时使用SMB/VMWare/网络协议来获取数据;它以低任务优先级从网络异步获取并填充其缓存。它可以使用简单的压缩算法,并有 1 个线程使用消息框类型的继续传递来获得出色的性能。在 Windows 上它可以使用普通的异步 IO 调用,在 linux 上它可以使用epoll / inotify实现并从nginx获取代码。

  3. 我的 ram-disk 服务将未命名的 ramdisk 驱动器安装为 NTFS 文件夹。所有程序都可以继续写入 C:\ramdisk 或我称之为的任何内容。

  4. 来自网络的异步复制仍在进行。读取速率约为 100 MiB/s 和 2 GiB ramdisk,读取所有数据需要 20.5 秒。

每次调用 read 都会在 CPU 内将索引计算到一个固定的 n:ulong GiB 最大大小的数组中。它需要解决冲突或读写锁。如果我们实现一个像 Microsoft Sync 可用的冲突解决算法,我们可以将每个冲突的块作为消息传递给另一个冲突解决进程。Dropbox 通过创建一个新文件并将其命名为“PrevFileName Username's Conflicted Copy (yyyy-MM-dd).ext”来解决这个问题。也许这可以通过一个小部件来改变,如果有人针对那个单一来源进行编译——小部件会检测未完成的更改作为消息/事件并选择冲突解决协议。因此,当在独占模式下针对文件夹进行编程时,Windows VM 可以将小部件设置为“独占”。

这将有这些 PRO

  • 这将是非阻塞/异步
  • 它将做出假设,但不要求一台计算机将主要写入文件。
  • 它适用于任意大的文件
  • 通过将上述项目捆绑在一起,它可以在 *nix 和 Windows 上运行。
  • 当需要高读取性能时它会起作用(即文件物理位于磁盘上)
  • 当发生冲突事件时,可以提供一个用户界面应用程序,允许用户编写/下载对不同类型的事件(即不同类型的文件)有效的插件。例如,文本文件可以通过 Kompare/WinDiff 调出,而二进制文件将被复制并保存为另一个文件。


Ric*_*ick 41

目前还没有一个很好的开源替代品可以开箱即用。最值得关注的是 sparkleshare 项目:http : //www.sparkleshare.org/

希望这会成长为一个伟大的,自己动手,替代。

  • 不幸的是,它使用 git DVCS 作为后端,不适合 ~1TB 二进制数据,因为对二进制数据的修改会增加服务器空间的使用。但除此之外,它看起来很有希望。 (2认同)

小智 18

自己的云!听起来像你正在寻找的东西。


dev*_*eyi 5

我在Ubuntu UK Podcast上听说了Syncany,目前是测试版,但看起来它符合要求