יצירת תמונה של דיסק אחסון מתמיד (persistent disk) מקובץ ISO

מדיה להתקנה של אפליקציות ל-Windows מסופקת לעיתים קרובות כקובץ ISO, אבל Compute Engine לא מאפשר לחשוף קובץ ISO ככונן DVD וירטואלי למופע של מכונה וירטואלית.

כדי לגשת לתוכן של קובץ ISO במכונה וירטואלית אחת של Windows, אפשר לבצע אחת מהפעולות הבאות:

  • מעתיקים את קובץ ה-ISO למכונה הווירטואלית ומטמיעים אותו באופן מקומי. הגישה הזו מתאימה אם אתם צריכים לגשת לתוכן של קובץ ה-ISO רק במכונה וירטואלית אחת.

  • יוצרים דיסק אחסון מתמיד (persistent disk) מקובץ ה-ISO ומצרפים את הדיסק במצב קריאה-בלבד למכונה וירטואלית אחת או יותר. הגישה הזו מתאימה אם לכמה מכונות וירטואליות נדרשת גישה לתוכן של קובץ ה-ISO.

במאמר הזה נסביר איך ליצור Persistent Disk מקובץ ISO ולצרף את הדיסק במצב קריאה בלבד למכונה וירטואלית אחת או יותר.

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

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי 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
  • הגדרת אזור ותחום כברירת מחדל

הכנת קובץ ה-ISO

אם קובץ ה-ISO זמין לכולם דרך HTTP, לא צריך להוריד אותו קודם. כדי להשתמש בקובץ ISO מקומי, אפשר להעלות את קובץ ה-ISO ל-Cloud Storage.

כתובת URL מסוג HTTP

  1. במסוף Cloud de Confiance , לוחצים על הלחצן Activate Cloud Shell מפעילים את Cloud Shell. כדי לפתוח את Cloud Shell.

    כניסה ל Cloud de Confiance מסוף

  2. יוצרים משתנה סביבה לכתובת ה-URL להורדה. כתובת ה-URL יכולה להיות מסוג HTTP או HTTPS, אבל חייבת להיות אליה גישה אנונימית.

    ISO_URL=https://example.com/big.iso
    

קובץ ISO מקומי

  1. במסוף Cloud de Confiance , יוצרים קטגוריה של Cloud Storage.

    כניסה ל Cloud de Confiance מסוף

  2. מעלים את קובץ ה-ISO.

    ההעלאה יכולה להימשך כמה דקות או כמה שעות, בהתאם לגודל קובץ ה-ISO.

  3. בדפדפן האחסון, עוברים לאובייקט שהועלה.

  4. בדף Object details, מעתיקים את ה-URI של האובייקט. מזהה ה-URI מתחיל ב-gs://.

  5. לוחצים על הלחצן Activate Cloud Shell מפעילים את Cloud Shell. כדי לפתוח את Cloud Shell.

    כניסה ל Cloud de Confiance מסוף

  6. יוצרים משתנה סביבה לכתובת ה-URL להורדה. מחליפים את URI במזהה המשאבים האחיד (URI) שהעתקתם.

    ISO_URL=URI
    

יצירת דיסק שמכיל את התוכן של קובץ ה-ISO

כדי להעתיק את התוכן של קובץ ה-ISO לדיסק חדש, יוצרים מכונה וירטואלית זמנית ואז יוצרים תמונה מהדיסק:

  1. ב-Cloud Shell, מציינים את השם שרוצים להקצות לדיסק החדש:

    DISK_NAME=iso
    
  2. יוצרים דיסק חדש שאליו מעתיקים את התוכן של קובצי ה-ISO:

    gcloud compute disks create $DISK_NAME \
      --size=10GB \
      --zone=$(gcloud config get-value compute/zone)
    

    אם קובץ ה-ISO גדול מ-9 GB, צריך להשתמש בגודל דיסק גדול יותר.

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

    1. מפרמטים את הדיסק המשני באמצעות מערכת הקבצים NTFS.
    2. מורידים את קובץ ה-ISO מכתובת ה-URL של ה-HTTP או של Cloud Storage שציינתם.
    3. טוענים את קובץ ה-ISO ומעתיקים את התוכן שלו לדיסק המשני.
    cat << "EOF" > startup.ps1
    
    $DownloadDirectory = 'c:\download\'
    $ErrorActionPreference = 'Stop'
    $MetadataUrl = 'http://metadata.google.internal/computeMetadata/v1/instance'
    
    $DownloadUrl = (Invoke-RestMethod `
        -Headers @{"Metadata-Flavor" = "Google"} `
        -Uri "$MetadataUrl/attributes/iso")
    
    mkdir $DownloadDirectory\Source -Force
    
    Write-Host '== Formatting secondary disk... ===' -ForegroundColor Black -BackgroundColor Yellow
    Set-Disk -Number 1 -IsOffline $false
    Clear-Disk -Number 1 -RemoveData -Confirm:$false -ErrorAction SilentlyContinue
    Initialize-Disk -Number 1 -PartitionStyle MBR
    New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D -IsActive |
    Format-Volume -FileSystem 'NTFS' -Confirm:$false
    
    Write-Host '== Downloading ISO... =============' -ForegroundColor Black -BackgroundColor Yellow
    if ($DownloadUrl.StartsWith('gs:')) {
        & gcloud storage cp $DownloadUrl "$DownloadDirectory\Source\image.iso" | Out-Default
    }
    else {
        Import-Module BitsTransfer
        Start-BitsTransfer -Source $DownloadUrl -Destination "$DownloadDirectory\Source\image.iso"
    }
    
    Write-Host '== Mounting ISO... ================' -ForegroundColor Black -BackgroundColor Yellow
    Mount-DiskImage -ImagePath "$DownloadDirectory\Source\image.iso" -StorageType ISO
    
    Write-Host '== Copying ISO contents... ========' -ForegroundColor Black -BackgroundColor Yellow
    Copy-Item 'e:\*' 'd:\' -Force -Recurse -PassThru `
        | Where-Object { -Not $_.PSIsContainer } `
        | Set-ItemProperty -Name IsReadOnly -Value $False
    
    Write-Host '== Completed. =====================' -ForegroundColor Black -BackgroundColor Yellow
    Invoke-RestMethod `
        -Headers @{'Metadata-Flavor'='Google'}  `
        -Method PUT  `
        -Uri "$MetadataUrl/guest-attributes/vm/ready" `
        -Body true
    EOF
    
  4. יוצרים מכונת VM של Windows Server 2019 שמשתמשת בסקריפט לטעינה בזמן ההפעלה ובדיסק שיצרתם קודם:

    gcloud compute instances create iso-copier \
        --machine-type=n1-standard-2 \
        --image-family=windows-2019-core \
        --image-project=windows-cloud \
        --disk=name=$DISK_NAME,auto-delete=no \
        --metadata=enable-guest-attributes=true,iso=$ISO_URL \
        --metadata-from-file=windows-startup-script-ps1=startup.ps1 \
        --scopes=https://www.googleapis.com/auth/devstorage.read_only
    

    הפעלת המכונה הווירטואלית נמשכת כ-2 דקות. בהתאם לגודל של קובץ ה-ISO, יכול להיות שיעברו עוד 5 עד 15 דקות עד שפעולת העתקת הקובץ תושלם. כדי לעקוב אחר ההתקדמות, מריצים את הפקודה הבאה:

    gcloud compute instances tail-serial-port-output iso-copier \
        --zone=$(gcloud config get-value compute/zone)
    
  5. מחכים שהמכונה הווירטואלית תסיים להריץ את הסקריפט לטעינה בזמן ההפעלה:

    until gcloud compute instances get-guest-attributes iso-copier \
        --zone=$(gcloud config get-value compute/zone) \
        --query-path=vm/ready > /dev/null 2>&1
    do
        sleep 5 && echo waiting for VM to finish...
    done
    
  6. משביתים ומוחקים את המכונה הווירטואלית:

    gcloud compute instances delete iso-copier \
        --zone=$(gcloud config get-value compute/zone) \
        --quiet
    

    שימו לב שהדיסק המשני לא נמחק כי הוא הותקן עם הפרמטר auto-delete=no.

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

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

כדי שהתוכן של קובץ ה-ISO יהיה זמין באזורים או בתחומים אחרים, צריך ליצור תמונה של Compute Engine:

  1. מ-Cloud Shell, יוצרים תמונה מהדיסק שיצרתם בקטע הקודם:

    gcloud compute images create $DISK_NAME \
        --source-disk=$DISK_NAME \
        --source-disk-zone=$(gcloud config get-value compute/zone)
    

הסרת המשאבים

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

  1. מוחקים את הדיסק:

    gcloud compute disks delete $DISK_NAME \
        --zone=$(gcloud config get-value compute/zone) \
        --quiet
    
  2. מחיקת התמונה:

    gcloud compute images delete $DISK_NAME
    

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