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ı ilk disk durumuna sıfırlama işlemi, komut satırı aracında powerwash olarak adlandırılır.

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

Bu sayfada açıklanan yeniden başlatma ve sıfırlama prosedürleri, bir Cuttlefish cihazı oluşturduğunuzu ve diskte bazı durumlar ayarladığınızı 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 itibaren aşağıdaki yeniden başlatma ve sıfırlama akışlarını kullanabilirsiniz:

Cuttlefish hızlı sıfırlama uygulaması

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

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

Diskin farklı bir bölümünü değiştirirken diskin bir bölümünü belirli bir başlatılmış durumda tutmayı gerektiren bir özellik geliştirirken yer paylaşımlarını zorla yeniden oluşturmak istenmeyen bir durumdur. Örneğin, belirli bir kullanıcı yapılandırmasıyla uygulama yükleme ve 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, bir Cuttlefish cihazı ilk disk durumuna sıfırlamanın yolları açıklanmaktadır.

Bir cihazı sıfırlama

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

powerwash_cvd

powerwash_cvd, sanal makineyi kapatır, sanal makine diskinde yapılan değişiklikleri sıfırlar, sanal makineyi yeniden başlatır ve başlatma işlemi tamamlanana kadar bekler. Örnek, launch_cvd için verilen orijinal işaretleri korur.

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

powerwash_cvd --instance_num=N

Tüm cihazları sıfırla

Bir veya daha fazla cihazı durdurup ilk disk durumlarına sıfırlamak için şu komutu çalıştırın:

stop_cvd
launch_cvd --resume=false

stop_cvd düzgün olmayan bir şekilde kapatılır ve cihaz durdurulur.

launch_cvd komutuna --resume=false eklediğinizde Cuttlefish, bir sonraki çalıştırmayı başlatmadan önce daha önce çalışan örnekle ilgili tüm dosyaları siler. Başka launch_cvd işaretleri ekleyebilirsiniz.

Çok kiracılı 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 veriyorken cihazı 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ılmasını sağlar. Cuttlefish ana makine işlemleri dahil değildir. Cihaz kötü bir duruma girip yanıt vermez hale geldiyse bu prosedür kullanılamayabilir.

Çok kiracılı yapılandırmada tek bir Cuttlefish cihazını temiz bir şekilde yeniden başlatmak için adb-reboot komutunu ç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

Temiz olmayan yeniden başlatma

Cihaz yanıt vermediğinde temiz olmayan bir yeniden başlatma işlemi gerçekleştirmek için şu komutu çalıştırın:

restart_cvd

restart_cvd, Cuttlefish cihazını anında kapatarak düzgün olmayan bir kapatma işlemi gerçekleştirir. restart_cvd, fiziksel bir cihazın pilinin çıkarılıp yeniden takılmasıyla aynıdır. Devam eden disk yazma işlemleri kalıcı olmayabilir. restart_cvd, çıkış yapmadan önce cihazın tamamen yeniden başlatılmasını bekler.

Çok kiracılı yapılandırmada, restart_cvd örnek grubundaki tek bir örneği yeniden başlatır. Yeniden başlatılacak Cuttlefish örneğini 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ı durdurup 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'ye benzer şekilde temiz olmayan bir kapatma işlemi gerçekleştirir. Cihazı, daha sonra farklı bir launch_cvd komutuyla yeniden başlatılabilecek şekilde uyku durumuna geçirir. restart_cvd'da olduğu gibi, diske tam olarak senkronize edilmezse disk yazma işlemleri kalıcı olmayabilir. Verileri diske güvenli bir şekilde kaydetmek için önce adb reboot komutunu ç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ılıyorsa launch_cvd, eski disk değişikliklerini yok sayar ve orijinal disk durumuna sıfırlanır. İşaretlerin tam listesi için İşaretler bölümüne bakın.

Pencere olmadan çalıştırma

Hızlı sıfırlama desteğini devre dışı bırakmak için şu komutu çalıştırın:

launch_cvd --use_overlay=false

--use_overlay=false, Cuttlefish disk dosyalarını okuma/yazma olarak değerlendirir ve değişiklikler bu dosyalara yayılır.

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

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

Cuttlefish, katmanlı ve katmansız akışlar arasındaki geçişi güvenli bir şekilde gerçekleştiremediğinden bu değişiklik, tüm Cuttlefish 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şaretleri kullanarak bağımsız değişkenler ekleyebilirsiniz. Ancak belirli işaretler (aynı kalması gereken işaretler) 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 komutunu içeren bir komut dizisi çalıştırırken veri kaybı olmaması için her launch_cvd komutunda aynı işaretleri kullanın. Örneğin, ilk launch_cvd işareti --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 öncesinde yapılan tüm 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ı işaretleri launch_cvd çağrıları arasında değiştirmek güvenlidir. Aşağıdaki bölümlerde, veri kaybını önlemek için aynı kalması gereken işaretler ve veri kaybı olmadan güvenli bir şekilde değiştirilebilecek işaretler listelenmiştir. Ayrı ayrı işaretler hakkında 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ştirilebilen işaretler

Bu işaretler, veri kaybına neden olmadan launch_cvd çağrıları arasında güvenle 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
  • --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