![为什么不使用 Ubuntu One 同步家庭外的文件夹?](https://linux22.com/image/1093034/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E4%BD%BF%E7%94%A8%20Ubuntu%20One%20%E5%90%8C%E6%AD%A5%E5%AE%B6%E5%BA%AD%E5%A4%96%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我花了一段时间才发现,使用 Ubuntu One,我只能同步主文件夹中的文件夹。在所有其他文件夹中,Ubuntu One 选项在首选项中可用,但实际操作是灰色的。
这Ubuntu One 常见问题解答对此非常清楚:
不可以,目前您只能选择同步主目录内的文件夹。
但我实际上想知道为什么以及这是否会改变以及是否有解决方法(除了将我的家设置为之外的其他方法/
)?
我个人的主文件夹中除了程序配置外没有任何重要数据。所有文档、图片、音乐都位于名为的文件夹中,该文件夹/data
实际上位于不同的分区上。当想要重新安装 Ubuntu 时,这会让事情变得容易得多。
答案1
至少在可预见的未来不会改变(在这方面我可以预见未来几年)。允许用户选择家庭以外的任意文件夹与 Ubuntu One 同步,这可能会在多台不同的计算机之间同步,这会带来大量可用性问题,以涵盖坦率地说并不常见的用例。
我记得的一个问题是,如果您尝试同步可移动设备的安装点(很多人都尝试这样做),当您移除设备时,syncdaemon 将删除所有内容;要使其正常工作,syncdaemon 必须了解设备、检测其移除等。这需要付出相当大的努力,并且很有可能带来可用性噩梦。
另一个问题是,如果您尝试同步具有特殊权限、所有权或文件类型的文件夹:请考虑或/etc/
,这是最糟糕的情况。或者实际上任何不属于您的文件夹。我们可以简单地禁止同步不属于您的文件夹,但我们知道有些人以 root 身份运行 syncdaemon(尽管我们发出了警告)。/tmp/
/dev/
一个解决方法是将文件夹挂载(通过/etc/fstab
,这样您就可以确定每次都挂载了分区——否则您可能会丢失同步的数据)/data
到您的家中。您可以简单地移动/data
到~/data
,或者,如果您有路径/data
硬编码的东西(很有可能),或者如果您已经习惯了/data
(也很有可能),符号链接或绑定挂载/data
到您家中的挂载点。如果您根本不想在您的家中看到它,只需将其设置为~/.data
。
答案2
我确实设法通过使用绑定安装使其工作。行看起来/etc/fstab
像这样:
/mnt/s1/Audio /home/daniel/Music bind defaults,bind 0 0
显然,您需要对相关文件夹具有写入权限。也许您还需要拥有这些文件,我不确定。
答案3
我怀疑原因是权限。您会注意到您也无法轻松编辑主目录之外的任何文件吗?这是 Linux 的一般安全功能,我怀疑 Ubuntu One 开发人员(非常正确)认为普通用户会将所有文件保存在主目录中,守护进程可以在没有提升权限的情况下轻松运行。
关于您的配置,顺便提一下,这完全取决于个人喜好,但我将完整的 /home/ 保存在单独的磁盘/分区上。这确实意味着在重新安装之间,您需要浏览并删除所有隐藏的文件夹/文件以进行全新安装,但这会为您提供具有 ubuntuone 权限的完全本机主目录等优势 - 只是一个想法。
答案4
我在 Ubuntu 12.04 下有一个非常相似的设置。我有一个 NFTS 分区,里面有我的音乐库,Windows 7 和 Ubuntu 都可以看到它。我希望能够将此目录同步到 Ubuntu One,而不必明确将整个目录移动到我的主目录(这似乎是一个合理的要求,对吧?)。
我的解决方案很简单,每次启动 Ubuntu 时,将共享分区挂载到我的主目录中。这只需两个相当简单的步骤。
安装并使用
pysdm
以确保分区在启动时正确安装(不一定在您的主目录中,只是在文件系统中的某个位置)。或者,/etc/fstab
如果您足够自信,您可以自己修改文件。作为一个相当新的用户,我发现 pysdm 解决方案更简单。无论如何,请确保
/etc/fstab
在执行此步骤之前备份您的文件!(以防万一!)sudo cp /etc/fstab /etc/fstab.old
(例如)如果出现问题,您可以随时恢复旧文件并回到原点:
sudo cp /etc/fstab.old /etc/fstab
在
pysdm
GUI 中,选择目标分区并点击“助手”按钮。确保选择“设备所有者可以挂载它”选项。这将确保您可以使用 Upstart 在您的主目录中重新挂载。就我而言,我将分区设置sda4
为挂载在/media/sda4/
。通常,Upstart 的行为由目录中的文件定义。为了在我的主目录中
/etc/init/
挂载新分区(对我来说),我定义了一个文件,其中包含:/media/sda4
/etc/init/mount-mydirs.conf
start on runlevel [2345] task exec /bin/mount-mydirs`
第一行告诉 Upstart 在正常启动时执行任务。第二行告诉 Upstart 该作业只执行一次(不是无限期或重复的作业),最后一行告诉它执行脚本
/bin/mount-mydirs
(使用 root 权限)。文件“/bin/mount-mydirs”如下所示:
mount --bind /media/sda4/ /<home directory>
(--bind 选项允许从原始挂载点和新挂载点访问文件)。
当我写这篇文章时,我正在听我完全同步的、新安装的音乐库!!