Dropbox 刚刚宣布他们的 Linux 客户端将来将仅支持 ext4。我目前在 btrfs 分区上使用 Dropbox(没有任何问题)。显然 xattr 支持是必不可少的。 ext4 和 btrfs 都支持这一点,实际上我不知道 btrfs 不支持任何 ext4 功能。
我不知道 Dropbox 打算如何检测文件系统,但是有什么方法可以让 btrfs 伪装成 ext4 吗?
答案1
如果不修改内核,可能不会。即使这样,这也可能不是一个好主意,一旦 btrfs 工具认为文件系统不是 btrfs,它们可能会拒绝工作。
Dropbox 是否会因为不回答问题而不支持它,或者该程序会主动避免在任何其他文件系统上运行?如果是后者,检测文件系统的方法有很多种,你无法欺骗所有的方法。
答案2
处理此问题的最简单方法可能是在 Btrfs 文件系统中创建一个 ext4 环回映像,然后将其挂载到某个临时位置,将与 Dropbox 同步的文件移动到该文件系统中,然后将其重新挂载到 Dropbox 同步的顶级目录。
这将使 Dropbox 保持正常运行,但您无需更换整个文件系统。您仍然可以获得 Btrfs 的一些好处,因为您可以快照环回映像等。
答案3
以下是如何在 btrfs 上创建一个 ext4 文件,并定位到你想要存储图像的目录
truncate -s 100G dropbox.img
chown root:root dropbox.img
chmod 600 dropbox.img
mkfs.ext4 -j dropbox.img
mkdir /opt/dropbox
mount -t ext4 -o loop {path}/dropbox.img /opt/dropbox
chmod 777 /opt/dropbox
umount /opt/dropbox
现在,编辑/etc/fstab
并添加
{path}/dropbox.img /opt/dropbox ext4 loop 0 0
现在,如果您这样做mount -a
,您将在 btrfs 上拥有永久的 ext4 文件系统
我选择truncate
而不是fallocate
因为该dropbox.img
文件将在文件系统上“精简配置”(稀疏文件)而不是正常的。这意味着 100GB 不会立即用完,而是随着 dropbox 随着时间的推移读写而慢慢超时。
答案4
对的,这是可能的
并且不需要按照另一个答案的建议进行内核修改。这是当我有 Dropbox 不喜欢的 ext3 根文件系统时使用的解决方案。 Dropbox 检测正在使用的文件系统的方式是通过 /etc/mtab 文件。该文件跟踪当前安装的文件系统,但很大程度上是其他 UNIX 系统的遗产。某些修改可以安全地进行,而不会破坏东西。在这种情况下,更改它报告的文件系统的类型。这些内容对于像 Dropbox 这样的用户空间程序来说是一种方便,但内核不需要正常操作。
首先,确保 /etc/mtab 是纯文本文件。在许多现代 Linux 系统上,它是无法修改的 /proc/self/mounts 的符号链接。如果是这种情况,请将该链接替换为该文件的副本:
rm /etc/mtab
cp /proc/self/mounts /etc/mtab
之后,您可以修改该文件以将文件类型(如第三列中所示)更改为 ext4,以便 Dropbox 相信是这样。
sed 's/\<btrfs\>/ext4/' /etc/mtab
现在,您应该可以毫无怨言地启动 Dropbox。每次启动都必须重复此过程,因此我将 sed 's/<btrfs>/ext4/' /etc/mtab 全部放入登录后运行的脚本中。
cat <<EOF >fix-mtab.sh
#!/bin/sh
sudo rm /etc/mtab
sudo cp /proc/self/mounts /etc/mtab
sudo sed 's/\<btrfs\>/ext4/' /etc/mtab
EOF
chmod +x fix-mtab.sh
./fix-mtab.sh