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 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ırlanmamışsa bir prosedür, sonraki prosedürün davranışını etkileyebilir.
Bu sayfada açıklanan yeniden başlatma ve sıfırlama prosedürlerinde, bir Cuttlefish cihazı oluşturduğunuz ve diskte bazı durumlar ayarladığınız 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 yanıt veriyorsa
adb reboot
kullanarak temiz bir yeniden başlatma işlemi gerçekleştirin. - Cihaz yanıt vermiyorsa
restart_cvd
kullanarak temiz olmayan bir yeniden başlatma işlemi gerçekleştirin. powerwash_cvd
kullanarak cihaz durumunu sıfırlayın.- Cihazı durdurun ve
launch_cvd
bağımsız değişkenlerini cihaz durumunu koruyarak veya cihaz durumunu zorla temizleyerek değiştirin.
Cuttlefish'te hızlı sıfırlama uygulama
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 ele alır ve disk yazma işlemlerini yakalamak için katmanları 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 katmanlarla uyumluluğu bozar ve tutarsız bir disk durumuna neden olur. Cuttlefish, uyumsuz değişiklikler algıladığında katmanları zorunlu olarak yeniden oluşturur.
Diskin bir bölümünün belirli bir başlatılmış durumda tutulmasını ve diskin farklı bir bölümünün değiştirilmesini gerektiren bir özellik geliştirirken katmanların zorla yeniden oluşturulması istenmez. Ö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ını 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 şunu ç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şleminin tamamlanmasını bekler. Örnek, launch_cvd
için verilen orijinal işaretleri korur.
Çok kiracılı yapılandırmada,
powerwash_cvd
örnek grubu içindeki tek bir örneği yeniden başlatır:
powerwash_cvd --instance_num=N
Tüm cihazları sıfırlama
Bir veya daha fazla cihazı durdurmak ve ilk disk durumlarına sıfırlamak için şu komutu çalıştırın:
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
eklenmesi, Cuttlefish'in bir sonraki çalıştırmayı başlatmadan önce daha önce çalışan örnekle ilgili tüm dosyaları yok etmesini sağlar. Ek launch_cvd
işaretleri ekleyebilirsiniz.
Çok kiracılı yapılandırmada,ß
stop_cvd
tüm örnek grubu kapatır.
Cihazları yeniden başlatın
Aşağıdaki bölümlerde, cihazı 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, diskteki değişiklikleri senkronize eder ve işlemlerin kapatılmasını sağlar. Cuttlefish 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ı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 şunu çalıştırın:
restart_cvd
restart_cvd
, Cuttlefish cihazını anında kapatarak temiz olmayan bir kapatma işlemi gerçekleştirir. restart_cvd
, pilin fiziksel bir cihazla bağlantısını kesip yeniden bağlamaya eşdeğerdir. Devam eden disk yazma işlemleri kalıcı olmayabilir. restart_cvd
, çıkmadan önce cihazın tamamen yeniden başlatılmasını bekler.
Çok kiracılı yapılandırmada,
restart_cvd
örnek grubu içindeki 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ş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 işlemi gerçekleştiriyor. Bu işlem, cihazı daha sonra farklı bir launch_cvd
komutuyla yeniden başlatılabilecek uyku durumuna geçirir. restart_cvd
ile 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şaretlerindeki değişiklikler, diskin düzeninde yazarken kopyalama uygulamasıyla uyumlu olmayan bir değişikliğe neden olursa launch_cvd
, eski disk değişikliklerini yoksayar ve orijinal disk durumuna sıfırlar. İşaretlerin tam listesi için İşaretler başlıklı makaleyi inceleyin.
Yer paylaşımı 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, akışlar arasında güvenli bir şekilde geçiş yapamaz. Bu nedenle, bu değişiklik tüm Cuttlefish yönetim durumunu siler. Harici disk dosyaları değiştirilirse 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
komutlarını içeren bir komut dizisi çalıştırılırken veri kaybı olmaması için her launch_cvd
komutunda aynı işaretleri kullanın. Örneğin, ilk launch_cvd
işaretinde --kernel_path=KERNEL_PATH
bağımsız değişkeni varsa ikinci launch_cvd
çağırma işleminde de aynı --kernel_path=KERNEL_PATH
bağımsız değişkeni olmalıdır. Aksi takdirde, stop_cvd
tarihinden önce yapılan dosya sistemi değişiklikleri ikinci launch_cvd
çağırma işleminde kaybolur. KERNEL_PATH
tarafından referans verilen dosya da aynı içeriğe sahip olmalıdır.
Bazı işaretler, launch_cvd
çağrıları arasında değiştirilebilir. 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. Tek tek 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, 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