このページでは、Cuttlefish 仮想デバイスの再起動とリセットの方法について説明します。Cuttlefish デバイスを初期ディスク状態にリセットするには、コマンドライン ツールで powerwashing と指定します。
テストスイートなど、複数のさまざまなプロシージャからなる自動または手動のワークフローを実行する場合は、Cuttlefish デバイスをプロシージャ間でリセットすることで、各プロシージャの動作が独立するようにします。ディスク状態をリセットしないと、あるプロシージャが次のプロシージャの動作に影響を与える可能性があります。
このページで説明する再起動とリセットのプロシージャは、Cuttlefish デバイスを作成しており、ディスクでなんらかの状態が設定されていることを前提としています。
# Launch a devicelaunch_cvd# Make some modifications to the deviceadb shell touch /storage/self/primary/Documents/hello# Check the device stateadb shell ls /storage/self/primary/Documents
この出発点から、以下の再起動とリセットのフローを使用できます。
- デバイスが反応する場合は、
adb rebootを使用してクリーンな再起動を実行します。 - デバイスが反応しない場合は、
restart_cvdを使用してクリーンでない再起動を実行します。 powerwash_cvdを使用してデバイスの状態をリセットします。- デバイスを停止し、
launch_cvdの引数を変更して、デバイスの状態を保持したりデバイスの状態を強制的にクリアしたりします。
Cuttlefish クイック リセットの実装
Cuttlefish が使用するクイック リセットの実装は、qcow2 ディスク オーバーレイによるディスクの保護に依存します。デフォルトでは、Cuttlefish は元のディスクを読み取り専用として扱い、オーバーレイを使用してディスク書き込みを取得します。
ただし、書き込み時コピーのオーバーレイの使用にはデメリットがあります。特に、元のディスクに対する外部変更により既存のオーバーレイとの互換性が損なわれ、ディスクの状態が整合しなくなります。Cuttlefish は、互換性のない変更を検出すると、オーバーレイを強制的に再作成します。
ディスクの一部を特定の初期化状態に保ちつつ、他の部分はスワップアウトする必要がある機能を開発している場合、オーバーレイの強制的な再作成は望ましくありません。たとえば、特定のユーザー設定でアプリをインストールしてから、カーネルを繰り返しスワップアウトし、アプリと各種カーネルビルドとのやり取りをテストする場合は、オーバーレイを無効にすることをおすすめします。
デバイスをリセットする
以下のセクションでは、Cuttlefish デバイスを初期ディスク状態にリセットする方法について説明します。
1 つのデバイスをリセットする
1 つの Cuttlefish デバイスを初期ディスク状態にリセットするには、次のコマンドを実行します。
powerwash_cvdpowerwash_cvd: 仮想マシンをシャットダウンし、仮想マシンのディスクに加えられた変更をすべてリセットして、起動が終了するまで待機します。このインスタンスは、launch_cvd に指定された元のフラグを保持します。
マルチテナント構成で powerwash_cvd を指定すると、インスタンス グループのうちの 1 つのインスタンスが再起動します。
powerwash_cvd --instance_num=Nすべてのデバイスをリセットする
1 つ以上のデバイスを停止して初期ディスク状態にリセットするには、次のコマンドを実行します。
stop_cvdlaunch_cvd --resume=false
stop_cvd: クリーンでないシャットダウンを実行してデバイスを停止します。
launch_cvd に --resume=false を追加すると、Cuttlefish は、以前実行されていたインスタンスに関連するすべてのファイルを破棄してから、次の実行を開始します。どのような launch_cvd フラグを追加しても安全です。
マルチテナント構成で stop_cvd を指定すると、インスタンス グループ全体がシャットダウンします。
デバイスを再起動する
以下のセクションでは、デバイスを初期ディスク状態にリセットせずにデバイスを再起動する方法について説明します。
クリーンな再起動
デバイスが応答している場合にデバイスのクリーンな再起動を実行するには、次のコマンドを実行します。
adb rebootadb reboot: デバイスに完全なシャットダウン プロシージャを実行させ、ディスクと変更を同期して、プロセスが確実にシャットダウンするようにします。Cuttlefish のホストプロセスは関与しません。デバイスが不適切な状態になり反応しなくなった場合、このプロシージャは利用できません。
マルチテナント構成で 1 つの Cuttlefish デバイスのクリーンな再起動を実行するには、adb-reboot の実行時にターゲット デバイスのシリアル番号を指定します。ターゲット デバイスを指定しなかった場合、adb でデバイスを再起動することはできません。
adb -s SERIAL rebootクリーンでない再起動
デバイスが応答しない場合にクリーンでない再起動を実行するには、次のコマンドを実行します。
restart_cvdrestart_cvd: Cuttlefish デバイスを即座にシャットダウンすることによってクリーンでないシャットダウンを実行します。restart_cvd は、実機のバッテリーを取り外して再接続する操作と同等です。処理中のディスク書き込みは、継続されない可能性があります。restart_cvd は、デバイスが完全に再起動するまで待機してから終了します。
マルチテナント構成で restart_cvd を指定すると、インスタンス グループのうちの 1 つのインスタンスが再起動します。再起動する Cuttlefish インスタンスを指定するには、instance_num フラグを使用します。
restart_cvd --instance_num=N--instance_num を使用しなかった場合、インスタンス番号はデフォルトで 1 に設定されます。
各種 launch_cvd フラグを使って再起動する
1 つ以上のデバイスを停止し、各種の launch_cvd フラグを使って再起動するには、次のコマンドを実行します。
stop_cvdlaunch_cvd NEW_FLAG
stop_cvd: restart_cvd と同様にクリーンでないシャットダウンを実行します。デバイスは休止状態になるため、後で別の launch_cvd コマンドで起動できます。restart_cvd と同様に、ディスクに完全に同期されなかったディスク書き込みは、継続されない可能性があります。データをディスクに安全に保存するには、まず adb reboot を実行します。
adb rebootstop_cvdlaunch_cvd NEW_FLAG
launch_cvd フラグの変更によってディスク レイアウトが強制的に変更され、書き込み時コピーの実装との互換性が損なわれると、launch_cvd は以前のディスク変更を無視し、元のディスク状態にリセットします。フラグの完全なリストについては、「フラグ」をご覧ください。
オーバーレイなしで実行する
クイック リセットのサポートからオプトアウトするには、次のコマンドを実行します。
launch_cvd --use_overlay=false--use_overlay=false: Cuttlefish ディスク ファイルを読み取り / 書き込みとして扱い、変更をこれらのファイルに伝播します。
--use_overlay=false とデフォルトを切り替えると、互換性エラーが発生する可能性があります。以前のデバイス状態を強制的にクリーンアップするには、次のコマンドを実行します。
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish は、オーバーレイありのフローとオーバーレイなしのフローの間の遷移を安全に操作できないため、この変更を行うと Cuttlefish の管理状態はすべて削除されます。外部ディスク ファイルが変更され、後でオーバーレイとともに再使用された場合、以前の変更はベースライン状態の一部と見なされます。
フラグ
launch_cvd を使用して Cuttlefish デバイスを再起動する場合は、フラグを使って引数を追加できます。ただし、特定のフラグ(同じにしておく必要があるフラグ)では、フラグが launch_cvd コマンド間で変更されると、データが失われる可能性があります。launch_cvd、stop_cvd、再び launch_cvd を指定するコマンド シーケンスを実行する場合にデータが失われないようにするには、すべての launch_cvd コマンドで同じフラグを使用します。たとえば、1 つ目の launch_cvd フラグに --kernel_path=KERNEL_PATH 引数が含まれている場合は、2 つ目の launch_cvd 呼び出しでも同じ --kernel_path=KERNEL_PATH 引数を含める必要があります。そうしないと、stop_cvd の前に加えたファイル システムの変更はすべて、2 つ目の launch_cvd 呼び出しで失われます。KERNEL_PATH が参照するファイルの内容も同じである必要があります。
フラグの中には、launch_cvd 呼び出し間で変更できるものもあります。以下のセクションでは、データ損失を回避するために変更すべきでないフラグと、データ損失なく安全に変更できるフラグを示します。各フラグについて詳しくは、ソース(flags.cc、disk_flags.cc)を参照するか、launch_cvd --help を実行してください。
変更すべきでないフラグ
データ損失を回避するため、launch_cvd を呼び出してから次に呼び出すまで変更すべきでないフラグを以下に示します。
--data_policy--blank_data_image_mb--kernel_path--initramfs_path--vm_manager--enable_minimal_mode--bootloader--protected_vm--userdata_format--use_overlay--system_image_dir--boot_image--init_boot_image--data_image--super_image--misc_image--misc_info_txt--metadata_image--vendor_boot_image--vbmeta_image--vbmeta_system_image--linux_kernel_path--linux_initramfs_path--linux_root_image--fuchsia_zedboot_path--fuchsia_multiboot_bin_path--fuchsia_root_image--custom_partition_path--blank_metadata_image_mb
変更できるフラグ
以下のフラグは、データ損失を招くことなく launch_cvd の呼び出し間で安全に変更できます。
--displays_textproto--displays_binproto--cpus--gdb_port--display0--display1--display2--display3--x_res--y_res--dpi--refresh_rate_hz--extra_kernel_cmdline--extra_bootconfig_args--guest_enforce_security--memory_mb--serial_number--use_random_serial--gpu_mode--hwcomposer--gpu_capture_binary--enable_gpu_udmabuf--enable_gpu_angle--use_allocd--pause_in_bootloader--enable_host_bluetooth--rootcanal_instance_num--rootcanal_args--netsim--netsim_bt--bluetooth_controller_properties_file--bluetooth_commands_file--enable_sandbox--seccomp_policy_dir--start_webrtc--webrtc_assets_dir--webrtc_certs_dir--start_webrtc_sig_server--webrtc_sig_server_addr--webrtc_sig_server_port--tcp_port_range--udp_port_range--webrtc_sig_server_path--webrtc_sig_server_secure--verify_sig_server_certificate--webrtc_device_id--uuid--daemon--setupwizard_mode--enable_bootanimation--qemu_binary_dir--crosvm_binary--gem5_binary_dir--gem5_checkpoint_dir--gem5_debug_file--gem5_debug_flags--restart_subprocesses--enable_vehicle_hal_grpc_server--boot_slot--num_instances--report_anonymous_usage_stats--ril_dns--kgdb--start_gnss_proxy--gnss_file_path--fixed_location_file_path--enable_modem_simulator--modem_simulator_sim_type--console--enable_kernel_log--vhost_net--vhost_user_mac80211_hwim--wmediumd_config--ap_rootfs_image--ap_kernel_image--record_screen--smt--vsock_guest_cid--secure_hals--use_sdcard--enable_audio--camera_server_port--modem_simulator_count--blank_sdcard_image_mb--adb_mode