Förbereda en debian-VHD för Azure

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

Förutsättningar

Det här avsnittet förutsätter att du redan har installerat ett Debian Linux-operativsystem från en .iso fil som laddats ned från Debians webbplats till en virtuell hårddisk (VHD). Det finns flera verktyg för att skapa VHD-filer. Hyper-V är bara ett exempel. Anvisningar om hur du använder Hyper-V finns i Installera rollen Hyper-V och konfigurera en virtuell dator (VM).

Installationsanteckningar

Important

Förberedelserna för fjärr-NVMe i den här artikeln är valfria. Slutför den bara om du skapar en avbildning som du tänker distribuera med en fjärr-NVMe-diskstyrenhet. Om den virtuella måldatorn använder SCSI hoppar du över avsnittet för fjärr-NVMe och behåller standardinställningarna. Fjärr-NVMe kräver en Gen2-avbildning. Innan du skapar en NVMe-avbildning kontrollerar du att Debianversionen finns med i OS-avbildningar som stöds för fjärr-NVMe och att den exakta mål-VM-storleken annonserar NVMe i dess DiskControllerTypes kapacitet.

  • Fler tips om hur du förbereder Linux för Azure finns i Allmänna linux-installationsanteckningar.
  • Det nyare VHDX-formatet stöds inte i Azure. Du kan konvertera disken till VHD-format med hjälp av Hyper-V Manager eller cmdleten convert-vhd .
  • När du installerar Linux-systemet rekommenderar vi att du använder standardpartitioner i stället för Logical Volume Manager (LVM), vilket ofta är standard för många installationer. Med partitioner undviks LVM-namnkonflikter med klonade virtuella datorer, särskilt om en OS-disk någonsin behöver anslutas till en annan virtuell dator för felsökning. LVM eller RAID kan också användas på datadiskar.
  • Konfigurera inte en växlingspartition på OS-disken. Azure Linux-agenten kan konfigureras för att skapa en växlingsfil på den tillfälliga resursdisken. Mer information finns i följande steg.
  • Alla virtuella hårddiskar i Azure måste ha en virtuell storlek som är justerad till 1 MB. När du konverterar från en rådisk till en VHD måste du se till att rådiskens storlek är en multipel av 1 MB före konverteringen. Mer information finns i Installationsanteckningar för Linux.

Important

Växlingsvägledning som använder den tillfälliga resursdisken gäller endast för VM-storlekar som innehåller lokal tillfällig lagring. Fjärrdiskstyrenhetstypen SCSI eller NVMe avgör inte om en resursdisk är tillgänglig.

Förbereda en Debianbild för Azure

Du kan skapa den grundläggande Azure Debian-molnavbildningen med molnavbildningsverktyget för helautomatisk installation (FAI). Om du vill förbereda en bild utan FAI kan du läsa artikeln om allmänna steg.

Följande git clone-kommandon och kommandon för apt-installation hämtades från repot för Debian-molnavbilder. Börja med att klona lagringsplatsen och installera beroenden:

$ 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

Valfritt: Anpassa bygget genom att lägga till skript (till exempel shell-skript) till ./config_space/scripts/AZURE.

Skriptexempel för att anpassa avbildningen

$ 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

Inled alla kommandon som du vill använda för att anpassa avbildningen med $ROOTCMD. Det har aliaset chroot $target.

Verifiera Debian-diskkonfigurationen

För både SCSI- och NVMe-avbildningar lägger du till ett FAI-anpassningsskript som validerar /etc/fstab och avvisar icke-existerande disknamn:

$ 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

Förbereda Debian-avbildningen för fjärr-NVMe

Slutför bara det här avsnittet om du skapar en avbildning för en fjärr-NVMe-diskkontrollant. Annars fortsätter du att skapa Azure Debian-avbildningen utan att lägga till det här skriptet.

Lägg till ytterligare ett FAI-anpassningsskript innan du skapar NVMe-avbildningen. Skriptet gör NVMe-drivrutinerna tillgängliga under tidig start och anger Azure NVMe I/O-timeout.

$ 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

Granska den genererade GRUB-kommandoraden och /etc/initramfs-tools/modules för dubbla poster om din FAI-konfiguration redan ställer in dessa värden. Både nvme och nvme_core måste finnas i de genererade initramfarna.

Skapa Azure Debian-avbildning

$ make image_[release]_azure_amd64

Det här kommandot matar ut en handfull filer i den aktuella katalogen, framför allt image_[release]_azure_amd64.raw bildfilen.

Konvertera raw-avbildningen till VHD för 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"

Den här processen skapar en VHD image_[release]_azure_amd64.vhd med en avrundad storlek så att den kan kopieras till en Azure-disk.

Anmärkning

I stället för att klona salsalagringsplatsen och skapa bilder lokalt kan aktuella stabila bilder skapas och laddas ned från FAI.

När du har skapat en stabil Debian VHD-avbildning och innan du laddar upp kontrollerar du att följande paket är installerade:

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

Utför sedan en fullständig uppgradering:

sudo apt full-upgrade

Nu måste Azure-resurser skapas för den här avbildningen. I det här exemplet används variabeln $rounded_size_adjusted , så den bör vara från samma gränssnittsprocess från föregående steg.

Ange den Hyper-V generationen innan du skapar den hanterade disken. Exemplet är som standard inställt på V1 för en vanlig SCSI-avbildning. Ändra den till V2 endast om du slutför avsnittet om fjärrförberedelse av NVMe eller på annat sätt förbereder en Generation 2-avbildning.

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)

Om bandbredden från din lokala dator till Azure-disken gör att det tar lång tid att bearbeta uppladdningen med azcopy, kan du använda en Azure VM-jumpbox för att påskynda processen. Så här kan den här processen göras:

  1. Skapa ett tar-arkiv av VHD-filen på din lokala dator: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd.
  2. Skapa en Azure virtuell Linux-dator (valfri distribution). Se till att du skapar den med en disk som är tillräckligt stor för att rymma den extraherade VHD:n.
  3. azcopy Ladda ned verktyget till den Azure virtuella Linux-datorn. Du kan hämta den från Kom igång med AzCopy.
  4. Kopiera tarball till den virtuella datorn: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. På den virtuella datorn extraherar du VHD-filen: tar -xf ./image_buster_azure_amd64.vhd.tar.gz. Det här steget tar lite tid baserat på filens storlek.
  6. Slutligen kopierar du på VM:n VHD:n till Azure-disken med azcopy (föregående kommando).

Nu är du redo att använda din virtuella Debian Linux-hårddisk för att skapa nya virtuella datorer i Azure. Om det är första gången som du laddar upp .vhd-filen till Azure kan du läsa Skapa en virtuell Linux-dator från en anpassad disk.

För en befintlig Azure virtuell dator som du behöver flytta från SCSI till NVMe använder du Konvertera Linux och Windows virtuella datorer från SCSI till NVMe. Information om arkitektur och support finns i ÖVERSIKT över NVMe.