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 ফ্ল্যাগ যোগ করা নিরাপদ।

মাল্টি-টেন্যান্ট কনফিগারেশনে,ß 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
  • --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