Compartir por


Preparar VHD en Debian de Azure

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

Requisitos previos

En esta sección se supone que ya ha instalado un sistema operativo Debian Linux desde un archivo .iso descargado desde el sitio web de Debian a un disco duro virtual (VHD). Existen varias herramientas para crear archivos .vhd. Hyper-V es solo un ejemplo. Para obtener instrucciones sobre cómo usar Hyper-V, consulte Instalación del rol de Hyper-V y configuración de una máquina virtual (VM).

Notas de instalación

  • Para obtener más sugerencias sobre cómo preparar Linux para Azure, consulte Notas generales de instalación de Linux.
  • El formato VHDX más reciente no se admite en Azure. Puede convertir el disco al formato VHD mediante el Administrador de Hyper-V o el cmdlet convert-vhd.
  • Al instalar el sistema Linux, se recomienda usar particiones estándar en lugar de Administrador de volúmenes lógicos (LVM), que suele ser el valor predeterminado para muchas instalaciones. El uso de particiones evita conflictos de nombres de LVM con máquinas virtuales clonadas, especialmente si es necesario conectar un disco del sistema operativo a otra máquina virtual para solucionar problemas. LVM o RAID también se pueden usar en discos de datos.
  • No configure una partición de intercambio en el disco del SO. El agente de Linux de Azure se puede configurar para crear un archivo de intercambio en el disco de recursos temporal. Puede encontrar más información en los pasos siguientes.
  • En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir de un disco sin formato a VHD, debe asegurarse de que el tamaño del disco sin procesar sea un múltiplo de 1 MB antes de la conversión. Para obtener más información, consulte Notas de instalación de Linux.

Preparación de una imagen de Debian para Azure

Puede crear la imagen base de la nube de Azure Debian con el generador de imágenes en la nube de instalación totalmente automática (FAI).

Los siguientes comandos de instalación de git clone y apt se extrajeron del repositorio de imágenes en la nube de Debian. Empiece por clonar el repositorio e instalar dependencias:

$ 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

Opcional: personalice la compilación agregando scripts (por ejemplo, scripts de shell) a ./config_space/scripts/AZURE.

Ejemplo de script para personalizar la imagen

$ 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

Prefijo cualquier comando que quiera tener personalización de la imagen con $ROOTCMD. Se alias como chroot $target.

Compilación de la imagen de Azure Debian

$ make image_[release]_azure_amd64

Este comando genera una serie de archivos en el directorio actual, en particular el archivo de imagen image_[release]_azure_amd64.raw.

Convierta la imagen sin procesar en VHD para Azure:

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"

Este proceso crea un VHD image_[release]_azure_amd64.vhd con un tamaño redondeado para que se pueda copiar correctamente en un disco de Azure.

Nota:

En lugar de clonar el repositorio de salsa y compilar imágenes localmente, las imágenes estables actuales se pueden compilar y descargar desde FAI.

Después de crear una imagen estable de VHD de Debian y antes de cargarla, compruebe que se instalan los siguientes paquetes:

  • apt-get install hyperv-daemons
  • apt-get install waagent # (opcional, pero recomendado para los restablecimientos de contraseña y el uso de extensiones)
  • apt-get install cloud-init

A continuación, realice una actualización completa:

  • apt-get full-upgrade

Ahora se deben crear los recursos de Azure para esta imagen. En este ejemplo se usa la variable $rounded_size_adjusted, por lo que debe estar dentro del mismo proceso de shell del paso anterior.

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)

Si el ancho de banda de la máquina local al disco de Azure provoca mucho tiempo para procesar la carga con azcopy, puede usar un jumpbox de máquina virtual de Azure para acelerar el proceso. Este es el modo en que se puede realizar este proceso:

  1. Cree un tarball del VHD en la máquina local: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd.
  2. Cree una máquina virtual Linux de Azure (distribución de su elección). Asegúrese de crearlo con un disco lo suficientemente grande como para contener el disco duro virtual extraído.
  3. Descargue la utilidad azcopy en la máquina virtual Linux de Azure. Puede recuperarlo de Introducción a AzCopy.
  4. Copie el tarball en la máquina virtual: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. En la máquina virtual, extraiga el disco duro virtual: tar -xf ./image_buster_azure_amd64.vhd.tar.gz. Este paso tarda un poco de tiempo en función del tamaño del archivo.
  6. Por último, en la máquina virtual, copie el disco duro virtual en el disco de Azure con azcopy (el comando anterior).

Ya está listo para usar el disco duro virtual de Debian Linux para crear nuevas máquinas virtuales en Azure. Si es la primera vez que carga el archivo .vhd en Azure, vea Crear una VM Linux a partir de un disco personalizado.