ブートループからの復旧
デバイスに書き込む際、デバイスが「文鎮化」状態になる場面に遭遇することがあります。理論的には、fastboot で boot パーティションを書き込んだだけだったり、不適切なモジュールをインストールしてデバイスが起動しなくなったりした場合なら、適切な操作で復旧できます。このページでは、「文鎮化」状態になったデバイスを復旧させるための緊急手段を紹介します。
boot パーティションの書き込みによる文鎮化
KernelSU では、以下のような状況で boot パーティションを書き込んだときに文鎮化する場合があります:
- 間違った形式の boot イメージを書き込んでしまった場合。例えばお使いのデバイスのパーティション形式が
gzなのにlz4形式のイメージを書き込んでしまうと、起動しなくなります。 - お使いのデバイスが起動するために AVB 検証を無効にする必要がある場合(通常、無効にするにはすべてのデータを消去する必要があります)。
- カーネルにバグがある、または書き込みに適していない場合。
どのような状況であっても、純正の boot イメージを書き込むことで復旧できます。したがって、インストールする前にまずは純正の boot パーティションをバックアップすることを強くおすすめします。バックアップしていない場合は、あなたと同じデバイスを持つ他のユーザー、または公式ファームウェアから純正の boot イメージを入手できます。
モジュールによる文鎮化
モジュールのインストールはデバイスを文鎮化させる一般的な原因です。モジュールを未知のソースからインストールしないでください!モジュールは root 権限を持つため、あなたのデバイスに不可逆的なダメージを与える可能性があります!
通常のモジュール
安全であることが確認されているモジュールをインストールしてデバイスが起動しなくなった場合、KernelSU では心配することなく簡単に復旧できます。KernelSU には、デバイスを救出するためのセーフモードが組み込まれています:
音量下ボタンでの復旧
セーフモードを使用して復旧を試みることができます。セーフモードに入ると、すべてのモジュールが無効化されます。
セーフモードに入るには、2つの方法があります:
- 一部のシステムの内蔵セーフモード:音量下ボタンの長押しでセーフモードに入れるシステムもあれば、リカバリーでセーフモードに入れるシステム(MIUI/HyperOS など)もあります。システムのセーフモードに入ると KernelSU もセーフモードに入り、自動的にモジュールを無効化します。
- KernelSU の内蔵セーフモード:最初の起動画面の後、音量下キーを3回以上連続して押すと入れます。なお、押す→離す、押す→離す、押す→離すを繰り返すのであって、長押しではありません。
セーフモードに入ると、KernelSU Manager のモジュールページにあるすべてのモジュールが無効になります。「アンインストール」操作を行うことで、問題を起こしている可能性のあるモジュールをアンインストールできます。
内蔵のセーフモードはカーネルに実装されているため、キーイベントを見逃す可能性はありません。ただし、GKI 以外のカーネルでは手動によるコードの統合が必要な場合があるため、公式ドキュメントを参考にしてください。
WARNING
KernelSU はカーネルモジュールの初期化中(LKM モードでカーネルが init プロセスを実行する際に読み込まれる)に音量キーリスナーを登録し、on_post_fs_data ステージ(起動アニメーションの前)で登録を解除します。タイミングを把握し、最初の起動画面の後に音量下キーをすばやく 3 回押す必要があります。デバイスの起動が速い場合や操作が遅れた場合、セーフモードがトリガーされない可能性があります。
モジュールが initrc に不合理なコードを書き込み、デバイスが起動しなくなった場合、これらのコードはセーフモードでも実行されます。
手動での復旧
セーフモードで問題が解決しない場合は、手動での復旧を試すことができます。デバイスの状態に応じて、以下の方法を選択してください。
方法 1: ADB 経由で ksud を使用してモジュールを管理する
デバイスが ADB 経由で root シェルを取得できる場合は、ksud コマンドラインを使用して、問題のあるモジュールを直接無効化またはアンインストールできます:
TIP
metadata パーティションと data パーティションをマウントした後、リカバリーモードで /data/adb/ksud コマンドを実行してモジュールを管理できます。
GKI デバイスは init を共有しているため、KernelSU カーネルモジュールはリカバリーモードでも読み込まれます。そのため、ksud の機能のほとんど(機能の設定など)を通常通り使用できるはずです。
adb shell
su
ksud module list # すべてのモジュールを一覧表示
ksud module disable <id> # 問題のあるモジュールを無効にする
ksud module uninstall <id> # または直接アンインストール
reboot方法 2: リカバリーによる手動クリーンアップ
システムに入ることができない(ADB も接続できない)場合は、デバイスにサードパーティのリカバリー(TWRP など)が必要です。
KernelSU のモジュールの読み込みは、カーネル側の init.rc 注入ファイルとユーザー空間の ksud プロセスに依存しています。これらのファイルを削除して再起動すると、KernelSU はモジュールをロードしなくなります。
操作手順:
- リカバリー(TWRP など)に入ります。
- data パーティションをマウントします:(まず data パーティションを復号する必要がある場合があります。具体的な操作はデバイスと復号方法によって異なります。)
mount /data - モジュールのロードを防ぐために ksud を削除します:
rm -f /data/adb/ksud - (オプション)metadata パーティションをマウントし、モジュールによって生成された init.rc 注入ファイルを削除します:
mount /metadata rm -f /metadata/ksu/modules.rc rm -f /metadata/watchdog/ksu/modules.rc - デバイスを再起動します:
reboot
再起動後、KernelSU はすべてのモジュールの読み込みをスキップします。システムに入ったら、KernelSU Manager を再度開いてモジュールの問題に対処できます。
データのフォーマット、またはその他の悪意のあるモジュール
上記の方法でデバイスを救出できない場合、インストールしたモジュールが悪意のある操作をしているか、他の手段でデバイスを損傷している可能性が高いです。この場合、2つの方法しかありません:
- データを消去して公式システムを完全に書き込み直す。
- アフターセールスサービスに問い合わせする