谷歌驱动文件流遇到并已停止 OSX

dtj*_*kro 5 mac google-drive macos google-drive-file-stream macos-mojave

感谢 github 用户 bfleischer 的解决方案

只是想分享一个解决方案的答案。所以最近我在我的 mac 上全新安装了一个新的 OSX 并遇到了驱动文件流引发错误的问题

Google Drive File Stream 遇到问题已停止

每次登录帐户后都会发生这种情况。

所以我开始在谷歌上搜索解决方案,删除应用程序和 DriveFS 文件夹(如下)根本不起作用。

〜/图书馆/应用程序支持/谷歌/DriveFS

重复上述步骤几次后,我登录我的谷歌帐户后问题仍然存在。

然后我开始查看 DriveFS/logs 文件夹中生成的日志并遇到了这些代码行

2019-01-29T19:16:18.666ZE [123145549725696] stderr: (kernel) Kext com.google.dfsfuse.filesystems.dfsfuse 启动失败(结果 0x5)。

2019-01-29T19:16:18.666ZE [123145549725696] stderr: (kernel) Kext com.google.dfsfuse.filesystems.dfsfuse 加载失败 (0xdc008017)。

2019-01-29T19:16:18.666ZE [123145549725696] stderr:(内核)无法加载 kext com.google.dfsfuse.filesystems.dfsfuse(错误 0xdc008017)。

2019-01-29T19:16:18.666ZE [123145549725696] stderr:无法加载/Library/StagedExtensions/Applications/Google Drive File Stream.app/Contents/MacOS/dfsfuse.kext - (libkern/kext) start (libkern/kext) kext /stop 例程失败。

我意识到由于安装了 xtraFinder 等其他应用程序,我的 OSX SIP(​​系统完整性保护)被禁用,因此我执行了几个步骤,通过运行以下命令并重新启动来查看问题是否消失

csrutil enable
csrutil clear
Run Code Online (Sandbox Code Playgroud)

重新启动并运行后,MacOS 安全提示我允许来自已识别的开发人员,我这样做了但仍然没有解决问题。

尝试手动加载 kext 也没有解决问题,但是我在运行dmesg时确实注意到了额外的消息

osxfuse:无法注册主要设备号

这是最终将我引向此解决方案的消息

https://github.com/osxfuse/osxfuse/issues/358

引用解决方案

FUSE 需要注册一个虚拟设备,用于在内核和用户空间中运行的实际文件系统实现之间交换消息。可用设备插槽的数量受 macOS 限制。因此,如果您使用其他软件,如 VMware、VirtualBox、TunTap、Intel HAXM 等,它们会占用所有可用设备插槽,FUSE 将无法注册其虚拟设备。

在全新安装的 macOS 10.12 上,有六个可用的设备插槽。VMware 和 VirtualBox 各自需要多个插槽。据我所知,TunTap (VPN) 需要两个插槽。英特尔 HAXM 至少需要一个插槽。

然后我运行 kextstat 以查看我在 Mac 上安装了哪些外部设备 kext

sh-3.2# kextstat | grep -v apple

Index Refs Address            Size       Wired      Name (Version) UUID <Linked Against>

  107    0 0xffffff7f83f91000 0x7000     0x7000     net.sf.tuntaposx.tap (1.0) 23FDB715-3D0D-3A26-ACBA-E3794C231CB7 <8 6 5 1>

  108    0 0xffffff7f83f98000 0x7000     0x7000     net.sf.tuntaposx.tun (1.0) 95DD963D-E23D-3B0F-8DE8-A4D2F6BFA5CC <8 6 5 1>

  109    0 0xffffff7f83f9f000 0x28000    0x28000    com.intel.kext.intelhaxm (7.3.2) 58DFBE80-E54A-3EFE-B38A-215C5ED8E828 <8 6 5 3 1>

  112    3 0xffffff7f83fd5000 0xef000    0xef000    org.virtualbox.kext.VBoxDrv (6.0.2) 23F2E3C8-C38A-3339-9A6E-08F8AD6CA635 <8 6 5 3 1>

  182    0 0xffffff7f860d4000 0x8000     0x8000     org.virtualbox.kext.VBoxUSB (6.0.2) E73ADEDC-4A15-36FB-B741-2373408F514B <181 112 54 8 6 5 3 1>

  183    0 0xffffff7f860dc000 0x5000     0x5000     org.virtualbox.kext.VBoxNetFlt (6.0.2) 016CC2E0-4FB7-3DBA-A725-D353DF9D7DC9 <112 8 6 5 3 1>

  184    0 0xffffff7f860e1000 0x6000     0x6000     org.virtualbox.kext.VBoxNetAdp (6.0.2) 5044F02A-8CCC-36A9-A1B5-E31D27F69B62 <112 6 5 1>
Run Code Online (Sandbox Code Playgroud)

事实证明,通过消耗四个可用的 kext,virtualbox 是一个问题,我继续下载了 virtualbox 卸载脚本并卸载了 virtualbox。

之后谷歌驱动器文件流就像魅力一样工作

您的情况可能会有所不同,因为您可能在 google drive 之前在您的机器中预装了除 virtualbox 之外的其他 kexts,在这种情况下,我建议在通过以下方式删除它之前先咨询每个 kexts 的用途

kextunload -b input.your.kext.name.space
Run Code Online (Sandbox Code Playgroud)