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 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 itibaren aşağıdaki yeniden başlatma ve sıfırlama akışlarını kullanabilirsiniz:
- Cihaz duyarlıysa
adb reboot
aracını kullanarak temiz bir yeniden başlatma işlemi gerçekleştirin. - 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ü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