פתרון בעיות בהפעלת מכונות וירטואליות

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

שגיאות הקשורות למכסות

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

דיסקי אתחול

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

זיהוי הסיבה לכך שדיסק האתחול לא מבצע אתחול

  • מוודאים שדיסק האתחול לא מלא.

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

  • בודקים את הפלט של היציאה הטורית של המכונה הווירטואלית.

    ה-BIOS,‏ bootloader והליבה של מופע מדפיסים את הודעות הניפוי שלהם בפלט של היציאה הטורית של המופע, ומספקים מידע חשוב על שגיאות או בעיות שהמופע חווה. אם מפעילים רישום ביומן של פלט יציאה טורית ב-Cloud Logging, אפשר לגשת למידע הזה גם כשהמופע לא פועל.

  • מפעילים את הגישה האינטראקטיבית לקונסולה הטורית.

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

  • איך לוודא שדיסק האתחול לא משוכפל כרגע

    אם שכפול דיסק האתחול בתהליך, אי אפשר להפעיל את ה-VM ומוצגת שגיאה דומה לזו:

    Failed to start example-vm: The instance resource 'projects/example-project/zones/us-central1-b/instances/example-vm' is already being used by 'projects/example-project/zones/us-central1-b/disks/clone'
    

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

  • מוודאים שקובץ ה-snapshot של דיסק האתחול לא נמצא בתהליך

    אם מתבצעת תמונת מצב של דיסק האתחול, אי אפשר להפעיל את ה-VM ומוצגת שגיאה שדומה לזו:

    The instance resource 'projects/example-project/zones/asia-east1-b/instances/example-vm' is already being used by 'projects/example-project/global/snapshots/example-vm-prod-asia-east1-b-abc'
    

    מחכים שה-snapshot יסתיים ואז מפעילים את המכונה הווירטואלית.

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

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

    1. אם הדיסק מחובר למכונה כלשהי, מנתקים אותו:

      gcloud compute instances delete old-instance --keep-disks boot
      
    2. מפעילים אינסטנס חדש עם התמונה העדכנית שסופקה על ידי Google:

      gcloud compute instances create debug-instance
    3. מצרפים את הדיסק כדיסק אתחול שאי אפשר לאתחל ממנו, אבל לא מתקינים אותו. מחליפים את DISK בשם של הדיסק שלא ניתן לאתחל. רושמים את שם המכשיר שמזהה את הדיסק במכונה:

      gcloud compute instances attach-disk debug-instance \
          --disk DISK \
          --device-name debug-disk
      
    4. מתחברים למכונה:

      gcloud compute ssh debug-instance
      
    5. מחפשים את מחיצת הבסיס של הדיסק, שמזוהה באמצעות הסימון part1. במקרה הזה, מחיצת הבסיס של הדיסק נמצאת בכתובת /dev/sdb1:

      ls -l /dev/disk/by-id
      total 0
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 google-debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 google-debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 google-persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 google-persistent-disk-0-part1 -> ../../sda1
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
      
    6. כדי להריץ בדיקה של מערכת הקבצים במחיצת הבסיס, מבצעים את השלבים הבאים:

      1. מריצים את הפקודה lsblk -f כדי לזהות את סוג מערכת הקבצים של מחיצות הדיסק:

        sudo lsblk -f

        הפלט אמור להיראות כך:

        NAME   FSTYPE LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT
        sdb
        └─sdb1 xfs          2e4f7b4e-9b0a-4b7c-8b8a-9b0a4b7c8b8c
        sda
        └─sda1 ext4         0e4f7b4e-9b0a-4b7c-8b8a-9b0a4b7c8b8a
      2. בהתאם לסוג מערכת הקבצים, מריצים אחת מהפקודות הבאות כדי לבדוק אם יש שגיאות במערכת הקבצים:

        ‫ext או vfat

        אם מערכת הקבצים של מחיצת הבסיס היא ext2, ext3, ext4 או vfat, מריצים את הפקודה fsck באופן הבא:

        sudo fsck DEVICE_NAME

        מחליפים את DEVICE_NAME בשם המכשיר של מחיצת הבסיס. לדוגמה, /dev/sdb1.

        אם הפקודה fsck מחזירה שגיאה כמו Bad magic number in super-block, זה מצביע על כך שמערכת הקבצים פגומה.

        xfs

        אם מערכת הקבצים של מחיצת הבסיס היא xfs, צריך להשתמש בכלי xfs_repair.

        1. אי אפשר להשתמש ב-xfs_repair במערכת קבצים שנטענה. לפני שמריצים את הפקודה xfs_repair, מוודאים שהמחיצה לא מותקנת. אם המחיצה נטענה, מריצים את הפקודה umount כדי לבטל את הטעינה שלה. מחליפים את DEVICE_NAME בשם המכשיר של מחיצת הבסיס, לדוגמה, /dev/sdb1.

          sudo umount DEVICE_NAME
        2. כדי לסרוק את מערכת הקבצים ולחפש שגיאות, מריצים את xfs_repair במצב פרימטר לבדיקות באמצעות האפשרות -n.

          sudo xfs_repair -n DEVICE_NAME
          
          • אם לא נמצאו שגיאות, או אם הפונקציה xfs_repair -n מסתיימת בהצלחה, זה מצביע על כך שאין נזק. צריך לבדוק סיבות אחרות לכשל בהפעלת המכונה הווירטואלית.
          • אם מדווח על שגיאות, או אם הפקודה xfs_repair -n נכשלת עם הודעה כמו If you wish to clear the log, mount the file system with the norecovery option, ממשיכים לשלב הבא כדי לנסות לתקן את הבעיה.
        3. כדי לתקן את מערכת הקבצים, מריצים את הפקודה xfs_repair בלי האפשרות -n.

          sudo xfs_repair DEVICE_NAME
          

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

          sudo xfs_repair -L DEVICE_NAME
          
    7. טוענים את מערכת הקבצים:

      sudo mkdir MOUNT_POINT
      
      sudo mount DEVICE_NAME MOUNT_POINT
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫DEVICE_NAME: שם המכשיר של מחיצת הבסיס, לדוגמה /dev/sdb1.
      • ‫MOUNT_POINT: הספרייה שבה רוצים לטעון את הדיסק. לדוגמה, /mydisk.
    8. בודקים אם יש בדיסק קבצי ליבה:

       ls MOUNT_POINT/boot/vmlinuz-*
       

      הפלט אמור להיראות כך:

       MOUNT_POINT/boot/vmlinuz-3.2.0-4-amd64
       

  • מוודאים שלדיסק יש רשומה של הפעלת מאסטר (MBR) תקינה.

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

    sudo parted DISK_DEVICE print
    

    מחליפים את DISK_DEVICE בשם המכשיר של דיסק האתחול המתמיד שרוצים לבדוק. לדוגמה, /dev/sdb1.

    אם ה-MBR תקין, מוצג בו מידע על מערכת הקבצים:

    Disk DISK_DEVICE: 10.7GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: msdos
    Disk Flags:
    Number  Start   End     Size    Type     File system  Flags
     1      2097kB  10.7GB  10.7GB  primary  ext4         boot
    

תיקון בעיות בהפעלה

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

יצירת דיסק אתחול עצמאי

מבצעים Mount לתמונה המיובאת בדיסק משני שמחובר למכונת VM זמנית. משתמשים במסוף Google Cloud או ב-CLI של gcloud כדי ליצור דיסק עצמאי מהתמונה שהעליתם, וליצור מכונה וירטואלית זמנית עם הדיסק העצמאי שמצורף אליה. אתם יכולים להשתמש במופע הזה כדי לשנות קבצים בדיסק העצמאי ולפתור בעיות שגורמות לתמונה להיכשל בהפעלה.

המסוף

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

  1. נכנסים לדף Disks במסוף Google Cloud .

    לפתיחת הדף Disks

  2. לוחצים על Create disk.
  3. מציינים את המאפיינים הבאים בדף Create a disk:
    • Zone (תחום): Select a zone near you. You must use this same zone when you create your temporary instance.
    • Disk source type (סוג המקור של הדיסק): Image (קובץ אימג'):
    • קובץ אימג' של המקור: מציינים את השם של קובץ האימג' של דיסק האתחול שייבאתם.
  4. לוחצים על Create כדי ליצור את הדיסק.

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

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף Instances

  2. לוחצים על הכפתור Create instance.

  3. בדף Create an instance, מציינים את שם המכונה ואת האזור שבו היא תמוקם. התחום צריך להיות אותו תחום שבו יצרתם את הדיסק העצמאי.

  4. מרחיבים את הקטע Management, security, disks, networking, sole tenancy.

  5. בכרטיסייה Disks (דיסקים) בקטע Additional disks (דיסקים נוספים), לוחצים על Attach existing disk (צירוף דיסק קיים). יופיע קטע חדש.

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

  7. לוחצים על סיום כדי לסיים את צירוף הדיסק.

  8. לוחצים על הלחצן Create כדי ליצור את המכונה.

gcloud

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

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --image=IMAGE_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫DISK_NAME: השם של הדיסק העצמאי החדש.

  • ‫ZONE: אזור שקרוב אליכם. כשיוצרים את המכונה הזמנית, צריך להשתמש באותו אזור.

  • ‫IMAGE_NAME: השם של קובץ האימג' של דיסק האתחול שייבאתם.

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

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --disk name=DISK_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: שם ייחודי למכונה

  • ‫ZONE: האזור שבו יצרתם את הדיסק העצמאי

  • ‫DISK_NAME: השם של הדיסק הנפרד שיצרתם מתמונת דיסק האתחול שיובאה

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

הגדרת דיסק האתחול

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

  1. מתחברים למכונה הזמנית באמצעות SSH בדפדפן או באמצעות הפקודה gcloud compute ssh.
  2. משתמשים בפקודה blkid כדי לזהות את הדיסק שרוצים לשנות ואת המחיצות שצריך לטעון. בדוגמה הזו, /dev/sdb הוא הדיסק שייבאתם.

    lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:16   0  100G  0 disk
    ├─sdb1   8:17   0   96G  0 part
    ├─sdb2   8:18   0    1K  0 part
    └─sdb5   8:21   0    4G  0 part
    
  3. טוענים את מחיצת הבסיס מהדיסק העצמאי לספרייה /tmp. בדוגמה הזו, /dev/sdb1 היא מחיצת הבסיס, ולא צריך לשנות את המחיצות האחרות. יכול להיות שתוכנית החלוקה שלכם תדרוש מכם להעלות כמה מחיצות לפני שתוכלו לגשת לכל הקבצים שאתם צריכים לשנות.

    sudo mount DEVICE_NAME /tmp
    

    מחליפים את DEVICE_NAME בשם המכשיר של מחיצת הבסיס שרוצים לטעון. לדוגמה, /dev/sdb1.

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

  5. מבטלים את הטעינה של דיסק האתחול מהמכונה הזמנית.

    sudo umount /tmp
    

שימוש בדיסק האתחול

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

המסוף

מנתקים את הדיסק הנפרד מהמכונה הזמנית.

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף Instances

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

  3. בחלק העליון של דף הפרטים של המופע, לוחצים על עריכה.

  4. בקטע Additional disks (דיסקים נוספים), לוחצים על X לצד הדיסק העצמאי כדי לציין שרוצים לנתק אותו מהמופע הזמני.

  5. לוחצים על Save כדי לשמור את השינויים.

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

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף Instances

  2. לוחצים על הלחצן Create instance.

  3. בדף Create an instance, מציינים שם למכונה ותחום (zone) שבו המכונה תמוקם. האזור צריך להיות אותו אזור שבו יצרתם את הדיסק העצמאי.

  4. בקטע Boot disk לוחצים על Change כדי להתחיל בהגדרת דיסק האתחול.

  5. בכרטיסייה Existing disks, בוחרים את דיסק האתחול העצמאי שרוצים להשתמש בו כדיסק האתחול של המכונה החדשה.

  6. לוחצים על הלחצן Create כדי ליצור את המכונה.

gcloud

מנתקים את הדיסק הנפרד מהמכונה הזמנית.

gcloud compute instances detach-disk INSTANCE_NAME \
    --disk name=DISK_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: שם ייחודי למכונה.
  • DISK_NAME: השם של הדיסק העצמאי החדש.

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

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --disk name=DISK_NAME,boot=yes

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: שם ייחודי למכונה
  • ‫ZONE: האזור שבו נמצא הדיסק העצמאי
  • ‫DISK_NAME: השם של הדיסק הנפרד שיצרתם מתמונת דיסק האתחול שיובאה

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