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 ডিভাইসকে তার প্রাথমিক ডিস্ক অবস্থায় পুনরায় সেট করার উপায় বর্ণনা করে।

একটি ডিভাইস রিসেট করুন

একটি কাটলফিশ ডিভাইসকে তার প্রাথমিক ডিস্ক অবস্থায় রিসেট করতে, চালান:

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 ডিভাইসটিকে সম্পূর্ণ শাটডাউন পদ্ধতির মাধ্যমে নিয়ে যায়, ডিস্কে পরিবর্তনগুলি সিঙ্ক করে এবং প্রক্রিয়াগুলি বন্ধ করে দেয়। কাটলফিশ হোস্ট প্রক্রিয়া জড়িত নয়। এই পদ্ধতিটি অনুপলব্ধ হতে পারে যদি ডিভাইসটি একটি খারাপ অবস্থায় প্রবেশ করে এবং প্রতিক্রিয়াহীন হয়ে যায়।

মাল্টি-টেন্যান্ট কনফিগারেশনে একটি একক কাটলফিশ ডিভাইসের ক্লিন রিস্টার্ট করতে, 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 পতাকা দিয়ে পুনরায় লঞ্চ করতে, চালান:

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 আর্গুমেন্ট অন্তর্ভুক্ত করতে হবে, অথবা দ্বিতীয় launch_cvd ইনভোকেশনে stop_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