कटलफिश: पुनरारंभ करें और रीसेट करें

यह पृष्ठ वर्णन करता है कि कटलफ़िश वर्चुअल डिवाइस को पुनरारंभ और रीसेट कैसे करें। कटलफिश डिवाइस को उसकी प्रारंभिक डिस्क स्थिति में रीसेट करना कमांड लाइन टूल में पावरवॉशिंग के रूप में जाना जाता है।

परीक्षण सूट जैसी कई अलग-अलग प्रक्रियाओं के साथ स्वचालित या मैन्युअल वर्कफ़्लो चलाते समय, प्रक्रियाओं के बीच कटलफ़िश डिवाइस को रीसेट करना यह सुनिश्चित करता है कि प्रत्येक प्रक्रिया का व्यवहार स्वतंत्र है। यदि डिस्क स्थिति रीसेट नहीं की जाती है, तो एक प्रक्रिया निम्नलिखित प्रक्रिया के व्यवहार को प्रभावित कर सकती है।

इस पृष्ठ पर वर्णित पुनरारंभ और रीसेट प्रक्रियाएं मानती हैं कि आपने एक कटलफिश डिवाइस बनाया है और डिस्क पर कुछ स्थिति निर्धारित की है।

# Launch a device
launch_cvd
# Make some modifications to the device
adb shell touch /storage/self/primary/Documents/hello
# Check the device state
adb shell ls /storage/self/primary/Documents

इस शुरुआती बिंदु से, आप निम्नलिखित पुनरारंभ और रीसेट प्रवाह का उपयोग कर सकते हैं:

कटलफिश त्वरित रीसेट कार्यान्वयन

कटलफिश एक त्वरित रीसेट कार्यान्वयन का उपयोग करता है जो qcow2 डिस्क ओवरले के पीछे डिस्क की सुरक्षा पर निर्भर है। डिफ़ॉल्ट रूप से, कटलफ़िश मूल डिस्क को केवल-पढ़ने के लिए मानता है और डिस्क लेखन को कैप्चर करने के लिए ओवरले का उपयोग करता है।

हालाँकि कॉपी-ऑन-राइट ओवरले का उपयोग करने में कमियाँ हैं। विशेष रूप से, अंतर्निहित डिस्क में बाहरी परिवर्तन मौजूदा ओवरले के साथ संगतता को तोड़ देते हैं, और एक असंगत डिस्क स्थिति का कारण बनते हैं। जब कटलफिश को असंगत परिवर्तनों का पता चलता है तो वह जबरन ओवरले को फिर से बनाता है।

ओवरले को जबरन दोबारा बनाना एक ऐसी सुविधा विकसित करते समय अवांछनीय है जिसके लिए डिस्क के एक अलग हिस्से को स्वैप करते समय डिस्क के हिस्से को एक विशेष आरंभिक स्थिति में रखने की आवश्यकता होती है। उदाहरण के लिए, किसी विशेष उपयोगकर्ता कॉन्फ़िगरेशन के साथ एक ऐप इंस्टॉल करना और फिर ऐप और विभिन्न कर्नेल बिल्ड के बीच इंटरैक्शन का परीक्षण करने के लिए कर्नेल को बार-बार स्वैप करना। इस मामले में, ओवरले को अक्षम करना उचित हो सकता है।

डिवाइस रीसेट करें

निम्नलिखित अनुभाग कटलफिश डिवाइस को उसकी प्रारंभिक डिस्क स्थिति में रीसेट करने के तरीकों का वर्णन करते हैं।

एक डिवाइस रीसेट करें

एक कटलफ़िश डिवाइस को उसकी प्रारंभिक डिस्क स्थिति में रीसेट करने के लिए, चलाएँ:

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 जोड़ने से कटलफिश अगला रन शुरू करने से पहले पहले से चल रहे इंस्टेंस से संबंधित सभी फाइलों को नष्ट कर देता है। कोई भी अतिरिक्त launch_cvd फ़्लैग जोड़ना सुरक्षित है।

मल्टी-टेनेंट कॉन्फ़िगरेशन में, stop_cvd संपूर्ण इंस्टेंस समूह को बंद कर देता है।

डिवाइस पुनः प्रारंभ करें

निम्नलिखित अनुभाग डिवाइस को उसकी प्रारंभिक डिस्क स्थिति पर रीसेट किए बिना डिवाइस को पुनरारंभ करने के तरीकों का वर्णन करते हैं।

साफ़ पुनरारंभ करें

डिवाइस के प्रतिक्रियाशील होने पर डिवाइस को क्लीन रीस्टार्ट करने के लिए, चलाएँ:

adb reboot

adb reboot डिवाइस को पूर्ण शटडाउन प्रक्रिया के माध्यम से ले जाता है, डिस्क में परिवर्तनों को समन्वयित करता है और सुनिश्चित करता है कि प्रक्रियाएं बंद हो जाएं। कटलफ़िश होस्ट प्रक्रियाएँ शामिल नहीं हैं। यदि डिवाइस खराब स्थिति में पहुंच गया है और अनुत्तरदायी हो गया है तो यह प्रक्रिया अनुपलब्ध हो सकती है।

मल्टी-टेनेंट कॉन्फ़िगरेशन में एकल कटलफ़िश डिवाइस का क्लीन रीस्टार्ट करने के लिए, adb-reboot चलाते समय लक्ष्य डिवाइस का सीरियल नंबर निर्दिष्ट करें। यदि कोई लक्ष्य डिवाइस निर्दिष्ट नहीं है, तो adb किसी भी डिवाइस को पुनरारंभ नहीं करता है।

adb -s SERIAL reboot

अशुद्ध पुनरारंभ

डिवाइस के अनुत्तरदायी होने पर अशुद्ध पुनरारंभ करने के लिए, चलाएँ:

restart_cvd

restart_cvd कटलफिश डिवाइस को तुरंत बंद करके एक अशुद्ध शटडाउन करता है। restart_cvd बैटरी को किसी भौतिक डिवाइस से डिस्कनेक्ट करने और पुनः कनेक्ट करने के बराबर है। यदि डिस्क लेखन प्रगति पर होता तो संभवतः जारी नहीं रहता। restart_cvd बाहर निकलने से पहले डिवाइस के पूरी तरह से बूट होने तक प्रतीक्षा करता है।

मल्टी-टेनेंट कॉन्फ़िगरेशन में, restart_cvd इंस्टेंस समूह से एकल इंस्टेंस को पुनरारंभ करता है। यह निर्दिष्ट करने के लिए कि किस कटलफ़िश इंस्टेंस को पुनरारंभ करना है, instance_num ध्वज का उपयोग करें।

restart_cvd --instance_num=N

यदि --instance_num उपयोग नहीं किया जाता है, तो इंस्टेंस संख्या डिफ़ॉल्ट रूप से 1 हो जाती है।

विभिन्न लॉन्च_सीवीडी फ़्लैग का उपयोग करके पुनरारंभ करें

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

--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