问题及原因

在Linux下,如果你尝试通过ntfs-3g访问NTFS分区下的Onedrive目录,会出现错误无法访问。

使用ll检查目录,会显示一个错误:unsupported reparse tag 0x9000701a

这是由于Onedrive for Windows使用了一个NTFS下的Reparse Points来实现文件按需下载,可以访问wiki页面了解更多。

本文章不讨论如何在Linux中实现同步Onedrive的相关内容,只考虑如何在Linux下打开Windows中创建的Onedrive目录,主要适用于双系统用户 如果你希望在Linux中创建Onedrive目录并同步Onedrive数据,建议使用abraunegg/onedrive.

准备条件

  • Onedrive目录在一个本地NTFS分区下(未测试分区经过bitlocker加密的情况)
  • 已安装ntfs-3g,且版本号在2017.3.23AR.4以上. (使用ntfs-3g --version查看版本号)

已知问题

  • Onedrive文件必须在本地可用,才可在Linux中访问(废话,Onedrive for windows又不能跑在Linux下())
  • 不可以在Onedrive目录中创建任何文件
  • 此插件不受ntfs-3g支持且目前(似乎?)已停止维护

解决方法

构建ntfs3g-onedrive-plugin

首先克隆ntfs3g-onedrive-plugin仓库到本地目录:

1
git clone https://github.com/deerf0x/ntfs3g-onedrive-plugin.git

如果上面的仓库不再有效,可使用https://git.aiursoft.cn/EdgeNeko/ntfs3g-onedrive-plugin.git.

依次运行下面的命令来配置并构建插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
libtoolize --force

aclocal

autoheader

automake --force-missing --add-missing

autoconf

./configure

make

安装ntfs3g-onedrive-plugin

在终端中运行ntfs-3g获取ntfs-3g的插件目录:

1
ntfs-3g

复制上面Plugin path中对应的目录, 然后打开Makefile并编辑:

1
2
# Use your own editor instead of Kate if necessary
kate Makefile

搜索plugindir常量定义,如下图(截至本文发布时,位于L369):

将其修改为上面获取的目录:

完成后保存Makefile并退出.

最后,运行下面命令完成安装:

1
sudo make install

如果一切正常,重新挂载包含Onedrive目录的分区,接下来你应该可以正常访问Onedrive目录下的文件了:

Reference

https://github.com/tuxera/ntfs-3g/issues/44