דיונון: הפעל מחדש ואיפוס

דף זה מתאר כיצד להפעיל מחדש ולאפס מכשירים וירטואליים של Cuttlefish. איפוס התקן Cuttlefish למצב הדיסק הראשוני שלו מכונה powerwashing בכלי שורת הפקודה.

בעת הפעלת זרימות עבודה אוטומטיות או ידניות עם מספר נהלים שונים, כגון חבילות בדיקה, איפוס מכשיר ה-Cuttlefish בין הליכים מבטיח שההתנהגות של כל הליך היא עצמאית. אם מצב הדיסק לא מאופס, הליך אחד יכול להשפיע על ההתנהגות של ההליך הבא.

הליכי האתחול והאיפוס המתוארים בדף זה מניח שיצרת התקן Cuttlefish והגדרת מצב מסוים בדיסק.

# 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

מנקודת התחלה זו, אתה יכול להשתמש בזרימות האתחול והאיפוס הבאות:

יישום איפוס מהיר של דיונון

Cuttlefish משתמש ביישום איפוס מהיר התלוי בהגנה על הדיסקים שמאחורי שכבות דיסק של qcow2 . כברירת מחדל, Cuttlefish מתייחסת לדיסקים המקוריים כקריאה בלבד ומשתמשת בשכבות-על כדי ללכוד כתבי דיסק.

עם זאת ישנם חסרונות לשימוש בשכבות-על העתק על כתיבה. יש לציין ששינויים חיצוניים בדיסקים הבסיסיים מפרים את התאימות עם שכבות-על קיימות וגורמים למצב דיסק לא עקבי. דיונון משחזר בכוח את שכבות העל כאשר הוא מזהה שינויים לא תואמים.

יצירה מחדש בכפייה של שכבות העל אינה רצויה כאשר מפתחים תכונה הדורשת לשמור חלק מהדיסק במצב אתחול מסוים תוך החלפת חלק אחר של הדיסק. לדוגמה, התקנת אפליקציה עם תצורת משתמש מסוימת ולאחר מכן החלפה שוב ושוב של הליבה כדי לבדוק את האינטראקציה בין האפליקציה לבין מבני קרנל שונים. במקרה זה, אולי כדאי להשבית את שכבות העל .

אפס מכשירים

הסעיפים הבאים מתארים דרכים לאיפוס התקן דיונון למצב הדיסק הראשוני שלו.

אפס מכשיר אחד

כדי לאפס מכשיר דיונון אחד למצב הדיסק הראשוני שלו, הפעל:

powerwash_cvd

powerwash_cvd מכבה את המכונה הוירטואלית, מאפס את כל השינויים שבוצעו בדיסק המכונה הווירטואלית, מפעיל מחדש את המכונה הווירטואלית וממתין עד שהוא מסיים את האתחול. המופע שומר על הדגלים המקוריים שניתנו ל- launch_cvd .

בתצורת ריבוי דיירים , powerwash_cvd מפעיל מחדש מופע בודד מתוך קבוצת המופעים:

powerwash_cvd --instance_num=N

אפס את כל המכשירים

כדי לעצור ולאפס התקן אחד או יותר למצב הדיסק הראשוני שלהם, הפעל:

stop_cvd
launch_cvd --resume=false

stop_cvd מבצע כיבוי לא נקי ומפסיק את המכשיר.

הוספת --resume=false ל- launch_cvd גורמת ל-Cuttlefish להרוס את כל הקבצים הקשורים למופע הרץ קודם לפני תחילת הריצה הבאה. זה בטוח להוסיף דגלים נוספים launch_cvd .

בתצורת ריבוי דיירים , stop_cvd מכבה את כל קבוצת המופעים.

הפעל מחדש מכשירים

הסעיפים הבאים מתארים דרכים להפעיל מחדש התקן מבלי לאפס את ההתקן למצב הדיסק הראשוני שלו.

הפעלה מחדש נקייה

כדי לבצע הפעלה מחדש נקייה של המכשיר כשהמכשיר מגיב, הפעל:

adb reboot

adb reboot מעביר את ההתקן בתהליך הכיבוי המלא, מסנכרן שינויים בדיסק ומוודא שהתהליכים נסגרים. תהליכי המארח של דיונון אינם מעורבים. הליך זה עלול להיות לא זמין אם המכשיר נכנס למצב רע ולא מגיב.

כדי לבצע הפעלה מחדש נקייה של מכשיר דיונון יחיד בתצורת ריבוי דיירים , ציין את המספר הסידורי של התקן היעד בעת הפעלת adb-reboot . אם לא צוין מכשיר יעד, adb לא מפעילה מחדש אף מכשיר.

adb -s SERIAL reboot

הפעלה מחדש לא נקייה

כדי לבצע הפעלה מחדש לא נקייה כשהמכשיר אינו מגיב, הפעל:

restart_cvd

restart_cvd מבצע כיבוי לא נקי על ידי כיבוי מיידי של התקן Cuttlefish. restart_cvd הוא המקבילה לניתוק וחיבור מחדש של הסוללה למכשיר פיזי. ייתכן שכתיבה בדיסק לא תימשך אם הן היו בתהליך. restart_cvd ממתין עד שהמכשיר יאתחל שוב במלואו לפני היציאה.

בתצורת ריבוי דיירים , restart_cvd מפעיל מחדש מופע בודד מתוך קבוצת המופעים. כדי לציין איזה מופע Cuttlefish להפעיל מחדש, השתמש בדגל instance_num .

restart_cvd --instance_num=N

אם לא נעשה שימוש --instance_num , מספר המופע כברירת מחדל הוא 1 .

הפעל מחדש באמצעות דגלי launch_cvd שונים

כדי לעצור מכשיר אחד או יותר ולהפעיל מחדש עם דגלי launch_cvd שונים, הרץ:

stop_cvd
launch_cvd NEW_FLAG

stop_cvd מבצע כיבוי לא נקי בדומה ל- restart_cvd . זה משאיר את המכשיר במצב רדום שניתן להפעיל אותו שוב מאוחר יותר עם פקודת launch_cvd אחרת. כמו ב- restart_cvd , ייתכן שכתיבה בדיסק לא תימשך אם הן לא מסונכרנות במלואן עם הדיסק. כדי לשמור נתונים בבטחה בדיסק, הפעל תחילה adb reboot .

adb reboot
stop_cvd
launch_cvd NEW_FLAG

אם שינויים בדגלי launch_cvd מאלצים שינוי בפריסת הדיסק שאינו תואם למימוש העתק-על-כתיבה, launch_cvd מתעלם משינויי הדיסק הישנים ומתאפס למצב הדיסק המקורי. לרשימה מלאה של דגלים, ראה דגלים .

הפעל ללא שכבת-על

כדי לבטל את הסכמתך לתמיכה באיפוס מהיר, הפעל:

launch_cvd --use_overlay=false

--use_overlay=false מתייחס לקבצי הדיסק של Cuttlefish כאל קריאה-כתיבה, והשינויים מופצים לתוך הקבצים האלה.

שינוי בין --use_overlay=false לבין ברירת המחדל עלול לגרום לשגיאות תאימות. כדי לנקות בכוח את מצב המכשיר הקודם, הפעל:

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

דיונון לא יכול לנווט בבטחה במעבר בין הזרימות עם ובלי שכבות-על, ולכן שינוי זה מוחק את כל מצבי הניהול של הדיונון. אם קבצי דיסק חיצוני משתנים ועושים בהם שימוש חוזר מאוחר יותר יחד עם שכבות, השינויים המוקדמים יותר נחשבים לחלק ממצב הבסיס.

דגלים

אתה יכול להוסיף ארגומנטים באמצעות דגלים בעת הפעלת מכשיר Cuttlefish באמצעות launch_cvd . עם זאת, עבור דגלים מסוימים ( דגלים שחייבים להישאר זהים ), אובדן נתונים יכול להתרחש אם דגלים משתנים בין פקודות launch_cvd . כדי להבטיח שלא יתרחש אובדן נתונים בעת הפעלת רצף של פקודות הכוללות launch_cvd , stop_cvd , ולאחר מכן launch_cvd שוב, השתמש באותם דגלים עבור כל פקודה launch_cvd . לדוגמה, אם הדגל הראשון launch_cvd כולל את הארגומנט --kernel_path= KERNEL_PATH , הפצת launch_cvd השנייה חייבת לכלול גם את אותו ארגומנט --kernel_path= KERNEL_PATH , או שכל שינוי במערכת הקבצים שבוצע לפני stop_cvd יאבד בהפעלת launch_cvd השנייה. גם הקובץ שאליו מתייחס KERNEL_PATH חייב להיות בעל אותו תוכן.

חלק מהדגלים בטוחים לשינוי בין קריאות launch_cvd . הסעיפים הבאים מפרטים את הדגלים שחייבים להישאר זהים כדי למנוע אובדן נתונים ודגלים שניתן לשנות בבטחה ללא אובדן נתונים. לפרטים על דגלים בודדים, עיין במקור ( flags.cc , disk_flags.cc ) או הפעל launch_cvd --help .

דגלים שחייבים להישאר זהים

דגלים אלה חייבים להישאר זהים מהפעלת launch_cvd אחת לאחרת כדי למנוע אובדן נתונים:

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

דגלים שיכולים להשתנות

דגלים אלה ניתנים לשינוי בבטחה בין קריאות launch_cvd מבלי לגרום לאובדן נתונים:

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