我认为现在是时候让我的整个 Ubuntu 像我的 Dropbox 文件夹一样同步了。
鉴于我们总是在谈论文件和目录,那么我的Documents
文件夹和/usr
系统目录之间有什么区别呢?除了它们的位置之外,几乎没有区别。
事实上,我认为只有一个大问题阻碍人们在任何地方都能拥有自己心爱的装置的镜像:符号链接。
Dropbox、Google Drive、Ubuntu One、Sugarsync、Skydrive,这些服务都不支持符号链接。这意味着,如果我在其中一个同步文件夹中推送符号链接,则符号链接在本地会保持原样,但在远程(在云端或其他同步机器上)符号链接会解析为最初指向的实际文件。
这会彻底破坏 Linux 安装,因此这些服务不能用于此目的。
所以问题是:是否有人知道如何实现完全同步的 Ubuntu,始终与远程运行副本同步,但仍在两个磁盘上本地存储?
我最好的猜测是我可以使用NFS。但是 Dropbox 和 NFS 之间的主要区别在于 NFS 是一个远程文件系统,它总是强制远程访问文件,而 Dropbox 会将修改推送到本地文件系统(因此性能会更好)。我也听说过 NFS 缓存。有人知道这个解决方案是否可以从这个意义上近似于 Dropbox 吗?
附言:我知道/boot
,、、、和设备特定的挂载点和必须被排除在同步机制之外。我感兴趣的是/dev
/proc
/run
/tmp
/mnt
/media
原则。能否以合理的性能和合理的资源(例如~1Mbps 上传带宽和公共 IP 地址)来实现这一点?
答案1
http://www.howtoforge.com/setting-up-unison-file-synchronization-between-two-servers-on-ubuntu-11.10
本教程介绍如何使用以下软件在两台 Ubuntu 11.10 服务器之间设置文件同步齐奏。Unison 是一款类似于同步,但最大的区别在于,它在两个方向上跟踪/同步更改,即,在server1上更改的文件将被复制到server2,反之亦然。
答案2
我的感觉是,你在这里打开了潘多拉的盒子。
您如何处理不同的架构?文件系统的某些部分始终将架构作为路径的一部分(
/usr/lib/x86_64-linux-gnu
和朋友),但我认为这并不适用于所有地方,无论如何,您都必须确定应复制哪些符号链接(和硬链接),哪些是特定于架构的。如何检测重要文件何时发生更改?如果二进制文件被替换或配置文件被更新,是否应重新启动程序?有些会使用 inotify 检测此类更改,有些则不会。如果您只是在系统运行时同步文件,则很难知道哪些正在运行的进程会受到影响。(您可以查看
apt
文件列表或打开的文件描述符,但仍会有边缘情况)。(考虑一下如果您的同步机制被替换libc
或类似情况会发生什么)。
我倾向于认为远程管理(例如,使用puppet
或 Ubuntu 的apt
同步机制)比整个机器映像的持续同步更合适。
您可能应该将其包含/var
在不同步的文件中(来自多个系统的合并日志似乎没有什么意义)。