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

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

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

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

דיסקים לאתחול

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

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

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

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

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

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

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

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

  • מוודאים ששיבוט דיסק האתחול לא מתבצע

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

    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 במצב בדיקה (dry run) באמצעות האפשרות -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 זמנית. משתמשים במסוף או ב-CLI של gcloud כדי ליצור דיסק עצמאי מהתמונה שהעליתם, וליצור מכונה וירטואלית זמנית עם הדיסק העצמאי שמצורף אליה. Google Cloud אתם יכולים להשתמש במופע הזה כדי לשנות קבצים בדיסק העצמאי ולפתור בעיות שגורמות לכך שהתמונה לא מופעלת.

המסוף

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

  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, מציינים שם למכונה ותחום (zone) שבו היא תמוקם. התחום (zone) חייב להיות זהה לתחום שבו יצרתם את הדיסק העצמאי.

  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 בשם המכשיר של מחיצת הבסיס (root) שרוצים לטעון. לדוגמה, /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) שבו היא תמוקם. התחום (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: השם של הדיסק הנפרד שיצרתם מתמונת דיסק האתחול שיובאה

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