Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

ソフトリスタート

Android 11は、ソフトリブートをサポートしています。これは、再起動が必要な更新(APEXパッケージの更新など)を適用するために使用されるユーザースペースのプロセスのランタイム再起動です。現在、ソフトリスタートは、 userdataがマウントされた後に開始されたプロセスに制限されています。

ソフトリスタートは、次の方法で要求されます。

  • PowerManagerから、 PowerManager.reboot(PowerManager.REBOOT_USERSPACE)呼び出すことによって

  • シェルから、 adb shell svc power reboot userspaceまたはadb reboot userspace

ソフトリスタート後、資格情報で暗号化されたストレージはロック解除されたままになります。

デバイスがソフトPowerManager.isRebootingUserspace()スタートをサポートしている場合、 PowerManager.isRebootingUserspace() APIメソッドはtrue返し、システムプロパティinit.userspace_reboot.is_supported値は1等しくなります。

デバイスがソフトリブートをサポートしていない場合、 PowerManager.reboot(PowerManager.REBOOT_USERSPACE)adb reboot userspace PowerManager.reboot(PowerManager.REBOOT_USERSPACE) 、およびadb shell svc power reboot userspace PowerManager.reboot(PowerManager.REBOOT_USERSPACE) adb reboot userspace呼び出しは失敗します。

ソフトリスタート実行

ソフトリスタートが( PowerManagerまたはシェルから)要求された後、 initは次の手順を実行します。

  1. sys.powerctl=reboot,userspace受け取ります。

  2. ソフトリスタートを監視するために、個別のUserspaceRebootWatchdogThread()プロセスをフォークします。

  3. ソフト再起動に影響を与える可能性のあるすべてのシステムプロパティをリセットする、 userspace-reboot-requestedアクションをトリガーします。影響を受けるプロパティ:

    • sys.usb.config
    • sys.usb.state
    • sys.boot_completed
    • dev.bootcomplete
    • sys.init.updatable_crashing
    • sys.init.updatable_crashing_process_name
    • apexd.status
    • sys.user.0.ce_available
    • sys.shutdown.requested
    • service.bootanim.exit

    上記のプロパティは、起動シーケンス中に再設定する必要があります。必要に応じて、追加のプロパティをリセットできます。例については、 rootdir/init.rc on userspace-reboot-requestedアクションを参照してください。

  4. 次のアクションを実行するDoUserspaceReboot関数を実行します。

    1. ユーザーuserdataがマウントされた後に開始されたプロセスにSIGTERMSIGTERMし、プロセスが停止するのを待ちます。
    2. タイムアウトに達した後、実行中のプロセスをSIGKILLするためにSIGKILLを送信します。
    3. /system/bin/vdc volume reset呼び出します。
    4. zRAMバッキングデバイスをアンマウントします。
    5. アクティブなAPEXパッケージをアンマウントします。
    6. ブートストラップマウント名前空間に戻ります。
    7. userspace-reboot-resumeアクションをトリガーします。

ファイルシステムのチェックポイントは、ソフト再起動する前に、要求された場合、 userdata時のモードをチェックポイントに再マウントされるuserspace-reboot-fs-remount (詳細については、次のセクションを参照してください)アクション。ソフトリスタートは、 sys.boot_completed property1設定された後に考慮されます。ソフトリスタートが終了すると、ディスプレイはオフのままになり、ウェイクアップするには明示的なユーザー操作が必要になります。

ファイルシステムのチェックポイント

ソフトリスタートの前にファイルシステムチェックポイントが要求された場合、ユーザーuserdataはソフトリスタート中にチェックポイントモードで再マウントされます。再マウントロジックはfs_mgr_remount_userdata_into_checkpointing関数に実装されており、チェックポイント方法によって異なります。具体的には、 userdataサポートする場合:

  • ファイルシステムレベルのチェックポイント(たとえば、 f2fs )では、 f2fs userdatacheckpoint=disableオプションをcheckpoint=disableして再f2fsされます。

  • ブロックレベルのチェックポイント(たとえば、 ext4 )を実行すると、 /dataがマウント解除され、その上にマウントされていたすべての親デバイスマッパーデバイスが破棄されます。次に、 userdataは、通常のチェックポインティングブートで使用されるのと同じコードパスを使用してマウントされます。

ファイルシステムレベルのキーリングを使用して資格情報暗号化(CE)キーとデバイス暗号化(DE)キーを管理する場合、ユーザーuserdataがアンマウントされるとキーは失われます。キーの復元を可能にするために、ファイルシステムのキーリングにキーをインストールするときに、 voldはセッションレベルのキーリングにタイプfscrypt-provisioning同じキーもインストールしvoldinit_user0が呼び出されると、 voldはファイルシステムのキーリングにキーを再インストールします。

ハードリブートへのフォールバック

ソフトリスタートによってデバイスが使用できない状態にならないようにするために、Android 11には、次のいずれかの条件が満たされたときにトリガーされるハードリブートへのフォールバックが含まれています。

  • デバイスは、指定されたタイムアウト内にソフトリスタート(つまり、 sys.init.userspace_reboot.in_progress=1 )を開始できません。
  • プロセスは、指定されたタイムアウト内に停止できません。
  • /system/bin/vdc volume reset操作は失敗します。
  • zRAMデバイスのアンマウントは失敗します。
  • アクティブなAPEXパッケージが正しくアンマウントされません。
  • ユーザーuserdataをチェックポイントモードに再マウントしようとして失敗します。
  • デバイスは、指定されたタイムアウト内に正常に起動できません(つまり、 sys.boot_completed=1 )。

デバイスごとの構成

一部のソフトリスタートの側面は、次のプロパティの値を変更することで調整できます。

  • init.userspace_reboot.is_supportedは、デバイスがソフトリスタートを実行できるinit.userspace_reboot.is_supported制御します。このプロパティの値がfalse0 、または指定されていない場合、再起動の試行は拒否されます。
  • init.userspace_reboot.sigkill.timeoutmillisは、停止するSIGKILLを受信したプロセスのタイムアウトをミリ秒単位で制御します。指定されたタイムアウトでプロセスの1つが停止しなかった場合、ハードリブートへのフォールバックがトリガーされます。
  • init.userspace_reboot.sigterm.timeoutmillisは、 SIGTERMを受信したプロセスが終了するまでのタイムアウトをミリ秒単位で制御します。指定されたタイムアウトで終了できなかったすべてのプロセスは、 SIGKILL受け取ります。
  • init.userspace_reboot.started.timeoutmillisは、ソフトリスタートを開始するためのタイムアウトをミリ秒単位で制御します(つまり、 sys.init.userspace_reboot.in_progress=1 )。デバイスが指定されたタイムアウト内にソフトリスタートを開始できない場合、ハードリブートへのフォールバックがトリガーされます。
  • init.userspace_reboot.userdata_remount.timeoutmillisは、 init.userspace_reboot.userdata_remount.timeoutmillis userdataをアンマウントするためのタイムアウトをミリ秒単位で制御します。デバイスが指定されたタイムアウト内にユーザーuserdataミュートを解除できない場合、ハードリブートへのフォールバックがトリガーされます。
  • init.userspace_reboot.watchdog.timeoutmillisは、デバイスが正常に起動するためのタイムアウトを制御します(つまり、 sys.boot_completed=1 )。指定されたタイムアウト内にデバイスが起動に失敗した場合、ハードリブートへのフォールバックがトリガーされます。

ソフトリスタート中のアニメーションのカスタマイズ

ソフトリスタートのリファレンス実装には、ソフトリスタート中に表示されるアニメーションをカスタマイズする機能が含まれています。

bootanim userspace-reboot-fs-remount bootanimアクションの最後に、 initbootanimサービスを開始します。このサービスは、リストされている順序で次のアニメーションファイルの存在を検索し、最初に見つかったものを再生します。

  • /product/media/userspace-reboot.zip
  • /oem/media/userspace-reboot.zip
  • /system/media/userspace-reboot.zip

ソフトリスタート固有のアニメーションファイルが指定されていない場合、 bootanimはデフォルトのandroidアニメーションを表示します。

テスト

Android 11には、ソフトリスタートのリファレンス実装が含まれています。さらに、 UserspaceRebootHostTest CTSテストを使用して、ソフトリスタートを確認できます。