我有一台笔记本电脑,双启动 Windows 10 和 Linux Mint 19 Tara 安装到内部 M.2 SSD。除了所有特定于操作系统的分区外,我在该 SSD 上还有一个 4 GB 的 FAT32 分区,我打算将其用于在操作系统之间复制文件。
问题是,在 Linux 中更改该分区上的任何次要内容(创建一个小文本文件/任何文件夹、编辑一个等...)并随后启动 Windows 后,Windows 看不到该分区有任何更改。因此,在访问它时,“不可见”数据会损坏和丢失(永久地,对两个操作系统)。当我将一个大文件复制到它时通常不会发生这种情况,然后所有更改在 Windows 中也是可见的。此外,Windows 始终将分区显示为空,尽管在 Windows 中创建的文件存在。
我假设 Linux 没有对磁盘进行更改,Windows 正在缓存分区或某处的 FAT 表,或者驱动器进行了一些奇怪的缓存。
问题:如何让 Windows 同意 Linux 对该分区所做的更改?
澄清一下:“隐形”是指根据 Windows 实际上不存在。而相反的方向工作得很好,Windows 所做的更改被 Linux 毫无问题地接受。
可能是因为当您启动 Linux 时,您让 Windows 处于睡眠/休眠状态,而不是将其关闭。(众所周知,Windows 10 无法正常关闭。)Windows 可能会将部分文件系统缓存在内存中(即页面文件),并且不希望其他操作系统修改磁盘。
尝试弄清楚如何真正关闭 Windows。
最近的 Windows 版本确实包括启动优化,涉及将磁盘数据缓存在与同一磁盘不同的地方,这会导致您在不同操作系统访问磁盘时发现的行为。
您可以使用组策略关闭启动和恢复优化 (位于 Computer Configuration\Administrative Templates\System\Disk NV Cache),这应该使 Windows 仅存储其分区上的文件。还有一些其他非易失性缓存设置可用,但那个应该可以解决您的问题。
为了补充以前的答案并添加一些额外的信息:
该问题也发生在 Windows 11* 上,并且不限于 FAT32 分区,甚至不限于位于同一驱动器上的分区。显然 Windows 对它可以访问的所有内部驱动器执行此操作(我在与 Windows 本身相同的 SSD 和不同的内部驱动器上使用 FAT32 和 exFAT 分区对其进行了测试)。
对于 Windows 11,禁用快速启动似乎已经解决了它。(我在 linux 中创建的文件在 Win11 中可见,并且在我在那里创建新文件时没有被覆盖)
其他缓存选项似乎只适用于外部驱动器,并不能真正解决内部驱动器(在我的例子中是 SSD 和 HDD)的问题,但如果是这样的话,这个问题的其他答案涵盖了这一点。
这个问题的答案可能也适用于 Windows 10(界面略有不同,但实际上是相同的设置)。
* 有趣的是,在启用“快速启动”的情况下,Windows 11 似乎没有注意到任何剧烈的变化,例如重新格式化整个驱动器并更改其分区表。如果它试图在该状态下写入驱动器,我不敢测试它会做什么。