Membuat image persistent disk dari file ISO


Media penginstalan untuk aplikasi Windows sering kali disediakan sebagai file ISO, tetapi Compute Engine tidak mengizinkan Anda mengekspos file ISO sebagai drive DVD virtual ke instance VM.

Untuk mengakses konten file ISO di satu VM Windows, Anda dapat melakukan salah satu hal berikut:

  • Salin file ISO ke VM dan pasang secara lokal. Pendekatan ini berfungsi dengan baik jika Anda hanya perlu mengakses konten file ISO di satu instance VM.

  • Buat Persistent Disk dari file ISO dan pasang disk dalam mode hanya baca ke satu atau beberapa instance VM. Pendekatan ini berfungsi dengan baik jika beberapa VM memerlukan akses ke konten file ISO.

Dokumen ini menjelaskan cara membuat Persistent Disk dari file ISO dan melampirkan disk dalam mode hanya baca ke satu atau beberapa VM.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Menyiapkan file ISO

Jika file ISO tersedia secara publik melalui HTTP, Anda tidak perlu mendownload file ISO terlebih dahulu. Untuk menggunakan file ISO lokal, Anda dapat mengupload file ISO ke Cloud Storage.

URL HTTP

  1. Di konsol Google Cloud, buka Cloud Shell dengan mengklik tombol Aktifkan Cloud Shell Mengaktifkan Cloud Shell..

    Buka konsol Google Cloud.

  2. Buat variabel lingkungan untuk URL download. URL dapat berupa URL HTTP atau HTTPS, tetapi harus dapat diakses secara anonim.

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

File ISO lokal

  1. Di konsol Google Cloud, buat bucket Cloud Storage.

    Buka konsol Google Cloud.

  2. Upload file ISO.

    Bergantung pada ukuran file ISO, upload dapat memerlukan waktu beberapa menit atau jam.

  3. Di Storage browser, buka objek yang diupload.

  4. Di halaman Detail objek, salin URI objek. URI dimulai dengan gs://.

  5. Buka Cloud Shell dengan mengklik tombol Aktifkan Cloud Shell Mengaktifkan Cloud Shell..

    Buka konsol Google Cloud.

  6. Buat variabel lingkungan untuk URL download. Ganti URI dengan URI yang Anda salin.

    ISO_URL=URI
    

Membuat disk yang berisi konten file ISO

Untuk menyalin konten file ISO ke disk baru, buat VM sementara, lalu buat image dari disk:

  1. Dari Cloud Shell, tentukan nama yang ingin Anda tetapkan ke disk baru:

    DISK_NAME=iso
    
  2. Buat disk baru untuk menyalin konten file ISO:

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

    Gunakan ukuran disk yang lebih besar jika file ISO Anda melebihi 9 GB.

  3. Buat skrip startup untuk VM sementara. Skrip startup akan melakukan tindakan berikut:

    1. Format disk sekunder dengan sistem file NTFS.
    2. Download file ISO dari URL HTTP atau Cloud Storage yang Anda tentukan.
    3. Pasang file ISO dan salin kontennya ke disk sekunder.
    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. Buat VM Windows Server 2019 yang menggunakan skrip startup dan disk yang Anda buat sebelumnya:

    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
    

    VM memerlukan waktu sekitar 2 menit untuk dimulai. Bergantung pada ukuran file ISO, perlu waktu 5-15 menit lagi hingga operasi penyalinan file selesai. Anda dapat mengamati progresnya dengan menjalankan perintah berikut:

    gcloud compute instances tail-serial-port-output iso-copier \
        --zone=$(gcloud config get-value compute/zone)
    
  5. Tunggu hingga VM selesai menjalankan skrip startup:

    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. Matikan dan hapus VM:

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

    Perhatikan bahwa disk sekunder tidak dihapus karena disk tersebut dipasang dengan parameter auto-delete=no.

Disk kini siap digunakan. Anda dapat melampirkan disk dalam mode hanya baca ke satu atau beberapa instance VM dalam zona yang sama.

Membagikan disk di seluruh zona dan region dengan membuat image

Agar konten file ISO tersedia di zona atau region lain, buat image Compute Engine:

  1. Dari Cloud Shell, buat image dari disk yang Anda buat di bagian sebelumnya:

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

Pembersihan

Agar tidak menimbulkan biaya lebih lanjut setelah menyelesaikan proses ini, Anda dapat menghapus resource yang Anda buat:

  1. Hapus disk:

    gcloud compute disks delete $DISK_NAME \
        --zone=$(gcloud config get-value compute/zone) \
        --quiet
    
  2. Menghapus gambar:

    gcloud compute images delete $DISK_NAME
    

Langkah selanjutnya