इस पेज पर, 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 होस्ट प्रोसेस शामिल नहीं होती हैं. अगर डिवाइस ठीक से काम नहीं कर रहा है और जवाब नहीं दे रहा है, तो हो सकता है कि यह तरीका उपलब्ध न हो.
मल्टी-टेनेंट कॉन्फ़िगरेशन में किसी एक 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