এই পৃষ্ঠায় কাটলফিশ ভার্চুয়াল ডিভাইসগুলি কীভাবে রিস্টার্ট এবং রিসেট করতে হয় তা বর্ণনা করা হয়েছে। একটি কাটলফিশ ডিভাইসকে তার প্রাথমিক ডিস্ক অবস্থায় রিসেট করাকে কমান্ড লাইন টুলে পাওয়ারওয়াশিং বলা হয়।
টেস্ট স্যুটের মতো একাধিক ভিন্ন প্রসিডিউর সহ স্বয়ংক্রিয় বা ম্যানুয়াল ওয়ার্কফ্লো চালানোর সময়, প্রসিডিউরগুলোর মাঝে কাটলফিশ ডিভাইসটি রিসেট করলে প্রতিটি প্রসিডিউরের আচরণ স্বাধীন থাকে। যদি ডিস্কের অবস্থা রিসেট করা না হয়, তবে একটি প্রসিডিউর তার পরবর্তী প্রসিডিউরের আচরণকে প্রভাবিত করতে পারে।
এই পৃষ্ঠায় বর্ণিত রিস্টার্ট এবং রিসেট পদ্ধতিগুলো এই অনুমানের উপর ভিত্তি করে তৈরি যে, আপনি একটি কাটলফিশ ডিভাইস তৈরি করেছেন এবং ডিস্কে কিছু স্টেট সেট করেছেন।
# 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আর্গুমেন্টগুলো পরিবর্তন করুন।
কাটলফিশ দ্রুত রিসেট বাস্তবায়ন
কাটলফিশ একটি দ্রুত রিসেট ব্যবস্থা ব্যবহার করে যা qcow2 ডিস্ক ওভারলে-এর আড়ালে ডিস্কগুলোকে সুরক্ষিত রাখার উপর নির্ভরশীল। ডিফল্টরূপে, কাটলফিশ মূল ডিস্কগুলোকে রিড-অনলি হিসেবে গণ্য করে এবং ডিস্ক রাইট ক্যাপচার করার জন্য ওভারলে ব্যবহার করে।
তবে কপি-অন-রাইট ওভারলে ব্যবহারের কিছু অসুবিধা রয়েছে। বিশেষভাবে উল্লেখ্য যে, অন্তর্নিহিত ডিস্কে বাহ্যিক পরিবর্তন বিদ্যমান ওভারলেগুলির সাথে সামঞ্জস্য নষ্ট করে দেয় এবং ডিস্কের অবস্থাকে অসামঞ্জস্যপূর্ণ করে তোলে। কাটলফিশ যখন অসামঞ্জস্যপূর্ণ পরিবর্তন শনাক্ত করে, তখন এটি জোরপূর্বক ওভারলেগুলি পুনরায় তৈরি করে।
এমন কোনো ফিচার ডেভেলপ করার সময় ওভারলেগুলোকে জোর করে পুনরায় তৈরি করাটা অনাকাঙ্ক্ষিত, যেখানে ডিস্কের একাংশকে একটি নির্দিষ্ট প্রারম্ভিক অবস্থায় রেখে অন্য একটি অংশ সোয়াপ আউট করার প্রয়োজন হয়। উদাহরণস্বরূপ, একটি নির্দিষ্ট ইউজার কনফিগারেশন সহ কোনো অ্যাপ ইনস্টল করা এবং তারপর অ্যাপ ও বিভিন্ন কার্নেল বিল্ডের মধ্যেকার মিথস্ক্রিয়া পরীক্ষা করার জন্য বারবার কার্নেল সোয়াপ আউট করা। এই ক্ষেত্রে, ওভারলেগুলো নিষ্ক্রিয় করে দেওয়াই শ্রেয় হতে পারে।
ডিভাইসগুলি রিসেট করুন
নিম্নলিখিত বিভাগগুলিতে একটি কাটলফিশ ডিভাইসকে তার প্রাথমিক ডিস্ক অবস্থায় রিসেট করার উপায়গুলি বর্ণনা করা হয়েছে।
একটি ডিভাইস রিসেট করুন
একটি কাটলফিশ ডিভাইসকে তার প্রাথমিক ডিস্ক অবস্থায় রিসেট করতে, চালান:
powerwash_cvd powerwash_cvd ভার্চুয়াল মেশিনটি বন্ধ করে দেয়, ভার্চুয়াল মেশিনের ডিস্কে করা যেকোনো পরিবর্তন রিসেট করে, ভার্চুয়াল মেশিনটি পুনরায় চালু করে এবং এর বুটিং শেষ না হওয়া পর্যন্ত অপেক্ষা করে। ইনস্ট্যান্সটি launch_cvd কে দেওয়া মূল ফ্ল্যাগগুলো সংরক্ষণ করে।
মাল্টি-টেন্যান্ট কনফিগারেশনে , powerwash_cvd ইনস্ট্যান্স গ্রুপের বাইরে থেকে একটিমাত্র ইনস্ট্যান্স রিস্টার্ট করে:
powerwash_cvd --instance_num=Nসমস্ত ডিভাইস রিসেট করুন
এক বা একাধিক ডিভাইস বন্ধ করতে এবং সেগুলোকে তাদের প্রাথমিক ডিস্ক অবস্থায় রিসেট করতে, চালান:
stop_cvdlaunch_cvd --resume=false
stop_cvd একটি অপরিচ্ছন্ন শাটডাউন সম্পাদন করে এবং ডিভাইসটিকে বন্ধ করে দেয়।
launch_cvd এর সাথে --resume=false যোগ করলে Cuttlefish পরবর্তী রান শুরু করার আগে পূর্ববর্তী ইনস্ট্যান্সের সাথে সম্পর্কিত সমস্ত ফাইল মুছে ফেলে। যেকোনো অতিরিক্ত launch_cvd ফ্ল্যাগ যোগ করা নিরাপদ।
মাল্টি-টেন্যান্ট কনফিগারেশনে , stop_cvd পুরো ইনস্ট্যান্স গ্রুপটিকে বন্ধ করে দেয়।
ডিভাইসগুলি পুনরায় চালু করুন
নিম্নলিখিত বিভাগগুলিতে ডিভাইসটিকে তার প্রাথমিক ডিস্ক অবস্থায় রিসেট না করে পুনরায় চালু করার উপায়গুলি বর্ণনা করা হয়েছে।
পরিষ্কারভাবে পুনরায় চালু করুন
ডিভাইসটি সচল থাকা অবস্থায় এটিকে সম্পূর্ণভাবে রিস্টার্ট করতে, চালান:
adb reboot adb reboot ডিভাইসটিকে সম্পূর্ণ শাটডাউন প্রক্রিয়ার মধ্যে দিয়ে নিয়ে যায়, ডিস্কে পরিবর্তনগুলো সিঙ্ক করে এবং প্রসেসগুলো বন্ধ হওয়া নিশ্চিত করে। 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_cvdlaunch_cvd NEW_FLAG
stop_cvd restart_cvd মতোই একটি অপরিচ্ছন্ন শাটডাউন সম্পন্ন করে। এটি ডিভাইসটিকে একটি নিষ্ক্রিয় অবস্থায় রাখে, যা পরে অন্য কোনো launch_cvd কমান্ড দিয়ে আবার চালু করা যেতে পারে। restart_cvd এর মতোই, ডিস্কে লেখা ডেটা যদি পুরোপুরি সিঙ্ক না হয়, তবে তা স্থায়ী নাও হতে পারে। ডিস্কে নিরাপদে ডেটা সংরক্ষণ করতে, প্রথমে adb reboot চালান।
adb rebootstop_cvdlaunch_cvd NEW_FLAG
যদি launch_cvd ফ্ল্যাগের পরিবর্তনের ফলে ডিস্ক লেআউটে এমন কোনো পরিবর্তন আসে যা কপি-অন-রাইট ইমপ্লিমেন্টেশনের সাথে সামঞ্জস্যপূর্ণ নয়, তাহলে launch_cvd পুরোনো ডিস্ক পরিবর্তনগুলোকে উপেক্ষা করে এবং ডিস্কটিকে তার মূল অবস্থায় ফিরিয়ে আনে। ফ্ল্যাগগুলোর সম্পূর্ণ তালিকার জন্য, Flags দেখুন।
ওভারলে ছাড়াই চালান
কুইক-রিসেট সাপোর্ট বন্ধ করতে, চালান:
launch_cvd --use_overlay=false--use_overlay=false কাটলফিশ ডিস্ক ফাইলগুলিকে পঠনযোগ্য-লিখনযোগ্য হিসেবে গণ্য করে এবং পরিবর্তনগুলি সেই ফাইলগুলিতে ছড়িয়ে পড়ে।
--use_overlay=false এবং ডিফল্ট মানের মধ্যে পরিবর্তন করলে সামঞ্জস্যতার ত্রুটি দেখা দিতে পারে। পূর্ববর্তী ডিভাইসের অবস্থা জোরপূর্বক মুছে ফেলতে, চালান:
stop_cvdrm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly
কাটলফিশ ওভারলে সহ এবং ওভারলে ছাড়া ফ্লো-এর মধ্যে নিরাপদে রূপান্তর করতে পারে না, তাই এই পরিবর্তনটি কাটলফিশের সমস্ত ম্যানেজমেন্ট স্টেট মুছে দেয়। যদি এক্সটার্নাল ডিস্ক ফাইলগুলি পরিবর্তন করা হয় এবং পরে ওভারলে সহ পুনরায় ব্যবহার করা হয়, তবে পূর্ববর্তী পরিবর্তনগুলিকে বেসলাইন স্টেটের অংশ হিসাবে বিবেচনা করা হয়।
পতাকা
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