Mürekkepbalığı: Yeniden başlatma ve sıfırlama

Bu sayfada, Cuttlefish sanal cihazlarının nasıl yeniden başlatılacağı ve sıfırlanacağı açıklanmaktadır. Cuttlefish cihazını ilk disk durumuna sıfırlama işlemine komut satırı aracında powerwash adı verilir.

Test paketleri gibi birden fazla farklı prosedür içeren otomatik veya manuel iş akışları çalıştırırken, Cuttlefish cihazını prosedürler arasında sıfırlamak her prosedürün davranışının bağımsız olmasını sağlar. Disk durumu sıfırlanmazsa bir işlem, sonraki işlemin davranışını etkileyebilir.

Bu sayfada açıklanan yeniden başlatma ve sıfırlama prosedürleri, bir Cuttlefish cihazı oluşturduğunuzu ve diskte bir durum belirlediğinizi varsayar.

# 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

Bu başlangıç noktasından aşağıdaki yeniden başlatma ve sıfırlama akışlarını kullanabilirsiniz:

Mürekkepbalığı hızlı sıfırlama uygulaması

Cuttlefish, qcow2 disk yer paylaşımlarının arkasındaki diskleri korumaya bağlı olan hızlı sıfırlama uygulamasını kullanır. Cuttlefish varsayılan olarak orijinal diskleri salt okunur olarak değerlendirir ve disk yazma işlemlerini yakalamak için yer paylaşımlarını kullanır.

Ancak yazma sırasında kopyalama yer paylaşımlarının bazı dezavantajları vardır. Özellikle, temel disklerde yapılan harici değişiklikler mevcut yer paylaşımlarıyla uyumluluğu bozar ve disk durumunun tutarsız olmasına neden olur. Cuttlefish, uyumlu olmayan değişiklikler algıladığında yer paylaşımlarını zorla yeniden oluşturur.

Diskin bir bölümünü belirli bir başlatılmış durumda tutarken diskin farklı bir bölümünü değiştirmeyi gerektiren bir özellik geliştirilirken yer paylaşımlarını zorla yeniden oluşturmak istenmez. Örneğin, belirli bir kullanıcı yapılandırmasıyla bir uygulama yükleyip ardından uygulama ile farklı çekirdek derlemeleri arasındaki etkileşimi test etmek için çekirdeği tekrar tekrar değiştirme. Bu durumda, yer paylaşımlarını devre dışı bırakmak faydalı olabilir.

Cihazları sıfırlama

Aşağıdaki bölümlerde, Cuttlefish cihazının başlangıç disk durumuna nasıl sıfırlanacağı açıklanmaktadır.

Bir cihazı sıfırlama

Bir Cuttlefish cihazını ilk disk durumuna sıfırlamak için:

powerwash_cvd

powerwash_cvd, sanal makineyi kapatır, sanal makine diskinde yapılan tüm değişiklikleri sıfırlar, sanal makineyi yeniden başlatır ve önyüklemenin tamamlanmasını bekler. Örnek, launch_cvd öğesine verilen orijinal işaretleri korur.

Çok kiracılı bir yapılandırmada powerwash_cvd, örnek grubundan tek bir örneği yeniden başlatır:

powerwash_cvd --instance_num=N

Tüm cihazları sıfırlama

Bir veya daha fazla cihazı durdurup ilk disk durumlarına sıfırlamak için:

stop_cvd
launch_cvd --resume=false

stop_cvd, temiz olmayan bir kapatma işlemi gerçekleştirir ve cihazı durdurur.

--resume=false değerini launch_cvd değerine eklediğinizde Cuttlefish, bir sonraki çalıştırmayı başlatmadan önce daha önce çalışan örnekle ilgili tüm dosyaları siler. Ek launch_cvd işaretleri eklemek güvenlidir.

Çok kiracılı bir yapılandırmada stop_cvd, tüm örnek grubunu kapatır.

Cihazları yeniden başlatın

Aşağıdaki bölümlerde, cihazı ilk disk durumuna sıfırlamadan yeniden başlatma yöntemleri açıklanmaktadır.

Temiz yeniden başlatma

Cihaz yanıt verdiğinde cihazı temiz bir şekilde yeniden başlatmak için şunları çalıştırın:

adb reboot

adb reboot, cihazı tam kapatma prosedüründen geçirir, değişiklikleri diske senkronize eder ve işlemlerin kapatıldığından emin olur. Ahtapot ana makine işlemleri dahil değildir. Cihaz kötü bir duruma girmişse ve yanıt vermiyorsa bu prosedür kullanılamayabilir.

Çok kiracı yapılandırmasında tek bir Cuttlefish cihazını temiz bir şekilde yeniden başlatmak için adb-reboot'i çalıştırırken hedef cihazın seri numarasını belirtin. Hedef cihaz belirtilmezse adb hiçbir cihazı yeniden başlatmaz.

adb -s SERIAL reboot

Düzensiz yeniden başlatma

Cihaz yanıt vermediğinde temiz olmayan bir yeniden başlatma yapmak için şunları çalıştırın:

restart_cvd

restart_cvd, Mürekkep Balığı cihazını anında kapatarak temiz olmayan bir kapatma işlemi gerçekleştirir. restart_cvd, pilin fiziksel bir cihazdan çıkarılıp yeniden bağlanmasına eşdeğerdir. Devam eden disk yazma işlemleri devam etmeyebilir. restart_cvd, çıkmadan önce cihazın tekrar tamamen başlatılmasını bekler.

Çok kiracılı bir yapılandırmada, restart_cvd örnek grubundan tek bir örneği yeniden başlatır. Hangi Cuttlefish örneğinin yeniden başlatılacağını belirtmek için instance_num işaretini kullanın.

restart_cvd --instance_num=N

--instance_num kullanılmazsa örnek numarası varsayılan olarak 1 olur.

Farklı launch_cvd işaretlerini kullanarak yeniden başlatma

Bir veya daha fazla cihazı durdurmak ve farklı launch_cvd işaretleriyle yeniden başlatmak için şu komutu çalıştırın:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd, restart_cvd'a benzer şekilde temiz olmayan bir kapatma gerçekleştirir. Cihaz, daha sonra farklı bir launch_cvd komutuyla tekrar başlatılabilecek uykuda bir durumda bırakılır. restart_cvd ile olduğu gibi, diske tam olarak senkronize edilmeyen disk yazma işlemleri devam etmeyebilir. Verileri diske güvenli bir şekilde kaydetmek için önce adb reboot'ü çalıştırın.

adb reboot
stop_cvd
launch_cvd NEW_FLAG

launch_cvd işaretlerinde yapılan değişiklikler, disk düzeninde yazma sırasında kopyalama uygulamasıyla uyumlu olmayan bir değişiklik yapılmasını gerektirirse launch_cvd eski disk değişikliklerini yoksayıp orijinal disk durumuna sıfırlanır. İşaretçilerin tam listesi için İşaretçiler bölümüne bakın.

Yer paylaşımı olmadan çalıştırma

Hızlı sıfırlama desteğini devre dışı bırakmak için:

launch_cvd --use_overlay=false

--use_overlay=false, Cuttlefish disk dosyalarını salt okunur olarak değerlendirir ve değişiklikler bu dosyalara dağıtılır.

--use_overlay=false ile varsayılan arasında geçiş yapmak uyumluluk hatalarına neden olabilir. Önceki cihaz durumunu zorla temizlemek için şunları çalıştırın:

stop_cvd
rm $HOME/cuttlefish $HOME/cuttlefish_runtime $HOME/cuttlefish_assembly

Mürekkepbalığı, yer paylaşımlı ve yer paylaşımsız akışlar arasındaki geçişte güvenli bir şekilde gezinemediğinden bu değişiklik, tüm Mürekkepbalığı yönetim durumunu siler. Harici disk dosyaları değiştirilir ve daha sonra yer paylaşımlarıyla birlikte yeniden kullanılırsa önceki değişiklikler, temel durumun bir parçası olarak kabul edilir.

Bayraklar

launch_cvd kullanarak bir Cuttlefish cihazı başlatırken işaretçileri kullanarak bağımsız değişkenler ekleyebilirsiniz. Ancak belirli işaretler (Aynı kalmalıdır) için işaretler launch_cvd komutları arasında değiştirilirse veri kaybı yaşanabilir. launch_cvd, stop_cvd ve ardından tekrar launch_cvd içeren bir komut dizisi çalıştırırken veri kaybı yaşanmaması için her launch_cvd komutu için aynı işaretleri kullanın. Örneğin, ilk launch_cvd işaretçisi --kernel_path=KERNEL_PATH bağımsız değişkenini içeriyorsa ikinci launch_cvd çağrısı da aynı --kernel_path=KERNEL_PATH bağımsız değişkenini içermelidir. Aksi takdirde, stop_cvd'den önce yapılan dosya sistemi değişiklikleri ikinci launch_cvd çağrısında kaybolur. KERNEL_PATH tarafından referans verilen dosyanın da aynı içeriğe sahip olması gerekir.

Bazı işaretlerin launch_cvd çağrıları arasında değiştirilmesi güvenlidir. Aşağıdaki bölümlerde, veri kaybını önlemek için aynı kalması gereken işaretçiler ve veri kaybı olmadan güvenli bir şekilde değiştirilebilecek işaretçiler listelenmiştir. Bayraklarla ilgili ayrıntılı bilgi için kaynağa ( flags.cc , disk_flags.cc ) bakın veya launch_cvd --help komutunu çalıştırın.

Aynı kalması gereken işaretler

Veri kaybını önlemek için bu işaretler bir launch_cvd çağrısından diğerine aynı kalmalıdır:

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

Değişebilecek işaretler

Aşağıdaki işaretçiler, launch_cvd çağrıları arasında veri kaybına neden olmadan güvenli bir şekilde değiştirilebilir:

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