kextd stallというエラーで起動しないことに対処

10.14.6追加アップデート2を入れたマシンのうち1台が起動しませんでした。APFSが原因でした。ApfsDriverLoader.efiを外して10.14.6 (18G103) 付属のapfs.efiに差し替えたら起動しました。

症状

2019年9月27日にmacOS Mojave 10.14.6追加アップデート2 (Supplemental Update 2) が配布されました。ビルドは18G103です。追加アップデートの名前の最後に2という番号がつくのは珍しいと思います。Catalinaがまもなく出るので、おそらく最後のバージョンになると思います。追加アップデートを続ける理由は、もしかしたらMojaveを10.14.6で終わりにして、バージョン番号をあげたくなかったのかもしれません。

いくつかのマシンで、アップデータ経由で通常通りの更新が問題なく可能でした。ただ、iMac19,1に設定した9600Kマシン

では、どういうわけか起動しませんでした。最近は大体問題なくOSアップデートできるのですが、たまにこういう状況になるのはHackintoshの宿命で仕方ないところです。

-vオプションで調べた症状は以下のようです。Cloverのメニューは出て、メモリー確保も正しく行えるのですが、その後メッセージが続いた後、表示が止まってしまいます。しばらく経過すると画面には、

busy timeout[0], (60s): 'iMac19,1'

という表示が出ます。iMac9,1に設定したこのマシンが60秒間応答しないという意味だと思います。この状態で、キーボードを接続すると、

kextd stall[1], (60s): 'Magic Keyboard'

というような表示が出ることもあります。

また、いろいろなUSB機器を抜き差しすると、同様にkextd stallというメッセージが出ます。

原因の推測

メッセージのkextdは、kext daemonのことだと思います。kext (カーネル拡張) を読み込んでカーネルに登録する機能を担っていると思われます。stallは、自動車のエンスト(エンジンストール)と同じ単語で、応答がなくて動かない、という程度の意味でしょう。つまりメッセージから判断するに、kextデーモンが特定のkextを呼び出そうとしたけど、60秒経っても応答がないようです。

失敗しているkextはどれもmacOS本体のkextです。Clover類はESP (FAT) にありますが、macOS本体のkextは主パーティション (APFS) の中にあります。となるとAPFS (アップルファイルシステム) の読み出しに失敗している可能性があると考えました。また、上記で紹介したtimeoutメッセージも、APFSからの読み出しをする局面になって、マシンから応答がなくなりタイムアウトしたとも解釈できます。

apfs.efiで解決

CloverがAPFSにアクセスするためには、macOS本体のapfs.efiを使っています。以前はmacOSからAPFSのドライバーである

/usr/standalone/i386/apfs.efi

をESPにコピーして使っていたのですが、最近は、 ApfsDriverLoader.efiを使って、macOSから自動的に読み込んでいます。動的に読み込むことで、macOSのバージョンに合わせたapfs.efiが使えるメリットがあります。でも今回は、この仕組みが何らかの理由で機能していないようでした。そこで、EFI/CLOVER/drivers/UEFIの中の

  1. ApfsDriverLoader.efiを削除して
  2. macOS本体からapfs.efiをコピー

しました。すると10.14.6 (18G103) が立ち上がりました。

実際に行った手順は、もう少し複雑です。というのは、このマシンは起動しないのでapfs.efiを取得できません。そこで、別のMacにUSBメモリーを挿して、これに

cp /usr/standalone/i386/apfs.efi /Volumes/USB

のようにしてapfs.efiをコピーします。次にこのUSBメモリを、起動しないマシンに接続し、CloverのメニューからUEFI Shellを起動し、cpコマンドでESPのEFI/CLOVER/drivers/UEFIにコピーしました。また、ApfsDriverLoader.efiは、rmコマンドで削除しました。UEFI Shellの使い方は、以下をご覧ください。

ApfsDriverLoader.efiが動かなかった理由は不明です。他のマシンでは18G103でも動いていますので、このマシンだけの問題かと思います。ApfsDriverLoader.efiのアップデートで解決するかもしれません。何れにせよ、起動でtimeoutやkextd stallのメッセージで止まる場合には、APFS関係を疑うと良いかと思いました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です