Mürekkep balığı: Yeniden başlat ve sıfırla

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ürlerinde, bir Mürekkep balığı cihazı oluşturduğunuz ve disk üzerinde bir durum belirlediğiniz varsayılır.

# 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 itibaren aşağıdaki yeniden başlatma ve sıfırlama akışlarını kullanabilirsiniz:

Mürekkep balığı hızlı sıfırlama uygulaması

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

Bununla birlikte, yazma üzerinde kopyalama yer paylaşımını kullanmanın dezavantajları vardır. Temel disklerde yapılan harici değişikliklerin, mevcut yer paylaşımları ile uyumluluğu bozup tutarsız disk durumuna neden olması özellikle dikkat çekicidir. Mürekkep balığı, uyumsuz değişiklikler algıladığında yer paylaşımlarını zorla yeniden oluşturur.

Diskin bir parçasını değiştirirken diskin bir bölümünü başlatılmış belirli bir durumda tutmayı gerektiren bir özellik geliştirirken bindirmelerin zorla yeniden oluşturulması istenmeyen bir durumdur. Ö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ırla

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

Tek bir cihazı sıfırlama

Bir Cuttlefish cihazını ilk disk durumuna sıfırlamak için aşağıdaki komutu çalıştırın:

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.

launch_cvd öğesine --resume=false eklendiğinde Mürekkep balığı bir sonraki çalıştırmaya başlamadan önce çalışan örnekle ilgili tüm dosyaları yok eder. Başka launch_cvd işaretleri de eklenebilir.

Çok kiracılı yapılandırmada stop_cvd, örnek grubunun tamamını kapatır.

Cihazları yeniden başlatın

Aşağıdaki bölümlerde, cihazı başlangıç disk durumuna sıfırlamadan yeniden başlatmanın yolları açıklanmaktadır.

Temiz yeniden başlatma

Cihaz yanıt verdiğinde temiz bir şekilde yeniden başlatmak için şu komutu ç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. Mürekkep balığı barındırma süreçleri buna dahil değildir. Cihaz kötü bir duruma girdi 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, Cuttlefish cihazını anında kapatarak temiz olmayan bir kapanış işlemi gerçekleştirir. restart_cvd, pilin fiziksel bir cihazdan çıkarılıp yeniden bağlanmasına eşdeğerdir. Disk yazma işlemleri devam ediyorsa 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şaretleri kullanarak yeniden başlat

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 benzeri olmayan bir kapatma işlemi gerçekleştiriyor. Cihazı hareketsiz durumda bırakır. Bu durum, daha sonra farklı bir launch_cvd komutuyla tekrar başlatılabilir. restart_cvd ürününde olduğu gibi, diske tam olarak senkronize edilmezse 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şikliği zorunlu kılarsa launch_cvd, eski disk değişikliklerini yoksayar ve orijinal disk durumuna sıfırlar. İş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 değer arasında değişiklik yapmak uyumluluk hatalarına neden olabilir. Önceki cihaz durumunu zorla temizlemek için şu komutu çalıştırın:

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

Mürekkep balığı, yer paylaşımı olan ve olmayan akışlar arasındaki geçişte güvenli bir şekilde geçiş yapamaz. Dolayısıyla bu değişiklik, tüm Mürekkep balığı 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 duruma dahil edilir.

Bayraklar

Bir Cuttlefish cihazını başlatırken launch_cvd kullanarak bayraklar kullanarak bağımsız değişkenler ekleyebilirsiniz. Ancak belirli işaretler (Aynı kalmalıdır) için launch_cvd komutları arasında işaretler değiştirilirse veri kaybı yaşanabilir. launch_cvd, stop_cvd ve ardından tekrar launch_cvd komutlarını içeren bir komut dizisini çalıştırırken veri kaybı yaşanmaması için her launch_cvd komutunda 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 dosya da aynı içeriğe sahip olmalıdır.

Bazı flag'ler launch_cvd çağrı arasında güvenle değiştirilebilir. 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. Bağımsız işaretlerle ilgili ayrıntılar 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 flag'ler, bir launch_cvd çağrısından sonraki çağrıya kadar 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ştirilebilen 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