इस पेज पर, Cuttlefish वर्चुअल डिवाइसों को रीस्टार्ट और रीसेट करने का तरीका बताया गया है. कमांड-लाइन टूल में, Cuttlefish डिवाइस को डिस्क की शुरुआती स्थिति पर रीसेट करने को पावरवॉश कहा जाता है.
टेस्ट सुइट जैसे कई अलग-अलग प्रोसेस के साथ ऑटोमेटेड या मैन्युअल वर्कफ़्लो चलाते समय, प्रोसेस के बीच 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 डिवाइस को डिस्क की शुरुआती स्थिति पर रीसेट करने के तरीकों के बारे में बताया गया है.
एक डिवाइस को रीसेट करना
किसी Cuttlefish डिवाइस को उसकी डिस्क की शुरुआती स्थिति पर रीसेट करने के लिए, यह कमांड चलाएं:
powerwash_cvd
powerwash_cvd
, वर्चुअल मशीन को बंद कर देता है. साथ ही, वर्चुअल मशीन की डिस्क में किए गए सभी बदलावों को रीसेट कर देता है. इसके बाद, वर्चुअल मशीन को फिर से चालू करता है और उसके बूट होने का इंतज़ार करता है. इंस्टेंस, launch_cvd
को दिए गए ओरिजनल फ़्लैग को सुरक्षित रखता है.
मल्टी-टेंंट कॉन्फ़िगरेशन में,
powerwash_cvd
इंस्टेंस ग्रुप में से किसी एक इंस्टेंस को रीस्टार्ट करता है:
powerwash_cvd --instance_num=N
सभी डिवाइसों को रीसेट करना
एक या उससे ज़्यादा डिवाइसों को रोकने और उन्हें डिस्क की शुरुआती स्थिति पर रीसेट करने के लिए, यह चलाएं:
stop_cvd
launch_cvd --resume=false
stop_cvd
, डिवाइस को अचानक बंद कर देता है और उसे बंद कर देता है.
launch_cvd
में --resume=false
जोड़ने पर, Cuttlefish अगला रन शुरू करने से पहले, पहले चल रहे इंस्टेंस से जुड़ी सभी फ़ाइलों को नष्ट कर देता है. launch_cvd
फ़्लैग जोड़ना सुरक्षित है.
मल्टी-टेंंट कॉन्फ़िगरेशन में, stop_cvd
पूरे इंस्टेंस ग्रुप को बंद कर देता है.
डिवाइसों को रीस्टार्ट करना
नीचे दिए गए सेक्शन में, डिवाइस को उसकी डिस्क की शुरुआती स्थिति पर रीसेट किए बिना, उसे रीस्टार्ट करने के तरीकों के बारे में बताया गया है.
क्लीन रीस्टार्ट
डिवाइस के काम करने पर, उसे पूरी तरह से रीस्टार्ट करने के लिए, यह चलाएं:
adb reboot
adb reboot
, डिवाइस को पूरी तरह बंद करने की प्रोसेस को पूरा करता है. साथ ही, डिस्क में किए गए बदलावों को सिंक करता है और यह पक्का करता है कि सभी प्रोसेस बंद हो गई हों. इसमें कटलफ़िश होस्ट की प्रोसेस शामिल नहीं होती हैं. अगर डिवाइस की स्थिति खराब है और वह काम नहीं कर रहा है, तो हो सकता है कि यह तरीका उपलब्ध न हो.
मल्टी-टेंंट कॉन्फ़िगरेशन में, किसी एक Cuttlefish डिवाइस को पूरी तरह से रीस्टार्ट करने के लिए, adb-reboot
चलाते समय टारगेट डिवाइस का सीरियल नंबर डालें. अगर कोई टारगेट डिवाइस नहीं चुना गया है, तो adb
किसी भी डिवाइस को रीस्टार्ट नहीं करता.
adb -s SERIAL reboot
गलत तरीके से रीस्टार्ट करना
डिवाइस काम न करने पर, उसे रीस्टार्ट करने के लिए:
restart_cvd
restart_cvd
, Cuttlefish डिवाइस को तुरंत बंद करके, गलत तरीके से बंद करता है. restart_cvd
, किसी डिवाइस से बैटरी को डिसकनेक्ट करके फिर से कनेक्ट करने जैसा ही है. अगर डिस्क में डेटा लिखने की प्रोसेस जारी थी, तो हो सकता है कि वह प्रोसेस पूरी न हो. restart_cvd
, डिवाइस के पूरी तरह से फिर से बूट होने तक इंतज़ार करता है. इसके बाद ही वह बंद होता है.
मल्टी-टेंंट कॉन्फ़िगरेशन में,
restart_cvd
इंस्टेंस ग्रुप में से किसी एक इंस्टेंस को रीस्टार्ट करता है. यह तय करने के लिए कि किस Cuttlefish इंस्टेंस को रीस्टार्ट करना है, instance_num
फ़्लैग का इस्तेमाल करें.
restart_cvd --instance_num=N
अगर --instance_num
का इस्तेमाल नहीं किया जाता है, तो इंस्टेंस नंबर डिफ़ॉल्ट रूप से 1
पर सेट हो जाता है.
launch_cvd के अलग-अलग फ़्लैग का इस्तेमाल करके रीस्टार्ट करना
एक या उससे ज़्यादा डिवाइसों को रोकने और अलग-अलग launch_cvd
फ़्लैग के साथ फिर से लॉन्च करने के लिए, यह चलाएं:
stop_cvd
launch_cvd NEW_FLAG
stop_cvd
, restart_cvd
की तरह ही अचानक बंद हो जाता है. इससे डिवाइस, स्लीप मोड में चला जाता है. इसे बाद में किसी दूसरे launch_cvd
निर्देश से फिर से चालू किया जा सकता है. restart_cvd
की तरह ही, हो सकता है कि डिस्क पर लिखी गई जानकारी पूरी तरह से सिंक न हो और वह डिस्क पर सेव न रहे. डिस्क में डेटा को सुरक्षित तरीके से सेव करने के लिए, पहले adb reboot
चलाएं.
adb reboot
stop_cvd
launch_cvd NEW_FLAG
अगर launch_cvd
फ़्लैग में किए गए बदलावों की वजह से, डिस्क लेआउट में ऐसा बदलाव होता है जो लिखते समय कॉपी करने की सुविधा के साथ काम नहीं करता, तो launch_cvd
डिस्क में किए गए पुराने बदलावों को अनदेखा कर देता है और डिस्क को उसकी मूल स्थिति पर रीसेट कर देता है. फ़्लैग की पूरी सूची के लिए, फ़्लैग देखें.
ओवरले के बिना चलाना
क्विक-रीसेट की सुविधा से ऑप्ट आउट करने के लिए, यह चलाएं:
launch_cvd --use_overlay=false
--use_overlay=false
, Cuttlefish डिस्क फ़ाइलों को रीड-राइट के तौर पर इस्तेमाल करता है. साथ ही, उन फ़ाइलों में बदलाव किए जाते हैं.
--use_overlay=false
और डिफ़ॉल्ट के बीच स्विच करने से, काम करने से जुड़ी गड़बड़ियां हो सकती हैं. डिवाइस की पिछली स्थिति को जबरदस्ती मिटाने के लिए, यह चलाएं:
stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
Cuttlefish, ओवरले के साथ और बिना ओवरले वाले फ़्लो के बीच ट्रांज़िशन को सुरक्षित तरीके से नेविगेट नहीं कर सकता. इसलिए, इस बदलाव से Cuttlefish की मैनेजमेंट स्टेटस मिट जाती है. अगर बाहरी डिस्क की फ़ाइलों में बदलाव किया जाता है और बाद में उन्हें ओवरले के साथ फिर से इस्तेमाल किया जाता है, तो पहले किए गए बदलावों को बेसलाइन स्टेटस का हिस्सा माना जाता है.
झंडे
launch_cvd
का इस्तेमाल करके Cuttlefish डिवाइस लॉन्च करते समय, फ़्लैग का इस्तेमाल करके आर्ग्युमेंट जोड़े जा सकते हैं. हालांकि, कुछ फ़्लैग (ऐसे फ़्लैग जो एक जैसे होने चाहिए) के लिए, launch_cvd
कमांड के बीच फ़्लैग बदलने पर डेटा मिट सकता है. launch_cvd
, stop_cvd
, और फिर launch_cvd
वाले कमांड का सिलसिला चलाते समय, डेटा का नुकसान न हो, यह पक्का करने के लिए हर launch_cvd
कमांड के लिए एक जैसे फ़्लैग का इस्तेमाल करें. उदाहरण के लिए, अगर पहले launch_cvd
फ़्लैग में आर्ग्युमेंट --kernel_path=KERNEL_PATH
शामिल है, तो दूसरे launch_cvd
को कॉल करने पर भी वही --kernel_path=KERNEL_PATH
आर्ग्युमेंट शामिल होना चाहिए. ऐसा न करने पर, stop_cvd
से पहले किए गए फ़ाइल सिस्टम के बदलाव, दूसरे 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