OneDrive 如何使其文件夹不适用于较旧的 Windows 版本?

enk*_*tor 61 windows ntfs onedrive windows-10

在 Windows 10 的秋季 2017 创意者更新之后,无法使用以前的 Windows 版本访问 OneDrive 文件夹。官方网站描述了这种奇怪现象:

如果您已安装适用于 Windows 10 的 2017 年秋季创意者更新并将 OneDrive 文件同步到外部驱动器,则如果您将外部驱动器移至运行早于秋季 2017 创意者更新的操作系统的计算机,您可能无法打开 OneDrive 文件适用于 Windows 10。

建议的解决方法是“使用运行适用于 Windows 10(或更高版本)的 2017 年秋季创意者更新的计算机打开内容”

我已经通过插入带有 OneDrive 文件夹的硬盘驱动器成功地重现了 Windows 7 的问题,该文件夹是之前使用 Windows 10 创建的。现在,当我试图对目录做一些事情(删除它,或cd进入它)时,我收到一个错误:

The file cannot be accessed by the system.
Run Code Online (Sandbox Code Playgroud)

根据 FS 中没有逻辑错误chkdsk,我也是该文件夹的所有者并拥有所有安全权限。没有进程正在使用该卷。无论如何,我不能对这个(也是唯一的)文件夹做任何事情。什么是阻塞机制?

use*_*686 75

NTFS 有一个称为重新分析点的功能,其中可以标记文件或目录以供操作系统进行特殊处理。它用于实现相当多的功能——例如卷挂载点(驱动器号的 Unix 式替代品);连接点和符号链接;GitVFS 稀疏目录;实际存储在 WIM 映像中的文件;已卸载到磁带或其他慢速存储的文件;等等。

最新版本的 OneDrive还使用重分析点来实现“在线文件”——它们起初是占位符,但按需下载。早期版本在 shell 级别执行此操作,这不适用于许多程序;使用重解析点并将自动下载移动到核心操作系统中,这使得它们与本地文件几乎没有区别。

当通过旧操作系统访问路径时,新标签自然会导致错误;NTFS 驱动程序不知道如何处理这些项目,因此它只是拒绝访问。它可能会显示例如一个空目录,但是当旧操作系统尝试写入它时,这可能会很快导致更多损坏。

您可以通过 Cmd使用fsutil reparsepoint来查看已附加到文件或目录的重解析点标记(如果有)。

  • 你是对的。`fsutil reparsepoint query OneDrive` 显示了数据,并且`fsutil reparsepoint delete OneDrive` 成功“解锁”了该目录。 (11认同)
  • @usr 展望未来,[ProjFS](https://docs.microsoft.com/en-us/windows/desktop/projfs/projected-file-system) 可能是类似功能的支持选项,因为它可以实现纯粹在用户模式下。不过,它还没有在稳定版本中可用。ProjFS 本身是(曾经?)[实施](https://docs.microsoft.com/en-us/azure/devops/learn/git/gvfs-architecture) 作为文件系统过滤器驱动程序,它已作为相当多的 Windows 版本的扩展点(我相信从 XP 开始)。OneDrive 本身使用(使用?)CldFlt(“云文件迷你过滤器驱动程序”)。 (4认同)
  • 实际上,Windows 操作系统确实进行了更改以支持 GitVFS。IIRC,它总是有“最低 Win10 版本”的要求。与 OneDrive 一样,我认为它是部分支持——用户空间或自定义驱动程序能够*挂钩*操作系统......不知道这是否意味着支持任意重解析点,或者是否意味着支持特定的重解析点,但是让实现是可安装的。 (3认同)