我有几个用 exFAT 格式化的大硬盘,以保持 Win7/Bootcamp 和 Snow Leopard 之间的兼容性。
问题是:fsck_exfat需要像 6-8gb 的 RAM 才能在大磁盘上完成。(Windows 的 chkdsk 工作正常,顺便说一句)。如果 OSX 检测到一个卷为脏,它似乎会自动尝试fsck该卷……但我发现它实际上并没有解决任何问题。在此自动扫描期间,OSX 必须对几乎所有其他内容进行分页以进行交换。当我在家中的办公桌上时,我使用了几个外部驱动器,如果 exFAT 卷很脏,那么每个驱动器可能需要 10 分钟以上的时间才能使用笔记本电脑,这是在Finder 加载之后。
在您建议使用备用文件系统之前:
更糟糕的是,我试图在没有交换的情况下运行这台笔记本电脑,因为我对 OSX 的交换行为感到恼火(基本上,无论可用的 RAM 多少,它都会将不活动的内容分页到磁盘)。禁用交换文件带来的性能提升非常好。但!每当fsck启动时,由于 RAM 不足,笔记本电脑很快就会自动冻结。
这当然让我陷入了一个循环:启动笔记本电脑,OSX 看到脏 exFAT,自动fscks 它们,笔记本电脑死机,驱动器因关闭不良而被标记为脏,泡沫,冲洗,重复......不愉快。启动到 Win7 并运行 chkdsk(并彻底关闭)打破了这个循环。交换现在重新启用:-(
最好的部分是我仍然必须手动修复脏卷,因为无论出于何种原因,它们都以只读方式挂载!我只能在我fsck自己之后才能撤消!
这是最令人沮丧的。那么...如何禁用在fsck_exfat脏 exFAT 安装上运行的自动程序?或者您有其他替代解决方案吗?我不介意 OSX 安装驱动器 RO 如果这意味着我可以控制我的计算机(并且可以fsck稍后在我闲暇时控制驱动器)。
免责声明:我无法正确测试它,但以下内容可能会给您带来一些成功。
sudo plutil -replace FSPersonalities.ExFAT.FSRepairExecutable -string "/usr/bin/true" /System/Library/Filesystems/exfat.fs/Contents/Info.plist背景想法:在搜索 XNU 内核代码以获取有关 Apple 如何实现此功能的有用参考并分析 hopper 中的 exfat_mount 二进制文件后,我预计替换FSRepairExecutable或FSVerificationExecutable简单地始终返回成功可以解决您的挑战。
这是 ExFAT 相关 plist 的相关部分:
"FSPersonalities" => {
"ExFAT" => {
"FSRepairArguments" => "-y"
"FSVerificationArguments" => "-n"
"FSFormatMinimumSize" => 1048576
"FSFormatExecutable" => "newfs_exfat"
"FSFormatContentMask" => "Windows_NTFS"
"FSName" => "ExFAT"
"FSRepairExecutable" => "fsck_exfat"
"FSMountExecutable" => "mount_exfat"
"FSMountArguments" => ""
"FSVerificationExecutable" => "fsck_exfat"
"FSXMLOutputArgument" => "-x"
"FSFormatArguments" => ""
"FSFormatMaximumSize" => 144115188075855872
}
}
Run Code Online (Sandbox Code Playgroud)
由于此文件位于该/System文件夹下,较新的 OSX 内核使用 SIP 保护它。因此,上面描述的微小乏味的解决方法。
或者,为了在以后更轻松地编辑此 plist 文件而不会过多地损害您的安全性,您还可以在恢复模式下为文件系统部分禁用 SIP 的同时保持启用状态:
csrutil enable --without fs
Run Code Online (Sandbox Code Playgroud)
鉴于您似乎在一定程度上遇到了问题,您有没有想过转向像 Parallels 或 VMWare 这样的虚拟化解决方案?
受Moreaki 的回答(似乎不适用于 Mojave)的启发,我想出了这个丑陋的解决方法:
fsck_exfat: sudo cp /System/Library/Filesystems/exfat.fs/Contents/Resources/fsck_exfat /System/Library/Filesystems/exfat.fs/Contents/Resources/fsck_exfat_ORIGINAL
Run Code Online (Sandbox Code Playgroud)
fsck_exfat二进制文件替换为/usr/bin/true: sudo cp /usr/bin/true /System/Library/Filesystems/exfat.fs/Contents/Resources/fsck_exfat
Run Code Online (Sandbox Code Playgroud)
注意:
which -a fsck_exfat将显示二进制/sbin/fsck_exfat文件,在/System/Library/.... 当 Mac 正在检查 ExFat 磁盘时,您可以看到fsck_exfatwith的实际路径ps aux | grep exfat。
警告:此更改后,您的系统将不再对 exfat 驱动器进行任何自动检查和修复!为了检查和修复这些驱动器上的错误,最好使用具有更好 exfat 支持的操作系统,例如 Windows 甚至 Linux。如果您没有其他操作系统,那么您仍然可以使用您在第 2 步 ( /System/Library/Filesystems/exfat.fs/Contents/Resources/fsck_exfat_ORIGINAL) 中创建的副本。此方法 不会删除脏位,它只是强制立即返回,fsck_exfat并带有成功的响应代码 ( 0)。
| 归档时间: |
|
| 查看次数: |
8818 次 |
| 最近记录: |