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

במאמר הזה מוסבר איך להשתמש בשמות מכשירים קבועים במכונה וירטואלית של Linux.

במכונות וירטואליות שפועלת בהן מערכת הפעלה של Linux, שמות המכשירים, למשל /dev/sda, עשויים להשתנות אחרי שמבצעים פעולות כמו:

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

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

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

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

לפני שמתחילים

  • בודקים את ניהול המכשירים במערכת ההפעלה Linux:
  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:

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

    המסוף

    כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Cloud de Confiance by S3NS

    gcloud

    1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init
  • הגדרת אזור ותחום כברירת מחדל

מתן שמות למכשירים במכונות וירטואליות של Linux

שמות המכשירים ב-Linux של הדיסקים שמצורפים למכונה הווירטואלית תלויים בממשק שבחרתם כשאתם יוצרים את הדיסקים. כשמשתמשים בפקודה של מערכת ההפעלה lsblk כדי להציג את מכשירי הדיסק, מוצג הקידומת nvme לדיסקים שמחוברים באמצעות ממשק NVMe, והקידומת sd לדיסקים שמחוברים באמצעות ממשק SCSI.

הסדר של מספרי הדיסקים או בקרי ה-NVMe לא צפוי או עקבי בין הפעלות מחדש של מכונות וירטואליות. באתחול הראשון, דיסק קשיח קבוע עשוי להיות nvme0n1 (או sda ל-SCSI). באתחול השני, שם המכשיר לאותו דיסק קשיח עשוי להיות nvme2n1 או nvme0n3 (או sdc ל-SCSI).

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

שמות של מכשירי SCSI

הפורמט של מכשיר דיסק שמחובר ל-SCSI הוא sda עבור הדיסק המחובר הראשון. מחיצות הדיסק מופיעות כ-sda1. כל דיסק נוסף מקבל אות עוקבת, כמו sdb ו-sdc. כשמגיעים ל-sdz, הדיסקים הבאים שמתווספים מקבלים שמות כמו sdaa, sdab ו-sdac, עד sddx.

שמות של מכשירי NVMe

הפורמט של מכשיר דיסק שמחובר ל-NVMe במערכות הפעלה של Linux הוא nvmenumbernnamespace. ‫number מייצג את מספר בקר הדיסק NVMe ו-namespace הוא מזהה מרחב שמות NVMe שמוקצה על ידי בקר הדיסק NVMe. במחיצות, ‎pn מצורף לשם המכשיר, כאשר n הוא מספר, החל מ-1, שמציין את המחיצה ה-nth

מספר הבקר מתחיל ב-0. לדיסק NVMe יחיד שמצורף למופע של מחשוב יש שם מכשיר nvme0n1. ברוב סוגי המכונות נעשה שימוש בבקר דיסק NVMe יחיד. שמות מכשירי ה-NVMe הם nvme0n1, ‏nvme0n2, ‏nvme0n3 וכן הלאה.

לדיסקים מקומיים מסוג SSD שמצורפים למופעים של סדרת מכונות מהדור השלישי ואילך יש בקר NVMe נפרד לכל דיסק. במכונות הווירטואליות האלה, שמות המכשירים של ה-SSD המקומי שמחובר ל-NVMe נראים כך: nvme0n1,‏ nvme1n1 ו-nvme2n1. מספר דיסקי ה-SSD המקומיים שמצורפים תלוי בסוג המכונה של מכונת ה-VM.

מופעי מחשוב שמבוססים על סדרת מכונות מהדור השלישי ואילך משתמשים ב-NVMe גם עבור Persistent Disk ו-Google Cloud Hyperdisk, וגם עבור כונני SSD מקומיים. לכל מכונה וירטואלית יש בקר NVMe אחד ל-Persistent Disk ול-Hyperdisk, ובקר NVMe אחד לכל דיסק SSD מקומי. לדיסק אחסון מתמיד ולבקר NVMe של Hyperdisk יש מרחב שמות NVMe יחיד לכל הדיסקים המצורפים. לכן, מופע מסדרת מכונות מהדור השלישי עם דיסק מתמשך אחד ודיסק Hyperdisk אחד (כל אחד עם 2 מחיצות), ו-2 דיסקים מקומיים של SSD לא מעוצבים, משתמש בשמות המכשירים הבאים:

  • nvme0n1 - Persistent Disk
  • nvme0n1p1
  • nvme0n1p2
  • nvme0n2 – Hyperdisk
  • nvme0n2p1
  • nvme0n2p2
  • nvme1n1 - first Local SSD
  • nvme2n1 שניות SSD מקומי

שימוש בשמות קבועים למכשירים

כדי להגדיר שם מכשיר קבוע, מקצים שם לנקודת הטעינה של מכשיר הדיסק בקובץ fstab. יש שלוש דרכים להגדיר שם קבוע למכשיר.

  • באמצעות תווית. כדי להשתמש באפשרות הזו, מערכת הקבצים צריכה לתמוך בתוויות, ואתם צריכים להוסיף תווית למחיצות בדיסק.
  • באמצעות UUID של מחיצה או דיסק. מזהה ייחודי אוניברסלי (UUID) נוצר כשדיסק נוצר עם טבלת מחיצות, והמזהה הייחודי אוניברסלי הוא ייחודי לכל מחיצה.
  • באמצעות מזהה של דיסק אחסון מתמיד (/dev/disk/by-id) עבור Persistent Disk או Google Cloud Hyperdisk, או קישור סמלי שמבוסס על שם משאב הדיסק.

מומלץ להשתמש ב-UUID של המחיצה או בקישור הסמלי למכונות וירטואליות של Linux.

מזהה ייחודי אוניברסלי (UUID) של המחיצה

כדי למצוא את ה-UUID של דיסק, מבצעים את השלבים הבאים:

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

    ls -l /dev/disk/by-id/google-*
    

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

      lrwxrwxrwx 1 root root  9 Oct 23 15:58 /dev/disk/by-id/google-my-vm -> ../../sda
      lrwxrwxrwx 1 root root 10 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part1 -> ../../sda1
      lrwxrwxrwx 1 root root 11 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part15 -> ../../sda15
      lrwxrwxrwx 1 root root  9 Oct 23 15:58 /dev/disk/by-id/google-my-vm-app-data -> ../../nvme0n1
      

  3. מריצים אחת מהפקודות הבאות כדי לאחזר את המזהה הייחודי האוניברסלי (UUID) של המחיצה בדיסק:

    • blkid

      sudo  blkid -s UUID
      

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

      /dev/sda1: UUID="4f570f2d-fffe-4c7d-8d8f-af347af7612a"
      /dev/sda15: UUID="E0B2-DFAF"
      /dev/nvme0n1: UUID="9e617251-6a92-45ff-ba40-700a9bdeb03e"
      
    • ls -l

      sudo ls -l /dev/disk/by-uuid/
      

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

      lrwxrwxrwx 1 root root 10 Sep 22 18:12 4f570f2d-fffe-4c7d-8d8f-af347af7612a -> ../../sda1
      lrwxrwxrwx 1 root root 13 Sep 22 18:15 9e617251-6a92-45ff-ba40-700a9bdeb03e -> ../../nvme0n1
      lrwxrwxrwx 1 root root 11 Sep 22 18:12 E0B2-DFAF -> ../../sda15
      
  4. מוסיפים רשומה של ה-UUID של המכשיר לקובץ /etc/fstab.

    UUID=9e617251-6a92-45ff-ba40-700a9bdeb03e /data ext4 defaults 0 0
    

    בדוגמה הזו, /data היא נקודת הטעינה ו-ext4 הוא סוג מערכת הקבצים.

  5. כדי לוודא שהמכשיר מחובר בצורה תקינה, מריצים את הפקודה mount -av.

    sudo mount -av

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

    /                           : ignored
    /boot/efi                : already mounted
    mount: /data does not contain SELinux labels.
    You just mounted an file system that supports labels which does not
    contain labels, onto an SELinux box. It is likely that confine
    applications will generate AVC messages and not be allowed access to
    this filesystem.  For more details see restorecon(8) and mount(8).
    /data                    : successfully mounted
    

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

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

  1. מתחברים ל-VM.
  2. כדי לאחזר את המזהה בדיסק, מריצים את הפקודה הבאה:

    sudo  ls -lh /dev/disk/by-id/google-*

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

    lrwxrwxrwx. 1 root root  9 May 16 17:34 google-disk-2 -> ../../sdb
    lrwxrwxrwx. 1 root root  9 May 16 09:09 google-persistent-disk-0 -> ../../sda
    lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part1 -> ../../sda1
    lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part2 -> ../../sda2
    

    בדיסקים מסוג NVME, הפלט אמור להיראות כך:

    lrwxrwxrwx 1 root root 13 Jun  1 10:27 google-disk-3 -> ../../nvme0n2
    lrwxrwxrwx 1 root root 13 Jun  1 10:25 google-t2a -> ../../nvme0n1
    lrwxrwxrwx 1 root root 15 Jun  1 10:25 google-t2a-part1 -> ../../nvme0n1p1
    lrwxrwxrwx 1 root root 16 Jun  1 10:25 google-t2a-part15 -> ../../nvme0n1p15
    
  3. מוסיפים את הקישור הסמלי לקובץ /etc/fstab.

    /dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
    
  4. כדי לוודא שהמכשיר מחובר בצורה תקינה, מריצים את הפקודה mount -av.

    sudo mount -av

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

    /                           : ignored
    /boot/efi                : already mounted
    mount: /data does not contain SELinux labels.
    You just mounted an file system that supports labels which does
    not contain labels, onto an SELinux box. It is likely that confine
    applications will generate AVC messages and not be allowed access to this
    file system.  For more details see restorecon(8) and mount(8).
    /data                    : successfully mounted