如何在家中创建自己的 Dropbox / Ubuntu One 服务器?

如何在家中创建自己的 Dropbox / Ubuntu One 服务器?

有谁知道有什么资源可以告诉我如何在家里创建自己的“Dropbox、Ubuntu One”服务器吗?

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

我尝试在我的 Ubuntu 10.04 上设置 iFolder,但目前还没有成功。

答案1

事实上有很多。

  • SparkleShare(依赖项:git/subversion、mono、python)位于github 基于 GUI 的同步软件。

    a. 版本控制:通过源代码控制系统,因此它通过版本号基于中央服务器进行互斥。

    b. 状态:正在开发中

    c. 优点:OSS,基于 mono,因此易于修改,缺点:用户级进程,依赖于 GC,共享协议效率低下,因为 git 主要用于小型文本文件,编译起来相当困难(我试过了)。使用高级工具。

  • 唇型同步(依赖:Unison、rsync)基于命令行服务的软件。

    a. 版本控制:通过rsync 增量算法.我认为程序员必须选择冲突解决。

    b. 状态:我找不到它的源代码,所以我不知道。他的 git repo 中只有二进制文件。

    c. 优点:设置良好,使用中级工具。

  • 文件夹- Novell 的 Dropbox。我还没有研究过它的源代码。我只想完成这个编辑,如果大家感兴趣的话,我会添加更多内容。

    a. 版本控制:

    b. 状态:在 Ubuntu 上编译都有问题,更不用说软件包了。这是详细的安装指南

    c. 优点:Windows X64 客户端,成熟,AD 与 ACL 集成,其他项目尚未开始实现的功能。我认为这可能是一个很好的起点。缺点:Novell 可能不会将其公共 svn 存储库用作主要存储库,而只会进行代码删除。不过我对此并不十分了解。可能与 openSUSE 耦合过多,无法轻松安装在 Ubuntu 上。查看其算法。

  • scp/rcp - 已弃用,改用 rsync

  • 灾难恢复数据库- 用于分布式 RAID-1 的块设备镜像工具,即 Dropbox 的服务器变体。我还没有查看它的源代码,但它仅适用于 Linux。实际算法可能很容易与我在此软件列表下方的思考中的源代码相结合。

    a. 版本控制:LAN/WAN 上的内部消息格式

    b. 状态:看上去足够成熟

    c. 优点:对于 Linux 来说足够稳定,缺点:不支持其他操作系统


现在我正在研究如何缩短虚拟化 Windows 7 上的编译时间,在 Windows 7 上,金属上的编译时间为 40 秒,但虚拟化后约为 3 分 20 秒。我正在考虑编写一个 ioctl 驱动程序,它是一个写入缓存,看起来像 NTFS 上选定文件夹的 ram 磁盘。

使用上述软件,我认为经过一周的全职开发,2-3 人就可以制作出一个可用的 Alpha 版本,而且通过结合上述软件,您不会丢失文件。


那么,在我的系统上,总体思路是这样的;

  1. 安装虚拟驱动器 \?{GUID},即内存磁盘和 RW 缓存。创建此虚拟驱动器的软件需要两个输入参数(至关重要):

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

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

    此创建虚拟卷的代码取自TrueCrypt 的代码,在 /Driver/DriverFilter.c 中(以及其他文件中)

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

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

  4. 网络异步复制仍在进行中。读取速率约为 100 MiB/s,使用 2 GiB 虚拟磁盘,读取所有数据需要 20.5 秒。

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

这将具有以下优点

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

答案2

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

希望这能够成为一种伟大的、可自行实现的替代方案。

答案3

OwnCloud!听起来就像您正在寻找的东西。

答案4

我认为这并不是您想要的,但这取决于您的预期用途。

崩溃计划是一个备份软件包和相关的在线备份托管服务,但不同的是,他们的软件有一种模式,允许您通过互联网(或 LAN)将数据备份到另一台运行该软件的 PC 上。

这意味着目标不必在云端。它与 Dropbox 不太一样,因为它更注重备份,而不是同步和从任何地方访问文件,但如果您只需要备份,那么它就很好用。如果您想从另一台电脑访问备份文件,我认为您可以进行“本地恢复”,但我没有尝试过。

基本软件包是免费的,支持“备份到另一台计算机”模式,但只进行计划备份,但有一个“专业”版的软件也需要付费,并且进行实时同步,而不仅仅是计划备份。(云存储也是按月付费的可选附加功能)

相关内容