इस पेज में Cuttle Fish वर्चुअल डिवाइसों को रीस्टार्ट और रीसेट करने का तरीका बताया गया है. किसी कटलफ़िश डिवाइस को उसकी शुरुआती डिस्क स्थिति पर रीसेट करने को कमांड-लाइन टूल में पावरवॉशिंग कहा जाता है.
कई अलग-अलग प्रोसेस (जैसे कि टेस्ट सुइट) के साथ अपने-आप काम करने वाले या मैन्युअल वर्कफ़्लो चलाते समय, अलग-अलग प्रोसेस के बीच कटलफ़िश डिवाइस को रीसेट करने से यह पक्का हो जाता है कि हर प्रोसेस अलग-अलग है. अगर डिस्क की स्थिति को रीसेट नहीं किया जाता है, तो एक प्रोसेस का असर अगली प्रोसेस के काम करने के तरीके पर पड़ सकता है.
इस पेज पर बताए गए रीस्टार्ट और रीसेट करने के तरीके से यह माना जाता है कि आपने 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, तुरंत रीसेट करने की सुविधा का इस्तेमाल करता है. यह सुविधा, qcow2 डिस्क ओवरले के पीछे मौजूद डिस्क को सुरक्षित रखने पर निर्भर करती है. डिफ़ॉल्ट रूप से, कटलफ़िश मूल डिस्क को रीड-ओनली के तौर पर देखती है और डिस्क राइट लेने के लिए ओवरले का इस्तेमाल करती है.
हालांकि, लिखते समय कॉपी करने की सुविधा वाले ओवरले का इस्तेमाल करने में कुछ समस्याएं आती हैं. खास तौर पर, डिस्क में किए गए बाहरी बदलावों की वजह से, मौजूदा ओवरले के साथ काम करने की सुविधा बंद हो जाती है. साथ ही, डिस्क की स्थिति में भी बदलाव होता है. जब कटलफ़िश को पता चलता है कि उसमें होने वाले बदलावों का पता नहीं चलता, तो वह ओवरले को जबरन, फिर से बना देता है.
ऐसी सुविधा तैयार करते समय, ओवरले को अपने-आप फिर से बनाने की ज़रूरत नहीं होती जिसमें डिस्क के अलग हिस्से को स्वैप करते समय डिस्क के एक हिस्से को खास शुरुआती स्थिति में रखने की ज़रूरत होती है. उदाहरण के लिए, किसी खास उपयोगकर्ता कॉन्फ़िगरेशन वाला ऐप्लिकेशन इंस्टॉल करना और फिर ऐप्लिकेशन और अलग-अलग कर्नेल बिल्ड के बीच इंटरैक्शन की जांच करने के लिए कर्नेल को बार-बार स्वैप करना. ऐसे में, ओवरले बंद करना बेहतर होगा.
डिवाइसों को रीसेट करना
यहां दिए गए सेक्शन में, 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
, कटलफ़िश डिवाइस को तुरंत बंद करके, गंदे शटडाउन करता है. 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
कटलफ़िश ओवरले के साथ और उसके बिना फ़्लो के बीच सुरक्षित तरीके से नेविगेट नहीं कर सकती, इसलिए यह बदलाव कटलफ़िश के मैनेजमेंट की पूरी स्थिति मिटा देता है. अगर बाहरी डिस्क की फ़ाइलों में बदलाव किया जाता है और बाद में उन्हें ओवरले के साथ फिर से इस्तेमाल किया जाता है, तो पहले किए गए बदलावों को बेसलाइन स्टेट का हिस्सा माना जाता है.
झंडे
launch_cvd
का इस्तेमाल करके, कटलफ़िश डिवाइस को लॉन्च करते समय, फ़्लैग का इस्तेमाल करके आर्ग्युमेंट जोड़े जा सकते हैं. हालांकि, कुछ फ़्लैग (वह फ़्लैग जो एक जैसे रहने चाहिए) के लिए, 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