Een Debian-VHD voorbereiden voor Azure

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

Prerequisites

In deze sectie wordt ervan uitgegaan dat u al een Debian Linux-besturingssysteem hebt geïnstalleerd vanaf een .iso-bestand dat u hebt gedownload van de Debian-website naar een virtuele harde schijf (VHD). Er bestaan meerdere hulpprogramma's om VHD-bestanden te maken. Hyper-V is slechts één voorbeeld. Zie De Hyper-V-rol installeren en een virtuele machine (VM) configureren voor instructies over het gebruik van Hyper-V.

Installatieopmerkingen

Important

De externe NVMe-voorbereiding in dit artikel is optioneel. Vul dit alleen in als u een installatiekopie maakt die u wilt uitrollen voor gebruik met een externe NVMe-schijfcontroller. Als de doel-VM gebruikmaakt van SCSI, slaat u de externe NVMe-sectie over en behoudt u de standaardinstellingen. Voor externe NVMe is een Gen2-image vereist. Voordat u een NVMe-installatiekopie maakt, controleert u of de Debian-release wordt vermeld in Ondersteunde installatiekopieën van besturingssystemen voor externe NVMe en of de exacte doel-VM-grootte NVMe vermeldt in de eigenschap DiskControllerTypes.

  • Zie algemene linux-installatieopmerkingen voor meer tips over het voorbereiden van Linux voor Azure.
  • De nieuwere VHDX-indeling wordt niet ondersteund in Azure. U kunt de schijf converteren naar VHD-indeling met Hyper-V-beheer of de convert-vhd cmdlet.
  • Wanneer u het Linux-systeem installeert, wordt u aangeraden standaardpartities te gebruiken in plaats van LVM (Logical Volume Manager). Dit is vaak de standaardinstelling voor veel installaties. Als u partities gebruikt, voorkomt u dat de LVM-naam conflicteert met gekloonde VM's, met name als een besturingssysteemschijf ooit aan een andere VIRTUELE machine moet worden gekoppeld voor probleemoplossing. LVM of RAID kan ook worden gebruikt op gegevensschijven.
  • Configureer geen wisselpartitie op de besturingssysteemschijf. De Azure Linux-agent kan worden geconfigureerd voor het maken van een wisselbestand op de tijdelijke resourceschijf. Meer informatie vindt u in de volgende stappen.
  • Alle VHD's in Azure moeten een virtuele grootte hebben die is afgestemd op 1 MB. Wanneer u converteert van een onbewerkte schijf naar VHD, moet u ervoor zorgen dat de grootte van de onbewerkte schijf vóór de conversie een veelvoud van 1 MB is. Zie de installatieopmerkingen voor Linux voor meer informatie.

Important

Wisselrichtlijnen die gebruikmaken van de tijdelijke resourceschijf zijn alleen van toepassing op VM-grootten die lokale tijdelijke opslag bevatten. Het type externe schijfcontroller, SCSI of NVMe, bepaalt niet of er een resourceschijf beschikbaar is.

Een Debian-image voorbereiden voor Azure

U kunt de Azure Debian-cloudbasisinstallatiekopie maken met de hulpprogramma voor cloudinstallatiekopieën van Fully Automatic Installation (FAI). Als u een afbeelding wilt voorbereiden zonder FAI, raadpleegt u het artikel algemene stappen.

De volgende git-kloon- en apt-installatieopdrachten zijn opgehaald uit de Debian-opslagplaats voor cloudinstallatiekopieën. Begin met het klonen van de opslagplaats en het installeren van afhankelijkheden:

$ 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

Optioneel: Pas de build aan door scripts (bijvoorbeeld shellscripts) toe te voegen aan ./config_space/scripts/AZURE.

Voorbeeld van een script om de afbeelding aan te passen

$ 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

Laat alle opdrachten waarmee u de afbeelding wilt aanpassen voorafgaan door $ROOTCMD. Het heeft de alias chroot $target.

De Debian-schijfconfiguratie valideren

Voeg voor zowel SCSI- als NVMe-images een FAI-aanpassingsscript toe dat /etc/fstab valideert en niet-persistente schijfnamen weigert:

$ cat > ./config_space/scripts/AZURE/15-storage-validation <<'EOF'
#!/bin/bash
set -eu

$ROOTCMD findmnt --verify --verbose

if $ROOTCMD grep -Eq '^[[:space:]]*[^#].*[[:space:]]/dev/(sd|nvme)' /etc/fstab; then
    echo 'Replace /dev/sd* and /dev/nvme* entries in /etc/fstab with UUIDs or another persistent identifier.' >&2
    exit 1
fi
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/15-storage-validation

Debian-image voorbereiden voor NVMe op afstand

Vul deze sectie alleen in als u een image maakt voor een externe NVMe-schijfcontroller. Ga anders verder met het bouwen van de Azure Debian-installatiekopieën zonder dit script toe te voegen.

Voeg nog een FAI-aanpassingsscript toe voordat u de NVMe-image maakt. Het script maakt de NVMe-stuurprogramma's beschikbaar tijdens het vroeg opstarten en stelt de time-out voor Azure NVMe I/O in.

$ cat > ./config_space/scripts/AZURE/20-nvme <<'EOF'
#!/bin/bash
set -eu

$ROOTCMD bash -c "printf '%s\n' nvme nvme_core >> /etc/initramfs-tools/modules"
$ROOTCMD update-initramfs -u -k all
$ROOTCMD sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ nvme_core.io_timeout=240"/' /etc/default/grub
$ROOTCMD update-grub

$ROOTCMD modinfo nvme
$ROOTCMD modinfo nvme_core
$ROOTCMD bash -c "lsinitramfs /boot/initrd.img-\$(ls /lib/modules | sort -V | tail -1) | grep -Eq 'nvme(_core)?\\.ko'"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/20-nvme

Important

Controleer de gegenereerde GRUB-opdrachtregel en /etc/initramfs-tools/modules voor dubbele vermeldingen als uw FAI-configuratie deze waarden al instelt. Beide nvme en nvme_core moeten aanwezig zijn in de gegenereerde initramfs.

De Azure Debian-image bouwen

$ make image_[release]_azure_amd64

Met deze opdracht worden een aantal bestanden uitgevoerd in de huidige map, met name het image_[release]_azure_amd64.raw afbeeldingsbestand.

Zet de ruwe image om naar VHD voor 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"

Met dit proces maakt u een VHD image_[release]_azure_amd64.vhd met een afgeronde grootte, zodat deze kan worden gekopieerd naar een Azure schijf.

Opmerking

In plaats van de salsa-repository te klonen en images lokaal te bouwen, kunnen de huidige stabiele images worden gebouwd en gedownload van FAI.

Nadat u een stabiele Debian VHD-image hebt gemaakt en voordat u deze uploadt, controleert u of de volgende pakketten zijn geïnstalleerd:

sudo apt update
sudo apt install hyperv-daemons
sudo apt install waagent # *(Optional but recommended for password resets and the use of extensions)*
sudo apt-get install cloud-init

Voer vervolgens een volledige upgrade uit:

sudo apt full-upgrade

Nu moeten de Azure-resources voor deze image worden aangemaakt. In dit voorbeeld wordt de $rounded_size_adjusted variabele gebruikt, dus deze moet afkomstig zijn uit hetzelfde shell-proces uit de vorige stap.

Stel de Hyper-V generatie in voordat u de beheerde schijf maakt. Het voorbeeld staat standaard op V1 voor een standaard SCSI-image. Wijzig het alleen in V2 als u het gedeelte over externe NVMe-voorbereiding hebt voltooid of anderszins een Generation 2-image voorbereidt.

HYPER_V_GENERATION=V1

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 $HYPER_V_GENERATION

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 \
    --hyper-v-generation $HYPER_V_GENERATION \
    --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)

Als de bandbreedte tussen uw lokale computer en de Azure-schijf ervoor zorgt dat het uploaden met azcopy lang duurt, kunt u een Azure-VM-jumpbox gebruiken om het proces te versnellen. U kunt dit proces als volgt uitvoeren:

  1. Maak een tarball van de VHD op uw lokale computer: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd.
  2. Maak een Azure Linux-VM (distributie van uw keuze). Zorg ervoor dat u deze maakt met een groot genoeg schijf om de geëxtraheerde VHD te bewaren.
  3. Download het azcopy hulpprogramma naar de Azure Linux-VM. U kunt het ophalen uit Aan de slag met AzCopy.
  4. Kopieer de tarball naar de VM: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. Pak op de VM het VHD-bestand uit: tar -xf ./image_buster_azure_amd64.vhd.tar.gz. Deze stap neemt enige tijd in beslag op basis van de grootte van het bestand.
  6. Kopieer ten slotte op de virtuele machine de VHD naar de Azure schijf met azcopy (de voorgaande opdracht).

U kunt nu uw Debian Linux-VHD gebruiken om nieuwe VM's te maken in Azure. Als dit de eerste keer is dat u het .vhd-bestand uploadt naar Azure, raadpleeg Een Linux-VM maken op basis van een aangepaste schijf.

Voor een bestaande Azure-VM die u van SCSI naar NVMe moet verplaatsen, gebruikt u Linux en Windows VM's van SCSI naar NVMe converteren. Zie NVMe-overzicht voor informatie over architectuur en ondersteuning.