בדף הזה מוסבר איך להפעיל מחדש ולאפס מכשירים וירטואליים של Cuttlefish. איפוס מכשיר Cuttlefish למצב הדיסק הראשוני נקרא Powerwash בכלי שורת הפקודה.
כשמריצים תהליכי עבודה אוטומטיים או ידניים עם כמה פרוצדורות שונות, כמו חבילות בדיקה, איפוס מכשיר Cuttlefish בין הפרוצדורות מבטיח שההתנהגות של כל פרוצדורה תהיה עצמאית. אם מצב הדיסק לא מאופס, הליך אחד יכול להשפיע על ההתנהגות של ההליך הבא.
ההנחיות להפעלה מחדש ולאיפוס שמתוארות בדף הזה מניחות שיצרתם מכשיר Cuttlefish והגדרתם מצב מסוים בדיסק.
# 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
מנקודת ההתחלה הזו, אפשר להשתמש בתהליכי ההפעלה מחדש והאיפוס הבאים:
- אם המכשיר מגיב, מבצעים הפעלה מחדש נקייה באמצעות
adb reboot
. - אם המכשיר לא מגיב, מבצעים הפעלה מחדש לא נקייה באמצעות
restart_cvd
. - מאפסים את מצב המכשיר באמצעות
powerwash_cvd
. - לעצור את המכשיר ולשנות את הארגומנטים של
launch_cvd
תוך שמירה על מצב המכשיר או ניקוי בכוח של מצב המכשיר.
הטמעה של איפוס מהיר ב-Cuttlefish
ב-Cuttlefish נעשה שימוש בהטמעה של איפוס מהיר שתלויה בהגנה על הדיסקים מאחורי שכבות-על של דיסקים מסוג qcow2. כברירת מחדל, Cuttlefish מתייחס לדיסקים המקוריים כאל דיסקים לקריאה בלבד, ומשתמש בשכבות-על כדי לתעד כתיבה לדיסקים.
עם זאת, יש חסרונות לשימוש בשכבות-על של העתקה בעת כתיבה. חשוב לציין ששינויים חיצוניים בדיסקים הבסיסיים פוגעים בתאימות לשכבות-על קיימות וגורמים למצב לא עקבי של הדיסק. Cuttlefish יוצר מחדש את שכבות העל בכוח כשהוא מזהה שינויים לא תואמים.
יצירה מחדש בכוח של שכבות-על היא לא רצויה כשמפתחים תכונה שנדרש בה לשמור חלק מהדיסק במצב אתחול מסוים, תוך החלפה של חלק אחר בדיסק. לדוגמה, התקנת אפליקציה עם הגדרת משתמש מסוימת ואז החלפה חוזרת של ליבת מערכת ההפעלה כדי לבדוק את האינטראקציה בין האפליקציה לבין גרסאות שונות של ליבת מערכת ההפעלה. במקרה כזה, כדאי להשבית את שכבות העל.
איפוס מכשירים
בקטעים הבאים מתוארות דרכים לאפס מכשיר Cuttlefish למצב הדיסק הראשוני שלו.
איפוס של מכשיר אחד
כדי לאפס מכשיר 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
flags.
בהגדרה של ריבוי דיירים,הפקודה ß
stop_cvd
משביתה את כל קבוצת המופעים.
הפעלה מחדש של מכשירים
בקטעים הבאים מוסבר איך להפעיל מחדש מכשיר בלי לאפס אותו למצב הדיסק הראשוני.
הפעלה מחדש עם ניקוי
כדי לבצע הפעלה מחדש נקייה של המכשיר כשהוא מגיב, מריצים את הפקודה:
adb reboot
adb reboot
מעביר את המכשיר את כל תהליך הכיבוי, מסנכרן את השינויים בדיסק ומוודא שהתהליכים נסגרים. לא מעורבים תהליכים של מארח Cuttlefish. יכול להיות שההליך הזה לא יהיה זמין אם המכשיר נכנס למצב לא תקין ולא מגיב.
כדי לבצע הפעלה מחדש נקייה של מכשיר Cuttlefish יחיד בהגדרה של ריבוי דיירים, צריך לציין את המספר הסידורי של מכשיר היעד כשמריצים את הפקודה 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 אין אפשרות לעבור בבטחה בין התהליכים עם שכבות-על ובלעדיהן, ולכן השינוי הזה מוחק את כל מצב הניהול של Cuttlefish. אם קבצים בדיסק חיצוני משתנים ונעשה בהם שימוש חוזר מאוחר יותר יחד עם שכבות-על, השינויים הקודמים נחשבים לחלק ממצב הבסיס.
דגלים
אפשר להוסיף ארגומנטים באמצעות דגלים כשמפעילים מכשיר 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