(译)在任何文件系统下使用 Dropbox

(译)在任何文件系统下使用 Dropbox

Dropbox 曾取消支持 ext4 / NTFS / HFS+ / APFS 以外的部分文件系统支持,遇到这种情况我们应该怎么做?

原文链接:https://ihaveabackup.net/article/use-dropbox-on-any-fs
题图链接:https://i2.wp.com/itsfoss.com/wp-content/uploads/2018/08/dropbox-filesystem-support-featured.png

译文:

在任何文件系统下使用 Dropbox

如果你在 ext4 以外的文件系统下使用 Dropbox,你可能会在过去的两个月(译注:指 2018.7 - 2018.8)内被下面这条警告弄得很烦:

请移动 Dropbox 的位置。Dropbox 将于十一月停止同步。

根据 Dropbox 的说法,这是预期行为,他们的官方回复如下:

大家好,在 2018.07.11,我们将会停止对 Dropbox 同步到使用某些不常见文件系统的驱动器的支持。受支持的文件系统为:Windows 下的 NTFS,Mac 下的 HFS+ 或 APFS,和 Linux 下的 Ext4。我们在此更新了相应的桌面需求。因为 Dropbox 依赖于拓展属性(X-attrs)来识别 Dropbox 文件夹下的文件,并让它们保持同步。我们将会继续并且仅支持最常见的,支持 X-attrs 的文件系统,因此我们能确保稳定性和一致的体验。

首先,我建议大家都试试看 syncthing,先看看它能否满足你的需要,因为它真的是一个很好的替代品。我也在法律层面上对这件事有些好奇,因为 Dropbox 更改了他们的用户协议,已付费的用户现在可以取消付费吗?

这就是「抱歉,我们在某些文件系统上遇到了玄学问题,所以现在我们只有能力支持一个」的企业扯淡版,但这么说就是一个市场和营销失误了,所以他们把这个当作「一致的体验」和「稳定性」的卖点,然后提了提 xattrs,其实每个文件系统都支持它。下面是解决办法。

回到主题,解决办法是,在一个文件中创建一个 ext4 文件系统,将那个文件挂载为 loopback,把 dropbox 文件夹移动到那,然后让 systemd 在首次访问的时候自动挂载它。这让你能运行 Dropbox 而不用管你本来的文件系统是什么,又因为有 systemd 自动挂载,整个流程绝对是自动化并且无痛的。

  1. 关闭 dropbox
  2. 查看你 Dropbox 文件夹的大小 du -hs ~/Dropbox
  3. truncate --size 5G dropbox.img # 根据需要调整大小
  4. 如果你正在使用一个 CoW 的文件系统,使用 chattr +C dropbox.img 来对 image 关闭 CoW
  5. mkfs.ext4 -F dropbox.img
  6. mv Dropbox Dropbox.old
  7. sudo mount -o loop,rw dropbox.img ~/Dropbox
  8. sudo chown youruser:youruser ~/Dropbox
  9. cp -r Dropbox.old/* Dropbox/
  10. sudo umount ~/Dropbox

创建两个文件,然后把它们放在 /etc/systemd/system/ 下。文件名必须反映出挂载点,这在 systemd spec 里有(请注意 Dropbox 的首字母大写):

/etc/systemd/system/home-youruser-Dropbox.mount

1
2
3
4
5
[Mount]
What=/home/youruser/dropbox.img
Where=/home/youruser/Dropbox
Type=ext4
Options=loop,rw

/etc/systemd/system/home-youruser-Dropbox.automount

1
2
3
4
5
6
7
8
9
10
11
[Install]
WantedBy=multi-user.target

[Unit]
Description=Automount Dropbox

[Automount]
Where=/home/youruser/Dropbox

[Install]
WantedBy=multi-user.target

使用 systemctl daemon-reload 重载 systemd,然后使用 sudo systemctl start home-youruser-Dropbox.automount 开启自动挂载。如果你输入 ls ~/Dropbox,你就会看到你 Dropbox 文件夹下的文件了,因为 systemd 自动挂载了它。不要继续后面的步骤除非前面的已经顺利完成。

使用 systemctl enable home-youruser-Dropbox.automount 开启自动挂载并让它开机自动运行,然后再打开 dropbox。一切应该都正常工作。

可能可以使用 systemd 用户文件(而不是系统文件)来完成这一操作,就当作留给读者的练习吧。

另外还有一点,如果你的文件系统有快照,你将会不能对 Dropbox 文件夹「增量」快照,因为它现在是单独挂载的,并不会包含在快照里。由于 Dropbox 有自己的备份机制,而且镜像文件本身还是会在你的快照里出现,所以应该问题不大。

2020-02-15 更新

Dropbox 已宣布恢复其他系统的支持,这篇文章目前可能没有较大参考价值了。

(译)在任何文件系统下使用 Dropbox

http://blog.sinkpad.tech/2019/07/09/Use-Dropbox-any-fs/

作者

Luke

发布于

2019-07-09

更新于

2023-05-29

许可协议

评论