דף זה מתאר כיצד להפעיל מחדש ולאפס מכשירים וירטואליים של Cuttlefish. איפוס התקן Cuttlefish למצב הדיסק הראשוני שלו מכונה powerwashing בכלי שורת הפקודה.
בעת הפעלת זרימות עבודה אוטומטיות או ידניות עם מספר נהלים שונים, כגון חבילות בדיקה, איפוס מכשיר ה-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 משתמש ביישום איפוס מהיר התלוי בהגנה על הדיסקים שמאחורי שכבות דיסק של 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