בדף הזה מוסבר איך להפעיל מחדש ולאפס מכשירים וירטואליים של Cuttlefish. איפוס של מכשיר דיונון למצב הדיסק הראשוני שלו נקרא Powerwash בכלי שורת הפקודה.
כאשר מפעילים תהליכי עבודה אוטומטיים או ידניים עם מספר נהלים שונים, כמו בחבילות בדיקה, איפוס של מכשיר הדיונון בין הליכים מבטיח שההתנהגות של כל תהליך היא עצמאית. אם מצב הדיסק לא תהליך אחד יכול להשפיע על ההתנהגות של התהליך הבא.
הליכי ההפעלה מחדש והאיפוס שמתוארים בדף הזה מניחים יצר מכשיר 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
בזמן שמירה על מצב המכשיר או ניקוי מצב המכשיר.
הטמעת איפוס מהיר של דיונון
הדיונון משתמש ביישום איפוס מהיר התלוי בהגנה את הדיסקים שמאחורי שכבות-על בדיסק ב-qcow2. על ידי כברירת מחדל, ב-Cuttlefish מתייחסים לדיסקים המקוריים כאל דיסקים לקריאה בלבד ומשתמשים בהם בשכבות-על כדי תיעוד וכתיבה של הדיסק.
עם זאת, יש חסרונות לשימוש בשכבות-על של 'העתקה על כתיבה'. חשוב לציין, שינויים חיצוניים בדיסקים הבסיסיים שעלולים לשבור את התאימות של הדיסקים הקיימים שכבות-על ולגרום לחוסר עקביות במצב הדיסק. דיונון בכוח יוצרות מחדש את שכבות-העל כשהיא מזהה שינויים לא תואמים.
יצירה מחדש של שכבות-העל אינה רצויה כאשר מפתחים תכונה מחייבת לשמור חלק מהדיסק במצב מאותחל מסוים להחליף חלק אחר בדיסק. לדוגמה, התקנת אפליקציה עם תצורה מסוימת של משתמש ולאחר מכן מחליפים שוב ושוב את הליבה לבדוק את האינטראקציה בין האפליקציה לבין גרסאות ליבה (kernel) שונות. במקרה הזה, אולי כדאי להשבית את שכבות-העל.
איפוס המכשירים
בקטעים הבאים מתוארות הדרכים לאפס מכשיר Cuttlefish לזרוע הבקרה את מצב הדיסק.
איפוס של מכשיר אחד
כדי לאפס מכשיר Cuttlefish אחד למצב הדיסק הראשוני שלו, מריצים את:
powerwash_cvd
המכונה powerwash_cvd
משביתה את המכונה הווירטואלית ומאפסת את כל השינויים שבוצעו בה
דיסק במכונה וירטואלית, מפעיל מחדש את המכונה הווירטואלית וממתין עד שהוא יסתיים
בזמן אתחול. המכונה שומרת את הדגלים המקוריים שניתנו ל-launch_cvd
.
בהגדרה מרובת דיירים (multi-tenant),
הפונקציה powerwash_cvd
מפעילה מחדש מופע יחיד מתוך קבוצת המכונות:
powerwash_cvd --instance_num=N
איפוס כל המכשירים
כדי להפסיק את הפעולה של מכשיר אחד או יותר ולאפס אותם למצב הדיסק הראשוני שלהם, מריצים את הפקודה:
stop_cvd
launch_cvd --resume=false
stop_cvd
מבצע כיבוי לא נקי ומפסיק את המכשיר.
הוספה של --resume=false
אל launch_cvd
תגרום ל-Cuttlefish להרוס את כל הקבצים
שקשורה למכונה הקודמת שרצה לפני התחלת ההפעלה הבאה. זו
ניתן להוסיף עוד דגלי launch_cvd
.
בהגדרה מרובת דיירים (multi-tenant), stop_cvd
משבית את כל קבוצת המכונות.
הפעלה מחדש של מכשירים
הקטעים הבאים מתארים דרכים להפעלה מחדש של מכשיר ללא איפוס את המכשיר למצב הדיסק הראשוני שלו.
ניקוי מחדש
כדי לבצע הפעלה מחדש נקייה של המכשיר כשהמכשיר מגיב, מפעילים את:
adb reboot
adb reboot
מעביר את המכשיר לתהליך הכיבוי המלא, מסתנכרן
שינויים בדיסק ולוודא שהתהליכים נסגרים. מארח דיונון
בתהליכים שונים. ייתכן שתהליך זה לא יהיה זמין אם המכשיר
נכנס למצב לא תקין וכבר לא מגיב.
כדי לבצע הפעלה מחדש נקייה של מכשיר דיונון אחד
multi-tenant configuration,
מספר סידורי
של מכשיר היעד במהלך הרצה של adb-reboot
. אם לא הוגדר מכשיר יעד
צוין, adb
לא מפעיל מחדש אף מכשיר.
adb -s SERIAL reboot
הפעלה מחדש לא נקייה
כדי לבצע הפעלה מחדש לא נקייה כשהמכשיר לא מגיב, מפעילים:
restart_cvd
restart_cvd
מבצע כיבוי לא נקי על ידי כיבוי מיידי של
מכשיר דיונון. restart_cvd
הוא שווה ערך ל-
ניתוק וחיבור מחדש של הסוללה למכשיר פיזי. כתיבה בדיסק
עשויות להמשיך בתהליך אם הן בתהליך. restart_cvd
ימתין עד שהמכשיר
הופעל שוב במלואו לפני היציאה.
בהגדרה מרובת דיירים (multi-tenant),
הפונקציה restart_cvd
מפעילה מחדש מופע יחיד מתוך קבוצת המכונות. כדי לציין
בדגל 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
דיונון לא יכול לנווט בבטחה במעבר בין הזרימה עם ו- ללא שכבות-על, ולכן השינוי הזה מוחק את כל מצב הניהול של דיונון. אם בוצעו שינויים בקובצי אחסון חיצוניים ומשתמשים בהם מאוחר יותר יחד עם שכבות-על, השינויים הקודמים נחשבים לחלק ממצב הבסיס.
דגלים
אפשר להוסיף ארגומנטים באמצעות דגלים כשמפעילים מכשיר דיונון באמצעות
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