Cuttlefish: रीस्टार्ट और रीसेट करना

इस पेज पर, Cuttlefish वर्चुअल डिवाइसों को रीस्टार्ट और रीसेट करने का तरीका बताया गया है. कमांड लाइन टूल में, Cuttlefish डिवाइस को उसकी शुरुआती डिस्क की स्थिति पर रीसेट करने को पावरवॉश कहा जाता है.

ऑटोमेटेड या मैन्युअल वर्कफ़्लो को कई अलग-अलग तरीकों से चलाने पर, Cuttlefish डिवाइस को हर तरीके के बाद रीसेट करना ज़रूरी है. जैसे, टेस्ट सुइट. ऐसा करने से, हर तरीके का व्यवहार अलग-अलग होता है. अगर डिस्क की स्थिति रीसेट नहीं की जाती है, तो एक तरीका, अगले तरीके के व्यवहार पर असर डाल सकता है.

इस पेज पर बताए गए रीस्टार्ट और रीसेट करने के तरीकों में यह माना जाता है कि आपने Cuttlefish डिवाइस बनाया है और डिस्क पर कुछ स्थिति सेट की है.

# 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

यहां से शुरू करके, रीस्टार्ट और रीसेट करने के लिए, इन फ़्लो का इस्तेमाल किया जा सकता है:

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` में कोई भी अतिरिक्त फ़्लैग जोड़ा जा सकता है.launch_cvd

मल्टी-टेनेंट कॉन्फ़िगरेशन में,multi-tenant configurationß 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