在 Linux 下安装的 Windows 分区中出现 I/O 错误和不受支持的重新解析点

在 Linux 下安装的 Windows 分区中出现 I/O 错误和不受支持的重新解析点

我正在运行 arch linux,并尝试从 Linux 安装 ttf-ms-win10 字体。

我无法从 ntfs-3g 安装的 Windows 10 分区读取字体文件和许可证文件。

$ ls -al /run/media/cswl/windrv/Windows/System32/Licenses/neutral/_Default/Professional/license.rtf
lrwxrwxrwx 3 cswl cswl 25 Mar 19  2017 /run/media/cswl/windrv/Windows/System32/Licenses/neutral/_Default/Professional/license.rtf -> 'unsupported reparse point'

$ cat /run/media/cswl/windrv/Windows/Fonts/arial.ttf
cat: /run/media/cswl/windrv/Windows/Fonts/arial.ttf: Input/output error

我已经从 Windows 运行了 chkdsk,它没有报告任何错误。我能够从 Windows 中正常读取文件。

而且我也能读取 Linux 中的其他文件,只是不能读取系统文件。这是 ntfs-3g 无法理解的某种加密或访问控制吗?

答案1

这不是一个完整的解决方案,但仍然有帮助。

我过去(两个多月前)研究过这个问题一个多小时,但没有找到太多关于这个“不支持的重新解析点”问题的信息。我今天遇到了同样的问题,得出了同样的结论:这看起来像是 Windows 文件是奇怪的符号链接或硬链接的问题。(stat 表示它是一个符号链接,mv 表示它是一个硬链接。)

有用:可以获得有关这些文件的更多信息。您可以使用 mv 命令查看符号链接的目标。

下面是一个例子。为了便于阅读,我将“Windows/WinSxS/wow64_microsoft-windows-i..libraries.resources_31bf3856ad364e35_10.0.18362.1_en-us_2cec4e8a6cd56d4c/uihelper.dll.mui”缩短为“Windows/bill.dll.mui”。出于同样的原因,“Windows/WinSxS/amd64_microsoft-windows-i..libraries.resources_31bf3856ad364e35_10.0.18362.1_en-us_2297a4383874ab51/uihelper.dll.mui”缩短为“Windows/target.dll.mui”。

$ stat '/path/1/Windows/bill.dll.mui'
  File: /path/1/Windows/bill.dll.mui -> unsupported reparse point
  Size: 25              Blocks: 1          IO Block: 4096   symbolic link
[...]
$ cp '/path/1/Windows/bill.dll.mui' '/dev/null'
cp: cannot stat '/path/1/Windows/bill.dll.mui': No such file or directory
$ mv -n /path/1 /path/dest
[...]
mv: cannot create hard link '/path/dest/1/Windows/bill.dll.mui' to
 '/path/dest/1/Windows/target.dll.mui': Operation not permitted

问题是“target.dll.mui”是另一个符号链接,并且 mv 没有帮助:

$ stat '/path/dest/1/Windows/target.dll.mui'
  File: /path/dest/1/Windows/target.dll.mui -> unsupported reparse point
  Size: 25              Blocks: 1          IO Block: 4096   symbolic link
[...]
$ cat '/path/dest/1/Windows/target.dll.mui'
cat: /path/dest/1/Windows/target.dll.mui: No such file or directory

以下内容可能有帮助:

  • 制作分区的磁盘映像(使用 cat 或 dd 制作 ISO 文件),这将保存所有数据。由于此“不支持的重新解析点”错误,部分数据可能需要使用 Windows 读取。
  • 在 VirtualBox 中运行 Windows 95、Windows 98、Windows XP 或 Windows 7。运行最旧且能够读取这些有问题的文件的版本。将 ISO 文件安装到虚拟化操作系统,Windows 应该可以读取它们。然后,您可以将文件从 VirtualBox 中复制出来。如果有某种方法可以让虚拟化 Windows 读取不是来自 ISO 文件的文件,那么请尝试一下。
  • 在 Wine 中运行 Windows 资源管理器/文件资源管理器,也许我拥有的 wine 版本 wine-5.0(Ubuntu 5.0-3ubuntu1)将能够读取它们并将它们复制到其他地方。

更新 1

运行“wine explorer.exe”没有帮助。

使用 ntfscp2(ntfs 副本 2)。

(看https://askubuntu.com/questions/1345356/files-from-windows-with-unsupported-reparse-point-on-ubuntu- 关于“OneDrive”,但仍然与这个问题有些相关,链接到pagesperso-orange.fr。)我下载了https://web.archive.org/web/20210712050149if_/https://jp-andre.pagesperso-orange.fr/tools.ziphttps://web.archive.org/web/20210709190909/https://jp-andre.pagesperso-orange.fr/advanced-ntfs-3g.html#download

文件“tools.zip”有多个文件(在文件“CONTENTS”中说明):

  • “内容”-纯文本文件
  • 没有帮助:“ntfs_attr.sh”-提到“重新解析点”
  • 没有帮助:“genusermap.sh”
  • 也许有帮助:“ntfscp.sh”-提到“reparse_data”
  • 很有帮助:“ntfscp2.sh”——ntfscp.sh 的较新版本,错误较少​​或没有错误,“目录树的递归复制以及 NTFS 属性”

“ls -1 /path/1/Windows”的输出与“ls -1 /path/dest/1/Windows”相同,但 /path/dest/1/Windows 中的某些文件夹/文件丢失。通过 ntfscp2.sh 同步的目录:

$ chmod a+x ntfscp2.sh
$ ./ntfscp2.sh "/path/1/Windows" "/path/dest/1/Windows" "/path/dest/setfattr.sh"
$

ntfscp2.sh 完成后,ntfscp2.sh 会创建文件“setfattr.sh”;运行 setfattr.sh 可能会有所帮助。setfattr.sh 是一个“用于重新创建所有文件属性的 shell 脚本”。因此,看起来 ntfscp2 能够正确复制这些问题文件。但是,一旦将其复制到目标位置,它仍然会出现“不支持的重新解析点”错误。当我执行上面的 ntfscp2.sh 时,我将文件从 NTFS 硬盘复制到 NTFS 硬盘(“备份卷 [需要] 不格式化为 NTFS”)。ntfscp2 可能会写入第二个输出文件:“err”。err 是一个包含一个或多个错误的文本文件。对我来说,它的内容是:
/path/1/Windows/WinSxS/x86_wpf-xamlviewerdeploymentmanifest_31bf3856ad364e35_10.0.18362.1_none_ddac88389337a8af/XamlViewer_v0300.xbap: system.ntfs_reparse_data: No such attribute

ntfscp2 shell脚本有效的证据:

  • 从源和目标中的“find . -type f”的输出生成一个排序列表(vim:sort):两个文件是位相同的。
  • 根据源和目标中“find . -type d”的输出生成一个排序列表:两个文件是位相同的。
  • 根据源和目标中的“find . -type l”输出生成一个排序列表:两个文件位相同。(请注意,这比较的是文件列表,而不是文件内容。)

ntfscp2 可能没有起作用(相差 101,993 字节):

$ du -sb /path/1/Windows
62692990548     /path/1/Windows
$ du -sb /path/dest/1/Windows
62692888555     /path/dest/1/Windows

文件夹“Windows”包含超过 340,800 个文件,我认为 ntfscp2 会修改扩展属性,也许还会修改其他内容。因此,这并不一定意味着 ntfscp2 失败;它可能只是意味着某些文件的元数据已更改。

如果不使用 Windows,访问数据的一种方法是在研究 NTFS 后进行某种数据取证。您可以卸载 /dev/sdc1,然后在十六进制编辑器中打开 /dev/sdc1;然后您可以查找文件和链接,查找集群运行或其他内容。

相关内容