![共享 NTFS HD 的问题 | Ubuntu 20.04 x Windows 10](https://linux22.com/image/1072633/%E5%85%B1%E4%BA%AB%20NTFS%20HD%20%E7%9A%84%E9%97%AE%E9%A2%98%20%7C%20Ubuntu%2020.04%20x%20Windows%2010.png)
双启动机器,在单独的 m.2 nvme 存储设备上安装了 Ubuntu 20.04 和 Windows 10。我有一个设置为 NTFS 的外部硬盘 (14TB)。在任一操作系统上,我都可以写入光盘。但是,当我在 Windows 10 中打开硬盘上的文件时,如果我使用 Ubuntu 20.04 生成这些文件,它们通常会损坏。例如:
D:\my\path> type myfile.mrc.tlt
The file or directory is corrupted and unreadable.
我在两个外置硬盘(一个是 Seagate,另一个是 WD)上都看到过这种情况。我以为问题出在 Seagate 硬盘上。但现在我用 WD 硬盘复制了这种情况。
不确定从哪里开始进行故障排除。
当我在运行时安装驱动器时,journalctl -f
我得到以下信息:
Nov 05 17:12:21 axoneme udisksd[894]: Mounted /dev/sdd1 at /media/jared/Elements on behalf of uid 1000
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Activating via systemd: service name='org.freedesktop.Tracker1' unit='tracker-store.service' requested by ':1.1' (uid=1000 pid=1637 comm="/usr/libexec/tracker-miner-fs " label="unconfined")
Nov 05 17:12:21 axoneme systemd[1629]: Starting Tracker metadata database store and lookup manager...
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Activating service name='org.gnome.Shell.HotplugSniffer' requested by ':1.37' (uid=1000 pid=1860 comm="/usr/bin/gnome-shell " label="unconfined")
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Successfully activated service 'org.gnome.Shell.HotplugSniffer'
Nov 05 17:12:21 axoneme dbus-daemon[1088]: [session uid=125 pid=1088] Successfully activated service 'org.freedesktop.Tracker1'
Nov 05 17:12:21 axoneme systemd[1072]: Started Tracker metadata database store and lookup manager.
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Successfully activated service 'org.freedesktop.Tracker1'
Nov 05 17:12:21 axoneme systemd[1629]: Started Tracker metadata database store and lookup manager.
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10255 > 9984): Illegal seek
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10256 > 9984): Illegal seek
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10164 > 9984): Illegal seek
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10165 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10009 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10010 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10030 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10031 > 9984): Illegal seek
类似地,如果我ls -lth
使用 Ubuntu 20.04 在 NTFS HD 上的目录中运行,我会在损坏的目录中得到以下内容:
Nov 05 17:16:03 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10294 > 9984): Illegal seek
Nov 05 17:16:03 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10290 > 9984): Illegal seek
Nov 05 17:16:03 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10360 > 9984): Illegal seek
答案1
因此,评论中的讨论表明,一旦 Windows 访问 NTFS 分区,问题就会开始发生。那么,这是 Windows 的问题吗?看起来很有可能,尽管 ntfs-3g FUSE 驱动程序有可能以与 Windows 驱动程序不同的方式解释某些内容,从而导致不兼容。
有趣的是,这个问题似乎极为罕见(我发现只有几篇帖子与 journalctl 中的错误完全相同,一篇来自 2008 年,另一篇关于与 RAID 的一些奇怪的交互)。这是需要注意的,因为这可能意味着您有一些特殊的配置导致了这些问题,找出这可能是什么将会非常有趣。但我将把这留给读者作为练习。
就解决方法而言,您可以尝试以下方法:
尝试新的 ntfs3内核驱动程序(与您使用的 ntfs-3g 相反),自 Linux 5.15 以来,由 Paragon Software 贡献到内核中。不要与较旧的只读 ntfs 内核驱动程序混淆,后者仍未删除。您需要更新到 5.15 或更高版本的 Linux 内核。5.15 似乎在 22.04 中默认使用(我建议您升级 20.04 → 22.04,因为在 20.04 上使用旧软件会让您错过许多优化和功能)。
暂时我不知道如何让文件管理器默认使用 ntfs3,但是您可以添加一个
/etc/fstab
使用 ntfs3 驱动程序的条目。这可能会或可能不会解决您的问题。但如果没有,那么我 97% 肯定这纯粹是您的 Windows 系统的错误(另请参阅我关于稀有性的观点)。我之所以有信心,是因为 Paragon Software 是一家老公司,销售文件系统驱动程序已有很长时间,我确信他们拥有足够的专业知识和实践经验来解决与原始 Windows 驱动程序可能存在的不兼容问题。
如果您专门使用 NTFS 来共享文件,您可能还会考虑:
- 改用 UDF 文件系统。Windows 和 Linux 都支持它。
- 使用 exfat。从 5.7 版开始,SAMSUNG 添加了 exfat 驱动程序, 和他们还发布了
exfatprogs
,因此适当的支持已经到位。
附言:理想情况下,您还应该尝试最新的 ntfs-3g,如果问题仍然可重现,请报告错误。不过您可能需要说服开发人员这确实是 ntfs-3g 的问题。如果 ntfs3 驱动程序对您来说工作正常,那么这可能是问题出在 ntfs-3g 驱动程序上的一个隐含证据。