במאמר הזה מוסבר איך להשתמש בשמות מכשירים קבועים במכונה וירטואלית (VM) עם Linux.
במכונות וירטואליות שמשתמשות במערכת ההפעלה Linux, שמות המכשירים (לדוגמה /dev/sda) עשויים להשתנות אחרי שמבצעים פעולות כמו:
- הפעלה והפסקה של מכונה וירטואלית
- ניתוק דיסקים וחיבורם מחדש
- שינוי סוגי מכונות
השינוי בשם המכשיר קורה כי השמות של המכשירים מוקצים מתוך טווח זמין ברגע שמכונה וירטואלית מופעלת או שמכשיר מצורף. ניתוק של מכשיר או עצירה של מכונה וירטואלית משחררים את שם המכשיר. כשהמכשיר מחובר מחדש או שהמכונה הווירטואלית מופעלת מחדש, מוקצה לו שם חדש מתוך הטווח הזמין. ליבת Linux לא מבטיחה סדר מכשירים בין הפעלות מחדש.
שינוי שם המכשיר עלול לגרום לכך שאפליקציות או סקריפטים שתלויים בשם המכשיר המקורי לא יפעלו כמו שצריך, או לגרום לכך שהמכונה הווירטואלית לא תופעל אחרי הפעלה מחדש.
כדי להימנע מהבעיה הזו, מומלץ להשתמש בשמות קבועים של מכשירים כשמפנים לדיסקים ולמחיצות במכונות הווירטואליות של Linux. אפשר גם להשתמש בקישורים סמליים.
לפני שמתחילים
- בודקים את ניהול המכשירים במערכת ההפעלה Linux:
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים Google Cloud ולממשקי ה-API, לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, מאתחלים את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל
הקצאת שמות למכשירים במכונות וירטואליות של Linux
שמות המכשירים ב-Linux של הדיסקים שמצורפים למכונה הווירטואלית תלויים בממשק שבחרתם כשיוצרים את הדיסקים. כשמשתמשים בפקודה lsblk של מערכת ההפעלה כדי להציג את התקני הדיסק, מוצגת הקידומת nvme לדיסקים שמחוברים לממשק NVMe, והקידומת sd לדיסקים שמחוברים לממשק SCSI.
הסדר של מספרי הדיסקים או בקרי ה-NVMe לא צפוי או עקבי בהפעלות מחדש של מכונות וירטואליות. באתחול הראשון, יכול להיות שדיסק אחסון מתמיד (persistent disk) יהיה nvme0n1 (או sda ל-SCSI). באתחול השני, שם המכשיר של אותו דיסק אחסון מתמיד (persistent disk) עשוי להיות 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 יחיד שמצורף למופע של Compute יש שם מכשיר nvme0n1. ברוב סוגי המכונות נעשה שימוש בבקר דיסק NVMe יחיד. שמות מכשירי ה-NVMe הם nvme0n1, nvme0n2, nvme0n3 וכן הלאה.
למכונות עם דיסקים מסוג Local SSD שמחוברים לסדרת מכונות מהדור השלישי או למכונות חדשות יותר, יש בקר NVMe נפרד לכל דיסק. במכונות הווירטואליות האלה, שמות המכשירים המקומיים של כונני ה-SSD שמצורפים ל-NVMe נראים כמו nvme0n1, nvme1n1 ו-nvme2n1. מספר כונני ה-SSD המקומיים שמחוברים תלוי בסוג המכונה של ה-VM.
מכונות וירטואליות שמבוססות על סדרת מכונות מהדור השלישי ואילך משתמשות ב-NVMe גם עבור Persistent Disk ו-Google Cloud Hyperdisk, וגם עבור כונני SSD מקומיים. לכל מכונה וירטואלית יש בקר NVMe אחד ל-Persistent Disk ול-Hyperdisk, ובקר NVMe אחד לכל דיסק SSD מקומי. לדיסק אחסון מתמיד ולבקר Hyperdisk NVMe יש מרחב שמות NVMe יחיד לכל הדיסקים המצורפים. לכן, במכונה מסדרת מכונות מהדור השלישי עם Persistent Disk אחד ו-Hyperdisk אחד (לכל אחד מהם יש 2 מחיצות) ו-2 דיסקים של Local SSD לא מעוצבים, נעשה שימוש בשמות המכשירים הבאים:
nvme0n1– Persistent Disknvme0n1p1nvme0n1p2-
nvme0n2– Hyperdisk nvme0n2p1nvme0n2p2-
nvme1n1– הראשון מבין כונני ה-SSD המקומיים -
nvme2n1– SSD מקומי שני
שימוש בשמות קבועים למכשירים
כדי להגדיר שם מכשיר קבוע, צריך להקצות שם לנקודת הטעינה של מכשיר הדיסק בקובץ fstab. יש שלוש דרכים להגדיר שם מכשיר קבוע.
- באמצעות תווית. כדי להשתמש באפשרות הזו, מערכת הקבצים צריכה לתמוך בתוויות, ואתם צריכים להוסיף תוויות למחיצות הדיסק.
- באמצעות UUID של מחיצה או דיסק. מזהה ייחודי אוניברסלי (UUID) נוצר כשדיסק נוצר עם טבלת מחיצות, והמזהה הייחודי האוניברסלי הוא ייחודי לכל מחיצה.
- באמצעות מזהה של דיסק אחסון מתמיד (
/dev/disk/by-id) לדיסק אחסון מתמיד או ל-Google Cloud Hyperdisk, או באמצעות קישור סמלי שמבוסס על שם משאב הדיסק.
מומלץ להשתמש ב-UUID של המחיצה או בקישור הסמלי למכונות וירטואליות של Linux.
מזהה ייחודי אוניברסלי (UUID) של המחיצה
כדי למצוא את ה-UUID של דיסק, מבצעים את השלבים הבאים:
- מתחברים למכונה הווירטואלית.
אם אתם לא יודעים את שם המכשיר של הדיסק, אתם יכולים למצוא אותו באמצעות הקישור הסמלי.
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
מריצים אחת מהפקודות הבאות כדי לאחזר את המזהה הייחודי האוניברסלי (UUID) של המחיצה בדיסק:
blkidsudo 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 -lsudo 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
מוסיפים רשומה של ה-UUID של המכשיר בקובץ
/etc/fstab.UUID=9e617251-6a92-45ff-ba40-700a9bdeb03e /data ext4 defaults 0 0
בדוגמה הזו,
/dataהיא נקודת הטעינה ו-ext4הוא סוג מערכת הקבצים.מריצים את הפקודה
mount -avכדי לוודא שהמכשיר מותקן כמו שצריך.sudo mount -av
אם המכשיר מותקן בהצלחה, הפלט דומה לזה:
/ : ignored /boot/efi : already mounted mount: /data does not contain SELinux labels. You just mounted a 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
מזהה של דיסק אחסון מתמיד
כדי למצוא את שם מכשיר הדיסק באמצעות מזהה הדיסק אחסון מתמיד (persistent disk) או קישור סימבולי, מבצעים את השלבים הבאים:
- מתחברים למכונה הווירטואלית.
כדי לאחזר את המזהה בדיסק, מריצים את הפקודה הבאה:
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
מוסיפים את הקישור הסמלי לקובץ
/etc/fstab./dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
מריצים את הפקודה
mount -avכדי לוודא שהמכשיר מותקן כמו שצריך.sudo mount -av
אם המכשיר מותקן בהצלחה, הפלט דומה לזה:
/ : ignored /boot/efi : already mounted mount: /data does not contain SELinux labels. You just mounted a 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