我有双启动的 Ubuntu 16.04 / MacOS El Capitan 和一个 Mac 默认格式 (HFS+) 的共享分区。我的双启动和分区共享运行良好,我可以从两边访问它。
当我在 Ubuntu 上处理这个共享分区(HFS+)时,被丢弃的文件会被转移到 Ubuntu 垃圾文件夹中,并且系统丢失:
- 我可以看到垃圾文件夹中的文件,但无法删除或恢复它们。
- 当我删除大量数据(我正在处理数千张图片)时,删除过程中该分区会自动从我的 Ubuntu 系统中卸载。要访问它,我需要在重新启动后手动安装或切换到 MacOS 然后再回来。
我试过:
- 从命令行删除文件
- 清空/恢复显示屏上的垃圾
- 杀死正在运行的进程中的垃圾进程
有人知道是什么导致了这个问题以及我该怎么做才能解决它吗?
答案1
首先,从 Linux 的角度来看,HFS+ 是一种非原生文件系统,因此它会出现一些奇怪的现象。话虽如此,删除文件时完全卸载文件系统超出了我所预料的怪异现象,但这可能是至少部分原因。如果是这样,并且以下建议都不起作用,那么切换到 FAT 可能会奏效。虽然 FAT 也是非原生的,但它的驱动程序(在 Linux 和 macOS 中)已经足够成熟,不太可能导致此类问题。另一方面,与 HFS+ 相比,FAT 也非常有限,因此它可能不够用(例如,如果您需要存储大文件)。
无论如何,这里可能存在一些具体问题:
- 日记-- 默认情况下,macOS 会创建启用了日志功能的 HFS+ 卷。事实上,使用 GUI 磁盘实用程序时,在较新版本的 macOS 中无法禁用此默认设置。但是,Linux 的 HFS+ 驱动程序对日志功能的支持较差。因此,对于共享数据分区,最好禁用日志功能。不幸的是,我不知道如何在现有卷上执行此操作;但也许在网上搜索会找到一些。如果没有,或者如果您不介意执行备份-重新格式化-恢复操作,您可以这样做。当您这样做时,我建议
mkfs.hfsplus
在 Linux 中使用来创建新的文件系统。要创建非日志文件系统,您需要忽略选项-J
。(输入man mkfs.hfsplus
以了解有关此命令的更多信息。)如果未安装该命令,则可能需要安装该hfsprogs
软件包。在 macOS 中也有命令行方式可以执行此操作;我相信命令是newfs
或类似的东西。不过我不记得细节了。 - 协调用户 ID-- 默认情况下,Ubuntu 的第一个用户 ID (UID) 为 1000,而在 macOS 中为 501。因此,当您尝试在这些操作系统之间共享 HFS+ 分区上的文件时,这些文件似乎由每个操作系统中的不同用户拥有。虽然可以松散地设置权限或大量使用
sudo
以使文件共享正常工作,但更好的解决方案是在两个安装之间协调 UID 值。我的回答是这个问题AskUbuntu 上描述了如何在 Ubuntu 中执行此操作,并提供了指向其他描述如何在 macOS 中执行此操作的站点的指针。(最好在 macOS 中进行更改,但在 macOS 中,该过程更为繁琐。)在建议进行此更改时,我的假设是您可能遇到了权限问题,并且这些问题与导致文件系统被卸载的文件系统错误相互作用。 - 文件系统错误-- 如果文件系统已损坏,则可能导致内核突然卸载它。您可以
fsck
在 Linux 中的 HFS+ 分区上运行,只要hfsprogs
安装了软件包,就可以解决问题。Apple 开源了他们的大部分 HFS+ 代码,因此理论上这应该与在 macOS 中运行检查几乎相同;但是,Apple 最近对他们的文件系统进行了一些更改,我不知道这些更改是否已经影响到 Linux 发行版的软件包,因此使用磁盘实用程序从 macOS 执行这项工作可能更安全。但是,如果磁盘实用程序为您提供了这样做的选项,不要出于前面提到的原因,在分区上启用日志。
通过在问题发生后立即查看内核环缓冲区,您可能能够获得一些有关问题原因的线索。您可以通过键入dmesg
来查看整个内容或查看最后几行。(您可以通过选项来dmesg | tail
扩展显示的行数,例如;或者您可以使用而不是来滚动查看整个内容。)内核环缓冲区-n
tail
dmesg | tail -n 20
less
tail
应该记录有关内核故障的信息,即未经请求卸载文件系统。另一方面,可以想象导致卸载的因素实际上并不是内核故障,或者由于某种原因没有发生错误报告。如果您尝试上述建议并且它们没有帮助,但如果内核环形缓冲区显示可疑内容,您可以尝试发布详细信息。