שחזור של מכונה וירטואלית שלא ניתן לגשת אליה

אם אין לכם גישה למכונה הווירטואלית של Linux מסיבה כלשהי, אתם יכולים לנסות לשחזר את המכונה הווירטואלית באמצעות השלבים הבאים.

כדי לזהות למה מכונת Compute לא מצליחה לבצע אתחול לפני שמפעילים את מצב החילוץ, אפשר לעיין במאמר בנושא פתרון בעיות באתחול של מכונות Linux ב-Compute Engine.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לחילוץ VM, בקשו מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

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

ההרשאות הנדרשות

כדי לשחזר מכונה וירטואלית, נדרשות ההרשאות הבאות:

  • compute.instances.create בפרויקט
  • ‫compute.disks.create בפרויקט
  • ‫compute.instances.get בפרויקט
  • compute.disks.createSnapshot בדיסקים
  • compute.instances.attachDisk במכונה וירטואלית חדשה
  • compute.disks.use בדיסק
  • ‫compute.instances.start במכונה וירטואלית חדשה ובלתי נגישה
  • ‫compute.instances.stop במכונה וירטואלית חדשה ובלתי נגישה

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

חילוץ של VM

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

  1. (אופציונלי) עוצרים את המכונה הווירטואלית שאי אפשר לגשת אליה.
  2. יוצרים קובץ snapshot מדיסק האתחול של ה-VM שאי אפשר לגשת אליו. אם מערכת הקבצים הבסיסית מחולקת בין כמה דיסקים, צריך ליצור תמונת מצב של כל דיסק.
  3. יוצרים מכונה וירטואלית זמנית באמצעות קובץ אימג' ציבורי שהכי קרוב למערכת ההפעלה של המכונה הווירטואלית שאי אפשר לגשת אליה. במקרים מסוימים, מדיניות בנושא קובצי אימג' מהימנים עשויה להגביל את האפשרות ליצור דיסקי אתחול מתמונות ציבוריות. במקרים כאלה, צריך לבקש מאדמין להסיר את ההגבלה באופן זמני כדי שתוכלו ליצור מכונה וירטואלית לשחזור. מידע נוסף מופיע במאמר בנושא הגדרת מגבלות על הגישה לתמונות.
  4. לכל אחד מה-snapshots של דיסקי האתחול של ה-VM הלא נגיש שיצרתם קודם, יוצרים דיסק חדש מה-snapshot ומצרפים אותו ל-VM החילוץ, לפי השלבים הבאים:

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

      כניסה לדף VM instances

    2. לוחצים על השם של המכונה הווירטואלית הזמנית שיצרתם.

    3. לוחצים על עריכה.

    4. בקטע Additional disks (דיסקים נוספים), לוחצים על Add new disk (הוספת דיסק חדש) ומבצעים את הפעולות הבאות:

      1. מוסיפים את שם הדיסק, למשל my-recovery-disk
      2. בשדה Source type, בוחרים בכרטיסייה Snapshot.
      3. בתפריט הנפתח Source snapshot, בוחרים את קובץ ה-snapshot של ה-VM המקורי שיצרתם בשלבים הקודמים.
      4. לוחצים על סיום.
    5. לוחצים על Save.

  5. מתחברים למכונה הווירטואלית הזמנית באמצעות SSH.

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

    lsblk -d -o NAME,SERIAL

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

     NAME SERIAL
     sda  rescue-vm
     sdb  my-recovery-disk
     

    בדוגמה הזו, rescue-vm הוא דיסק האתחול של מכונת החילוץ ו-my-recovery-disk הוא דיסק האתחול מהתמונה של המכונה הווירטואלית שלא ניתן לגשת אליה. שימו לב ל-NAME של המכונה הווירטואלית שאין אליה גישה, כי תצטרכו אותו בשלב הבא.

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

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

      fdisk -l /dev/NAME -o Device,Size,Type
      

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

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

      Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
      Disk model: PersistentDisk
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 4096 bytes
      I/O size (minimum/optimal): 4096 bytes / 4096 bytes
      Disklabel type: gpt
      Disk identifier: B31430F1-F041-4555-96B9-B2F43DC057AD
      
      Device     Size Type
      /dev/sdb1    2M BIOS boot
      /dev/sdb2   20M EFI System
      /dev/sdb3   10G Linux filesystem
      

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

      file -sL /dev/PARTITION_NAME
      

      מחליפים את NAME בשם המחיצה.

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

      • אין מערכת קבצים: אם בפלט מוצג רק data, המחיצה לא מכילה מערכת קבצים. פלט לדוגמה:

        /dev/sdb1: data
        
      • מערכת קבצים של EFI: אם הפלט מתאר סקטור אתחול של DOS/MBR, למחיצה יש מערכת קבצים של EFI. פלט לדוגמה:

        dev/sdb2: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, reserved sectors
        4, root entries 512, sectors 40960 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 40, sectors/
        track 32, heads 64, serial number 0xf2af2664, label: "EFI        ", FAT (16 bit)
        
      • מערכת קבצים של Linux: אם הפלט מתאר נתונים של מערכת קבצים, המחיצה היא מערכת קבצים של Linux. פלט לדוגמה:

        /dev/sdb3: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
        

      שימו לב לשם המחיצה של מערכת הקבצים של Linux.

    2. יוצרים נקודת טעינה ב-/rescue:

      sudo mkdir /rescue
    3. מגדירים את המחיצה של מערכת הקבצים של Linux ל-/rescue:

      sudo mount PARTITION_NAME /rescue
      

      מחליפים את PARTITION_NAME בשם של מערכת הקבצים של Linux שציינתם קודם.

    4. טוענים את מערכות הקבצים הווירטואליות ואת המכשירים כדי שתוכלו לשנות את תיקיית השורש של מערכת הקבצים באמצעות הפקודה chroot:

      sudo mount -t proc /proc /rescue/proc
      sudo mount -t sysfs /sys /rescue/sys
      sudo mount -o bind /dev /rescue/dev
      sudo mount -o bind /dev/pts /rescue/dev/pts
      sudo mount -o bind /run /rescue/run
      
    5. משנים את תיקיית השורש למערכת הקבצים שנטענה:

      sudo chroot /rescue
      

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

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

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

  1. אחרי שמסיימים את פתרון הבעיות, יוצאים מסביבת chroot:

     exit
     

  2. מבטלים את הטעינה של מערכות הקבצים הווירטואליות, המכשירים ומערכת הקבצים של המכונה הווירטואלית שלא ניתן לגשת אליה מהמכונה הווירטואלית הזמנית:

     cd /
     sudo umount /rescue/run
     sudo umount /rescue/dev/pts
     sudo umount /rescue/dev
     sudo umount /rescue/sys
     sudo umount /rescue/proc
     sudo umount /rescue
     

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

    כניסה לדף VM instances

    1. בוחרים את המכונה הווירטואלית הזמנית שיצרתם.

    2. לוחצים על עריכה.

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

    4. לוחצים על Save.

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

    כניסה לדף VM instances

    1. אם המכונה הווירטואלית שלא ניתן לגשת אליה עדיין פועלת, מפסיקים את פעולת המכונה הווירטואלית.

    2. לוחצים על השם של המכונה הווירטואלית שעצרתם ואז על Edit.

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

    4. אחר כך לוחצים על CONFIGURE BOOT DISK כדי לצרף את הדיסק שיצרתם ותיקנתם קודם לכן בקטע חילוץ VM שבדף הזה.

      1. בקטע Boot Disk (דיסק אתחול), לוחצים על הכרטיסייה Existing disks (דיסקים קיימים).
      2. ברשימה הנפתחת, בוחרים את הדיסק שיצרתם בקטע הקודם, למשל my-recovery-disk.
      3. לוחצים על בחירה ואז על שמירה.
    5. מפעילים את ה-VM.

  5. עכשיו אמורה להיות לכם אפשרות להתחבר למכונה הווירטואלית באמצעות SSH.