Mürekkepbalığı: Yeniden başlat ve sıfırla

Bu sayfada Mürekkepbalığı sanal cihazlarının nasıl yeniden başlatılacağı ve sıfırlanacağı açıklanmaktadır. Mürekkepbalığı aygıtının başlangıç ​​disk durumuna sıfırlanması, komut satırı aracında güçlü yıkama olarak adlandırılır.

Test takımları gibi birden fazla farklı prosedürle otomatik veya manuel iş akışları çalıştırırken, Mürekkepbalığı cihazının prosedürler arasında sıfırlanması, her prosedürün davranışının bağımsız olmasını sağlar. Disk durumu sıfırlanmazsa, bir prosedür aşağıdaki prosedürün davranışını etkileyebilir.

Bu sayfada açıklanan yeniden başlatma ve sıfırlama prosedürleri, bir Mürekkepbalığı aygıtı 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:

Mürekkep balığı hızlı sıfırlama uygulaması

Mürekkepbalığı, qcow2 disk kaplamalarının arkasındaki diskleri korumaya dayalı bir hızlı 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 kaplamaları kullanır.

Ancak yazarken kopyala kaplamalarını kullanmanın dezavantajları vardır. Özellikle, temel disklerde yapılan harici değişiklikler mevcut kaplamalarla uyumluluğu bozar ve tutarsız bir disk durumuna neden olur. Mürekkep balığı uyumsuz değişiklikler tespit ettiğinde kaplamaları zorla yeniden oluşturur.

Diskin farklı bir kısmını değiştirirken diskin bir kısmını belirli bir başlatılmış durumda tutmayı gerektiren bir özellik geliştirilirken kaplamaların zorla yeniden oluşturulması istenmeyen bir durumdur. Örneğin, belirli bir kullanıcı yapılandırmasına sahip bir uygulama yüklemek ve ardından uygulama ile farklı çekirdek yapıları arasındaki etkileşimi test etmek için çekirdeği tekrar tekrar değiştirmek. Bu durumda kaplamaları devre dışı bırakmak faydalı olabilir.

Cihazları sıfırla

Aşağıdaki bölümlerde Mürekkep Balığı aygıtını başlangıç ​​disk durumuna sıfırlamanın yolları açıklanmaktadır.

Bir cihazı sıfırla

Bir Mürekkep Balığı aygıtını başlangıç ​​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 önyüklemenin tamamlanmasını bekler. Örnek, launch_cvd 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ırla

Bir veya daha fazla cihazı durdurmak ve başlangıç ​​disk durumlarına sıfırlamak için şunu çalıştırın:

stop_cvd
launch_cvd --resume=false

stop_cvd kirli bir kapatma gerçekleştirir ve cihazı durdurur.

launch_cvd dosyasına --resume=false eklenmesi Cuttlefish'in bir sonraki çalıştırmaya başlamadan önce önceden çalışan örnekle ilgili tüm dosyaları yok etmesini sağlar. İlave launch_cvd işaretlerini eklemek güvenlidir.

Çok kiracılı bir yapılandırmada stop_cvd , örnek grubunun tamamını kapatır.

Cihazları yeniden başlat

Aşağıdaki bölümlerde, aygıtı başlangıç ​​disk durumuna sıfırlamadan aygıtı yeniden başlatmanın yolları açıklanmaktadır.

Temiz yeniden başlatma

Cihaz yanıt verdiğinde cihazı temiz bir şekilde yeniden başlatmak için şunu ç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ığı ana bilgisayar işlemleri dahil değildir. Aygıtın kötü bir duruma girmesi ve yanıt vermemesi durumunda bu prosedür kullanılamayabilir.

Çok kiracılı bir yapılandırmada tek bir Mürekkepbalığı cihazının temiz bir şekilde yeniden başlatılmasını sağlamak için, adb-reboot ç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 kirli bir yeniden başlatma gerçekleştirmek için şunu çalıştırın:

restart_cvd

restart_cvd Mürekkepbalığı aygıtını anında kapatarak kirli bir kapatma gerçekleştirir. restart_cvd , pilin fiziksel bir cihazla bağlantısını kesip yeniden bağlamaya eşdeğerdir. Disk yazma işlemleri devam ediyorsa devam etmeyebilir. restart_cvd çıkmadan önce cihazın tamamen yeniden 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 Mürekkepbalığı örneğinin yeniden başlatılacağını belirtmek için instance_num bayrağını kullanın.

restart_cvd --instance_num=N

--instance_num kullanılmazsa örnek numarası varsayılan olarak 1 olur.

Farklı launch_cvd bayraklarını kullanarak yeniden başlatın

Bir veya daha fazla cihazı durdurmak ve farklı launch_cvd işaretleriyle yeniden başlatmak için şunu çalıştırın:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd restart_cvd benzer şekilde temiz olmayan bir kapatma işlemi gerçekleştirir. Cihazı, daha sonra farklı bir launch_cvd komutuyla yeniden başlatılabilecek şekilde hareketsiz bir durumda bırakır. restart_cvd olduğu gibi, disk yazma işlemleri diskle tam olarak senkronize edilmezse 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 bayraklarında yapılan değişiklikler disk düzeninde yazma üzerine kopyalama uygulamasıyla uyumsuz bir değişikliği zorunlu kılarsa launch_cvd eski disk değişikliklerini yok sayar ve orijinal disk durumuna sıfırlanır. Bayrakların tam listesi için bkz. Bayraklar .

Kaplama olmadan çalıştır

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

launch_cvd --use_overlay=false

--use_overlay=false Mürekkepbalığı 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 değişiklik yapmak uyumluluk hatalarına neden olabilir. Önceki cihaz durumunu zorla temizlemek için şunu çalıştırın:

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

Mürekkep balığı, kaplamalı ve kaplamasız akışlar arasındaki geçişte güvenli bir şekilde gezinemez; dolayısıyla bu değişiklik, Mürekkepbalığı yönetim durumunun tamamını siler. Harici disk dosyaları değiştirilirse ve daha sonra katmanlarla birlikte yeniden kullanılırsa, önceki değişiklikler temel durumun bir parçası olarak kabul edilir.

Bayraklar

Bir Mürekkepbalığı cihazını launch_cvd kullanarak başlatırken bayrakları kullanarak bağımsız değişkenler ekleyebilirsiniz. Ancak belirli bayraklar için ( aynı kalması gereken bayraklar ), launch_cvd komutları arasında bayraklar değiştirilirse veri kaybı meydana gelebilir. launch_cvd , stop_cvd ve ardından tekrar launch_cvd içeren komut dizisini çalıştırırken veri kaybı yaşanmamasını sağlamak amacıyla, her launch_cvd komutu için aynı işaretleri kullanın. Örneğin, ilk launch_cvd bayrağı --kernel_path= KERNEL_PATH argümanını içeriyorsa, ikinci launch_cvd çağrısı da aynı --kernel_path= KERNEL_PATH argümanını içermelidir, aksi takdirde stop_cvd önce yapılan dosya sistemi değişiklikleri ikinci launch_cvd çağrısında kaybolur. KERNEL_PATH tarafından başvurulan dosyanın da aynı içeriğe sahip olması gerekir.

Bazı bayrakların 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 bayraklar ve veri kaybı olmadan güvenli bir şekilde değiştirilebilen bayraklar listelenmektedir. Bireysel bayraklarla ilgili ayrıntılar için kaynağa bakın ( flags.cc , disk_flags.cc ) veya launch_cvd --help çalıştırın.

Aynı kalması gereken bayraklar

Veri kaybını önlemek için bu bayrakların bir launch_cvd çağrısından diğerine aynı kalması gerekir:

  • --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 bayraklar

Bu bayraklar, 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