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 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
Bu başlangıç noktasından aşağıdaki yeniden başlatma ve sıfırlama akışlarını kullanabilirsiniz:
- Cihaz yanıt veriyorsa
adb reboot
düğmesini kullanarak temiz bir yeniden başlatma yapın. - Cihaz yanıt vermiyorsa
restart_cvd
tuşunu kullanarak temiz olmayan bir yeniden başlatma gerçekleştirin. powerwash_cvd
simgesini kullanarak cihaz durumunu sıfırlayın.- Cihazı durdurun ve cihaz durumunu koruyarak veya cihaz durumunu zorla temizleyerek
launch_cvd
bağımsız değişkenlerini değiştirin.
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