ייצוא תמונה בהתאמה אישית ל-Cloud Storage

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

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

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

יצירה ושימוש חוזר בתמונות בהתאמה אישית.
איור 1. דוגמאות ליצירה ולשימוש חוזר בתמונות בהתאמה אישית

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

מגבלות

ההגבלות הבאות חלות על תהליך ייצוא התמונות.

מגבלות כלליות

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

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

קטגוריה של Cloud Storage בשם ${PROJECT}-daisy-bkt-${REGION} נוצרת בשביל משאבים זמניים שנוצרים במהלך תהליך הייצוא, באותו אזור או באותם מספר אזורים כמו קטגוריית היעד. כדי לנהל את מחזור החיים של המשאבים האלה, קראו את המאמר ניהול מחזור החיים של אובייקטים.

תהליך הייצוא משתמש ב-Cloud Build כדי לייצא קובץ אימג'. סשן של Cloud Build נמשך עד 24 שעות. אם התמונה גדולה מאוד וצריך יותר מ-24 שעות כדי לייצא אותה, אפשר לייצא את התמונה באופן ידני.

מגבלות של VPC Service Controls

בפרויקטים שמוגנים באמצעות VPC Service Controls, צריך להשתמש באחת מהשיטות הבאות:

  • מייצאים מאותו פרויקט שבו נמצאת התמונה. הערה: צריך להוסיף כלל יציאה לפרויקט compute-image-import (מספר 71462206840). כדי לפעול לפי העקרון של הרשאות מינימליות, מומלץ לאפשר רק לשירות artifactregistry.googleapis.com להשתמש בשיטות הבאות: artifactregistry.repositories.downloadArtifacts,‏ artifactregistry.tags.get,‏ artifactregistry.tags.list ו-artifactregistry.versions.get.

  • מייצאים את התמונה באופן ידני.

ייצוא תמונה באמצעות פקודה אחת

ייצוא תמונה ל-Cloud Storage

אפשר לייצא את התמונות באמצעות Google Cloud המסוף, Google Cloud CLI או REST.

המסוף

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

    כניסה לדף Images

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

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

  4. בדף Export image, בוחרים את הפורמט של קובץ התמונה ב-Export format.

  5. לוחצים על עיון כדי לבחור את המיקום ב-Cloud Storage שאליו רוצים לייצא את התמונה.

  6. בוחרים מיקום קיים ב-Cloud Storage לייצוא התמונה. לחלופין, פועלים לפי ההוראות ליצירת קטגוריה חדשה של Cloud Storage, ואז מזינים שם לקטגוריה החדשה של Cloud Storage.

  7. אחרי שבוחרים Cloud Storage, בוחרים שם קובץ לתמונה המיוצאת. אפשר להשתמש בשם הקובץ שמוגדר כברירת מחדל או לבחור שם קובץ משלכם.

  8. אחרי שבוחרים קטגוריה ב-Cloud Storage ומזינים שם לקובץ התמונה, לוחצים על Select.

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

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

    לאחסון

gcloud

הדרך המומלצת לייצא תמונה ל-Cloud Storage היא באמצעות הפקודה gcloud compute images export. בפקודה הזו נעשה שימוש ב-Daisy כדי לשרשר את השלבים הרבים שנדרשים לייצוא תמונה.

הפקודה gcloud compute images export מניחה שכבר יצרתם קובץ אימג', למשל באמצעות הפקודה gcloud compute images create.

מריצים את הפקודה הבאה ב-Google Cloud CLI:

gcloud compute images export \
    --destination-uri DESTINATION_URI \
    --image IMAGE_NAME

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

  • ‫DESTINATION_URI: ה-URI של Cloud Storage כיעד לקובץ התמונה המיוצא.
  • ‫IMAGE_NAME: השם של קובץ האימג' לייצוא.

כברירת מחדל, התמונות מיוצאות בפורמט Compute Engine, שהוא קובץ disk.raw שעבר tar ו-gzip. כדי לייצא תמונות בפורמטים אחרים שנתמכים בכלי QEMU disk image, אפשר להשתמש בדגל --export-format. הפורמטים התקפים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.

דוגמה

לדוגמה, הפקודה הבאה מייצאת תמונה בשם my-image מ-my-project לקטגוריה של Cloud Storage בשם my-bucket. כברירת מחדל, התמונה מיוצאת כקובץ disk.raw file ונדחסת לפורמט הקובץ tar.gz.

gcloud compute images export \
    --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image \
    --project my-project

למידע על סימונים, אפשר לעיין במאמרי העזרה בנושא gcloud compute images export.

REST

שליחת בקשת POST ל-Cloud Build API.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout": "7200s",
  "steps":[
    {
      "args":[
        "-timeout=7000s",
        "-source_image=SOURCE_IMAGE",
        "-client_id=api",
        "-format=IMAGE_FORMAT",
        "-destination_uri=DESTINATION_URI"
      ],
      "name":"gcr.io/compute-image-import/gce_vm_image_export:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-daisy",
    "gce-daisy-image-export"
  ]
}

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

  • ‫PROJECT_ID: מזהה הפרויקט שמכיל את התמונה שרוצים לייצא.
  • ‫SOURCE_IMAGE: השם של התמונה לייצוא.
  • ‫IMAGE_FORMAT: הפורמט של התמונה המיוצאת. פורמטים תקינים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.
  • ‫DESTINATION_URI: מיקום ה-URI של Cloud Storage שאליו רוצים לייצא את קובץ התמונה. לדוגמה, gs://my-bucket/my-exported-image.vmdk.

מידע על ערכים נוספים של args שאפשר לספק זמין בקטע 'אפשרויות' בדף GitHub בנושא ייצוא תמונות של מכונות וירטואליות.

דוגמה לתשובה

התגובה לדוגמה הבאה דומה לפלט שמוחזר:

{
"name": "operations/build/myproject-12345/operation-1578608233418",
"metadata": {
 "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
 "build": {
  "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
  "status": "QUEUED",
  "createTime": "2019-10-02T18:59:13.393492020Z",
  "steps": [
   {
    "name": "gcr.io/compute-image-import/gce_vm_image_export:release",
    "env": [
     "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
    ],
    "args": [
     "-timeout=7056s",
     "-source_image=my-image",
     "-client_id=api",
     "-format=vmdk",
     "-destination_uri=gs://my-bucket/my-exported-image.vmdk"
    ]
   }
  ],
  "timeout": "7200s",
  "projectId": "myproject-12345",
  "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com",
  "options": {
   "logging": "LEGACY"
  },
  "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456"
 }
 }

יש כמה דרכים לעקוב אחרי הבנייה:

  • מריצים בקשת projects.builds.get באמצעות הערך של build-id שהוחזר.
  • בודקים את היומנים שמתארחים ב-logUrl שצוין.

ייצוא תמונה מפרויקט באמצעות חשבון שירות מותאם אישית של Compute Engine

במהלך ייצוא תמונה, נוצרת מכונה וירטואלית (VM) זמנית בפרויקט. צריך לאמת את הכלי לייצוא תמונות במכונה הווירטואלית הזמנית הזו.

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

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

אפשר לייצא את התמונות באמצעות Google Cloud CLI או REST.

gcloud

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

    לפחות, צריך להקצות לחשבון השירות שצוין ב-Compute Engine את התפקידים הבאים:

    • roles/compute.storageAdmin
    • roles/storage.objectAdmin
    • roles/storage.admin

    מידע נוסף זמין במאמר הענקת התפקידים הנדרשים לחשבון השירות של Compute Engine.

  2. משתמשים בפקודה gcloud compute images export כדי לייצא את התמונה.

    gcloud compute images export \
        --destination-uri DESTINATION_URI \
        --image IMAGE_NAME \
        --compute-service-account SERVICE_ACCOUNT_EMAIL

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

    • ‫DESTINATION_URI: ה-URI של Cloud Storage כיעד לקובץ התמונה המיוצא.
    • ‫IMAGE_NAME: השם של קובץ האימג' לייצוא.
    • ‫SERVICE_ACCOUNT_EMAIL: כתובת האימייל שמשויכת לחשבון השירות של Compute Engine שיצרתם בשלב הקודם.

דוגמה

לדוגמה, הפקודה הבאה מייצאת תמונה בשם my-image מ-my-project לקטגוריה של Cloud Storage בשם my-bucket באמצעות חשבון שירות עם כתובת האימייל image-export-service-account@proj-12345.iam.gserviceaccount.com. כברירת מחדל, התמונה מיוצאת כקובץ disk.raw ונדחסת לפורמט הקובץ tar.gz.

gcloud compute images export \
    --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image \
    --project my-project \
    --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
    

למידע על סימונים, אפשר לעיין במאמרי העזרה בנושא gcloud compute images export.

REST

  1. יוצרים חשבון שירות ומקצים לו את התפקידים המינימליים. מידע נוסף על יצירת חשבונות שירות זמין במאמר יצירה וניהול של חשבונות שירות.

    לכל הפחות, צריך להקצות לחשבון השירות של Compute Engine את התפקידים הבאים:

    • roles/compute.storageAdmin
    • roles/storage.objectAdmin
    • roles/storage.admin

    מידע נוסף זמין במאמר הענקת התפקידים הנדרשים לחשבון השירות של Compute Engine.

  2. ב-API, יוצרים בקשת POST ל-Cloud Build API.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "timeout": "7200s",
      "steps":[
        {
          "args":[
            "-timeout=7000s",
            "-source_image=SOURCE_IMAGE",
            "-client_id=api",
            "-format=IMAGE_FORMAT",
            "-destination_uri=DESTINATION_URI",
            "-compute_service_account=SERVICE_ACCOUNT_EMAIL"
          ],
          "name":"gcr.io/compute-image-import/gce_vm_image_export:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "tags":[
        "gce-daisy",
        "gce-daisy-image-export"
      ]
    }
    

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

    • ‫PROJECT_ID: מזהה הפרויקט שמכיל את התמונה שרוצים לייצא.
    • ‫SOURCE_IMAGE: השם של התמונה לייצוא.
    • ‫IMAGE_FORMAT: הפורמט של התמונה המיוצאת. הפורמטים התקפים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.
    • ‫DESTINATION_URI: מיקום ה-URI של Cloud Storage שאליו רוצים לייצא את קובץ התמונה. לדוגמה, gs://my-bucket/my-exported-image.vmdk.
    • ‫SERVICE_ACCOUNT_EMAIL: כתובת האימייל שמשויכת לחשבון השירות של Compute Engine שיצרתם בשלב הקודם.

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

ייצוא תמונה באמצעות VPC משותף

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

למידע נוסף, קראו את המאמר הקצאת התפקידים הנדרשים לחשבון השירות של Cloud Build.

אפשר לייצא את התמונה באמצעות Google Cloud CLI או REST.

gcloud

מייצאים את קובץ האימג' באמצעות הפקודה gcloud compute images export.

gcloud compute images export \
    --image IMAGE_NAME \
    --destination-uri DESTINATION_URI \
    --project PROJECT_ID \
    --network NETWORK \
    --subnet SUBNET \
    --zone ZONE

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

  • ‫IMAGE_NAME: השם של התמונה לייצוא.
  • ‫DESTINATION_URI: מיקום ה-URI של Cloud Storage שאליו רוצים לייצא את קובץ התמונה.
  • ‫PROJECT_ID: מזהה הפרויקט שבו נמצאת התמונה.
  • ‫NETWORK: הנתיב המלא לרשת VPC משותפת. לדוגמה: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME.
  • ‫SUBNET: אופציונלי. הנתיב המלא לרשת משנה של VPC משותף. לדוגמה: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.

    הגדרת המצב הזה תלויה במצב רשת ה-VPC.

    • אם רשת ה-VPC משתמשת במצב מדור קודם, אל תציינו רשת משנה.
    • אם רשת ה-VPC פועלת במצב אוטומטי, אפשר לא לציין את תת-הרשת.
    • אם רשת ה-VPC משתמשת במצב מותאם אישית, צריך לציין את השדה הזה.
  • ‫ZONE: אופציונלי. האזור שבו יש להשתמש לייצוא. האזור הזה חייב להיות זהה לאזור של תת-הרשת. לדוגמה, אם SUBNET נמצא באזור us-west1, אזור הייצוא צריך להיות אחד מהאזורים הבאים: us-west1-a, ‏ us-west1-b או us-west1-c.

    אם ציינתם SUBNET, אתם צריכים לציין גם את האזור.

לדוגמה, הפקודה הבאה מייצאת תמונה בשם example-image מ-my-project לקטגוריה של Cloud Storage בשם my-bucket. בדוגמה הזו, רשת הענן הווירטואלי הפרטי (my-shared-vp) משתמשת ברשת משנה בהתאמה אישית (my-custom-subnet). כברירת מחדל, התמונה מיוצאת כקובץ disk.raw והיא דחוסה בפורמט הקובץ tar.gz.

פקודה לדוגמה

gcloud compute images export \
    --image example-image \
    --destination-uri gs://my-bucket/my-image.tar.gz \
    --project my-project \
    --network projects/my-vpc-project/global/networks/my-shared-vpc \
    --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-custom-subnet \
    --zone us-west1-c
 

REST

  1. מוסיפים את התמונה ל-Cloud Storage.

  2. ב-API, יוצרים בקשת POST ל-Cloud Build API.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "timeout": "7200s",
      "steps":[
        {
          "args":[
            "-timeout=7000s",
            "-source_image=SOURCE_IMAGE",
            "-client_id=api",
            "-format=IMAGE_FORMAT",
            "-destination_uri=DESTINATION_URI",
            "-network=NETWORK",
            "-subnet=SUBNET",
            "-zone=ZONE"
          ],
          "name":"gcr.io/compute-image-import/gce_vm_image_export:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "tags":[
        "gce-daisy",
        "gce-daisy-image-export"
      ]
    }
    

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

    • ‫PROJECT_ID: מזהה הפרויקט שמכיל את התמונה שרוצים לייצא.
    • ‫SOURCE_IMAGE: השם של התמונה לייצוא.
    • ‫IMAGE_FORMAT: הפורמט של התמונה המיוצאת. הפורמטים התקפים כוללים vmdk,‏ vhdx,‏ vpc,‏ vdi ו-qcow2.
    • ‫DESTINATION_URI: מיקום ה-URI של Cloud Storage שאליו רוצים לייצא את קובץ התמונה. לדוגמה, gs://my-bucket/my-exported-image.vmdk.
    • ‫NETWORK: הנתיב המלא לרשת VPC משותפת. לדוגמה: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME.
    • ‫SUBNET: הנתיב המלא אל רשת משנה של VPC משותף. לדוגמה: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.

      הגדרת המצב הזה תלויה במצב רשת ה-VPC.

      • אם רשת ה-VPC משתמשת במצב מדור קודם, אל תציינו רשת משנה.
      • אם רשת ה-VPC פועלת במצב אוטומטי, ציון תת-הרשת הוא אופציונלי.
      • אם רשת ה-VPC משתמשת במצב מותאם אישית, צריך לציין את השדה הזה.
    • ‫ZONE: האזור שבו רוצים להשתמש לייצוא. האזור הזה צריך להיות זהה לאזור של רשת המשנה. לדוגמה, אם SUBNET נמצא באזור us-west1, אזור הייצוא צריך להיות אחד מהאזורים הבאים: us-west1-a, ‏ us-west1-b או us-west1-c.

      ברוב המקרים, ציון תחום הוא אופציונלי. אם מציינים את הערך SUBNET, צריך לציין גם את האזור.

    מידע על ערכים נוספים של args שאפשר לספק זמין בקטע 'אפשרויות' בדף GitHub בנושא ייצוא תמונות של מכונות וירטואליות.

יצירה וייצוא של קובץ אימג' באופן ידני

אם הפקודות gcloud compute images create ו-gcloud compute images export לא עונות על הדרישות שלכם, אתם יכולים ליצור ולייצא תמונה באופן ידני ממכונה של Compute Engine. התהליך הזה כולל שלבים נפרדים ליצירת תמונה ואז לייצוא שלה.

בדוגמה הבאה, שימו לב שהדיסק שנוצר נקרא image-disk.

כדי ליצור ולייצא תמונה:

  1. אופציונלי: עצרו את המכונה שהדיסק מחובר אליה לפני שאתם יוצרים את קובץ ה-snapshot. עצירת המכונה מבטיחה את תקינות התוכן של הדיסק בתמונת המצב.

  2. יוצרים קובץ snapshot של הדיסק. נותנים לתמונת המצב את השם image-snapshot.

    gcloud compute disks snapshot DISK_NAME \
        --snapshot-names image-snapshot

    מחליפים את DISK_NAME בשם הדיסק שרוצים להשתמש בו כדי ליצור את ה-snapshot. כדי למצוא את שם הדיסק, אפשר להציג את רשימת הדיסקים.

  3. כדי ליצור דיסק חדש בשם image-disk באמצעות ה-snapshot image-snapshot, מריצים את הפקודה הבאה:

    gcloud compute disks create image-disk \
        --source-snapshot image-snapshot
  4. יוצרים דיסק זמני בשם temporary-disk שיכיל את הקובץ tar, ומציינים את ה-SIZE של הדיסק כך שיהיה גדול ב-50% לפחות מדיסק קובץ האימג'.

    אחר כך אפשר לנתק ולמחוק את הדיסק.

    gcloud compute disks create temporary-disk \
        --size SIZE

    כאשר SIZE הוא הגודל, בגיגה-בייט או בטרה-בייט, של הדיסק הזמני. לדוגמה, מציינים 100GB כדי ליצור דיסק בנפח 100 גיגה-בייט.

  5. יוצרים מכונה ומפעילים את ההיקף storage-rw במכונה. בנוסף, צריך לצרף את image-disk ואת temporary-disk למכונה כדיסקים משניים עם מאפייני device-name ספציפיים. מחליפים את VM_NAME בשם המכונה שרוצים ליצור.

    gcloud compute instances create VM_NAME \
        --scopes storage-rw \
        --disk name=image-disk,device-name=image-disk \
        --disk name=temporary-disk,device-name=temporary-disk

    שימו לב שאתם מעבירים את ההיקפים של חשבון השירות כדי שתוכלו להעלות את הקובץ ל-Cloud Storage בשלבים הבאים.

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

  6. מתחברים למכונה. מחליפים את VM_NAME בשם המכונה שאליה רוצים להתחבר.

    gcloud compute ssh VM_NAME
  7. מפרמטים את הדיסק הזמני ומתקינים אותו. פירמוט הדיסק מוחק את התוכן של הדיסק הזמני.

    sudo mkdir /mnt/tmp
    sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
    sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
  8. אופציונלי: מעלים את דיסק התמונה ומבצעים שינויים נוספים לפני שיוצרים את הקובץ tar. לדוגמה, יכול להיות שתרצו למחוק קבצים קיימים מהספרייה /home אם אתם לא רוצים שהם יהיו חלק מהתמונה. טוענים את מחיצות הדיסק שצריך לשנות, משנים את הקבצים בדיסק שצריך לשנות, ואז מבטלים את טעינת הדיסק כשמסיימים.

    1. יוצרים ספרייה שאליה אפשר לטעון את הדיסק או המחיצה.

      sudo mkdir /mnt/image-disk
    2. משתמשים בפקודה ls כדי לקבוע איזה דיסק או מחיצת דיסק צריך לטעון.

      ls /dev/disk/by-id/

      הפקודה מדפיסה רשימה של מזהי דיסקים ומחיצות. לדוגמה, לדיסק הבא יש טבלת מחיצות עם מחיצה אחת. המזהה של google-image-disk מצביע על הדיסק המלא שממנו רוצים ליצור קובץ אימג'. המזהה google-image-disk-part1 מצביע על המחיצה הראשונה בדיסק הזה. אם צריך לבצע שינויים בדיסק, טוענים את המחיצה ואז יוצרים את קובץ האימג' מהדיסק המלא.

      google-image-disk
      google-image-disk-part1
      
    3. טוענים את הדיסק או המחיצה. אם בדיסק יש טבלת מחיצות, צריך לטעון את המחיצות הנפרדות של הדיסק. לדוגמה, טעינת google-image-disk-part1.

      sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk

      לחלופין, אם הדיסק בפורמט גולמי ללא טבלת מחיצות, טוענים את כל הדיסק google-image-disk.

      sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
    4. משנים את הקבצים בספרייה /mnt/image-disk כדי להגדיר את הקבצים בדיסק. לדוגמה, אתם יכולים להסיר את הקובץ /mnt/image-disk/home/[USER]/.ssh/authorized_keys כדי למנוע את השיתוף של מפתחות ה-SSH.

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

      sudo umount /mnt/image-disk/
  9. יוצרים קובץ tar של התמונה.

    אחרי שמסיימים להתאים אישית את הקבצים בדיסק של קובץ האימג', יוצרים קובץ דיסק גולמי בדיסק הזמני. השם של קובץ אימג' הדיסק הגולמי חייב להיות disk.raw:

     sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096

    לאחר מכן יוצרים את הקובץ tar.gz:

    cd /mnt/tmp

    sudo tar czvf myimage.tar.gz disk.raw

    הפקודה הזו יוצרת קובץ אימג' של המכונה במיקום הבא:

    /mnt/tmp/myimage.tar.gz

  10. מעלים את התמונה ל-Cloud Storage.

    כדי להעלות את הקובץ tar ל-Cloud Storage, משתמשים ב-Google Cloud CLI שמותקן מראש במכונה.

    1. יוצרים מאגר באמצעות ה-CLI של gcloud.

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

      me@example-instance:~$ 
      gcloud storage buckets create gs://BUCKET_NAME
    2. מעתיקים את הקובץ לקטגוריה החדשה. מחליפים את BUCKET_NAME בשם הקטגוריה שאליה רוצים להעתיק את הקובץ.

      me@example-instance:~$ 
      gcloud storage cp /mnt/tmp/myimage.tar.gz gs://BUCKET_NAME

הקובץ יוצא ל-Cloud Storage. עכשיו אפשר לשתף את התמונה עם אנשים אחרים, או להשתמש בקובץ tar כדי להוסיף תמונה חדשה לפרויקט במסוףGoogle Cloud .

המאמרים הבאים