Condividi tramite


Preparare un disco rigido virtuale Debian per Azure

Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili

Prerequisiti

In questa sezione si presuppone che un sistema operativo Linux Debian sia già stato installato da un file .iso scaricato dal sito Web di Debian in un disco rigido virtuale. Sono disponibili vari strumenti per creare file con estensione .vhd; Hyper-V è solo un esempio. Per istruzioni sull’uso di Hyper-V, vedere Installare il ruolo Hyper-V e configurare una macchina virtuale.

Note sull'installazione

  • Vedere anche Note generali sull'installazione di Linux per altri suggerimenti sulla preparazione di Linux per Azure.
  • Il formato VHDX più recente non è supportato in Azure. È possibile convertire il disco in formato VHD tramite la console di gestione di Hyper-V o il cmdlet convert-vhd .
  • Durante l'installazione del sistema Linux è consigliabile usare partizioni standard anziché LVM, che è spesso la scelta predefinita per numerose installazioni. In questo modo sarà possibile evitare conflitti di nome LVM con le macchine virtuali clonate, in particolare se fosse necessario collegare un disco del sistema operativo a un'altra macchina virtuale per la risoluzione dei problemi. Se si preferisce, su dischi di dati si può usare LVM o RAID.
  • Non configurare una partizione swap nel disco del sistema operativo. L'agente Linux di Azure può essere configurato in modo da creare un file swap sul disco temporaneo delle risorse. Altre informazioni sono disponibili nei passaggi seguenti.
  • Le dimensioni virtuali di tutti i dischi rigidi virtuali su Azure devono essere allineate a 1 MB. Quando si converte un disco non formattato in un disco rigido virtuale, prima della conversione è necessario assicurarsi che le dimensioni del disco non formattato siano un multiplo di 1 MB. Per altre informazioni, vedere Note sull'installazione di Linux.

Preparare un'immagine Debian per Azure

È possibile creare l'immagine Debian Cloud di Base di Azure con il generatore di immagini cloud FAI.

(I comandi git clone e apt install seguenti sono stati estratti dal repository Debian Cloud Images) Per iniziare, clonare il repository e installare le dipendenze:

$ git clone https://salsa.debian.org/cloud-team/debian-cloud-images.git
$ sudo apt install --no-install-recommends ca-certificates debsums dosfstools \
    fai-server fai-setup-storage make python3 python3-libcloud python3-marshmallow \
    python3-pytest python3-yaml qemu-utils udev
$ cd ./debian-cloud-images

(Facoltativo) Personalizzare la compilazione aggiungendo script (ad esempio script della shell) a ./config_space/scripts/AZURE.

Un esempio di script per personalizzare l'immagine è:

$ mkdir -p ./config_space/scripts/AZURE
$ cat > ./config_space/scripts/AZURE/10-custom <<EOF
#!/bin/bash

\$ROOTCMD bash -c "echo test > /usr/local/share/testing"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/10-custom

Si noti che è importante anteporre a tutti i comandi con cui si vuole personalizzare l'immagine perché $ROOTCMD è con alias come chroot $target.

Creare l'immagine Debian di Azure:

$ make image_[release]_azure_amd64

Verrà restituito un numero limitato di file nella directory corrente, in particolare il image_[release]_azure_amd64.raw file di immagine.

Per convertire l'immagine non elaborata in VHD per Azure, è possibile eseguire le operazioni seguenti:

rawdisk="image_[release]_azure_amd64.raw"
vhddisk="image_[release]_azure_amd64.vhd"

MB=$((1024*1024))
size=$(qemu-img info -f raw --output json "$rawdisk" | \
gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')

rounded_size=$(((($size+$MB-1)/$MB)*$MB))
rounded_size_adjusted=$(($rounded_size + 512))

echo "Rounded Size Adjusted = $rounded_size_adjusted"

sudo qemu-img resize "$rawdisk" $rounded_size
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc "$rawdisk" "$vhddisk"

In questo modo viene creato un disco rigido image_[release]_azure_amd64.vhd virtuale con dimensioni arrotondate per poterlo copiare correttamente in un disco di Azure.

Nota

Invece di clonare il repository salsa e creare immagini in locale, le immagini stabili correnti possono essere compilate e scaricate da FAI.

Dopo aver creato un'immagine stabile del disco rigido virtuale Debian, prima di caricare verificare che siano installati i pacchetti seguenti:

  • apt-get install hyperv-daemons
  • apt-get install waagent # facoltativo, ma consigliato per la reimpostazione della password e l'uso delle estensioni
  • apt-get install cloud-init

Eseguire quindi un aggiornamento completo:

  • apt-get full-upgrade

A questo punto è necessario creare le risorse di Azure per questa immagine ( questa usa la $rounded_size_adjusted variabile , quindi deve trovarsi all'interno dello stesso processo della shell precedente).

az group create -l $LOCATION -n $RG

az disk create \
    -n $DISK \
    -g $RG \
    -l $LOCATION \
    --for-upload --upload-size-bytes "$rounded_size_adjusted" \
    --sku standard_lrs --hyper-v-generation V1

ACCESS=$(az disk grant-access \
    -n $DISK -g $RG \
    --access-level write \
    --duration-in-seconds 86400 \
    --query accessSas -o tsv)

azcopy copy "$vhddisk" "$ACCESS" --blob-type PageBlob

az disk revoke-access -n $DISK -g $RG
az image create \
    -g $RG \
    -n $IMAGE \
    --os-type linux \
    --source $(az disk show \
        -g $RG \
        -n $DISK \
        --query id -o tsv)
az vm create \
    -g $RG \
    -n $VM \
    --ssh-key-value $SSH_KEY_VALUE \
    --public-ip-address-dns-name $VM \
    --image $(az image show \
        -g $RG \
        -n $IMAGE \
        --query id -o tsv)

Nota

Se la larghezza di banda dal computer locale al disco di Azure causa molto tempo per elaborare il caricamento con azcopy, è possibile usare un jumpbox della macchina virtuale di Azure per velocizzare il processo. Ecco come eseguire questa operazione:

  1. Creare un tarball del disco rigido virtuale nel computer locale: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd.
  2. Creare una macchina virtuale Linux di Azure (distribuzione preferita). Assicurarsi di crearlo con un disco sufficientemente grande per contenere il disco rigido virtuale estratto.
  3. Scaricare l'utilità azcopy nella macchina virtuale Linux di Azure. Può essere recuperato da qui.
  4. Copiare il file tarball nella macchina virtuale: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. Nella macchina virtuale estrarre il disco rigido virtuale: tar -xf ./image_buster_azure_amd64.vhd.tar.gz (questa operazione richiederà un po' di tempo in base alle dimensioni del file).
  6. Infine nella macchina virtuale copiare il disco rigido virtuale nel disco di Azure con azcopy (il comando riportato sopra).

Passaggi successivi: è ora possibile usare il disco rigido virtuale Debian Linux per creare nuove macchine virtuali in Azure. Se è la prima volta che si carica il file VHD in Azure, vedere Creare una macchina virtuale Linux da un disco personalizzato.