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ı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 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'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ırmadastop_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