Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen
Voraussetzungen
In diesem Abschnitt wird davon ausgegangen, dass Sie bereits ein Debian Linux-Betriebssystem auf der Grundlage einer ISO-Datei von der Debian-Website auf einer virtuellen Festplatte (Virtual Hard Disk, VHD) installiert haben. Zum Erstellen von VHD-Dateien stehen mehrere verschiedene Tools bereit. Hyper-V ist nur ein Beispiel. Anweisungen zur Verwendung von Hyper-V finden Sie unter Installieren von Hyper-V und Erstellen eines virtuellen Computers.
Installationshinweise
Important
Die Remote-NVMe-Vorbereitung in diesem Artikel ist optional. Führen Sie dies nur aus, wenn Sie ein Image erstellen, das Sie mit einem Remote-NVMe-Datenträgercontroller bereitstellen möchten. Wenn die Ziel-VM SCSI verwendet, überspringen Sie den Remote-NVMe-Abschnitt, und behalten Sie die Standardeinstellungen bei. Remote NVMe erfordert ein Gen2-Image. Bevor Sie ein NVMe-Image erstellen, vergewissern Sie sich, dass das Debian-Release in Unterstützte Betriebssystemimages für Remote-NVMe aufgeführt ist und dass die genaue Ziel-VM-Größe NVMe in ihrer DiskControllerTypes-Eigenschaft ausweist.
- Weitere Tipps zur Vorbereitung von Linux für Azure finden Sie unter Allgemeine Installationshinweise für Linux.
- Das modernere VHDX-Format wird in Azure nicht unterstützt. Sie können den Datenträger mit dem Hyper-V-Manager oder dem
convert-vhd-Cmdlet in das VHD-Format konvertieren. - Beim Installieren des Linux-Systems wird empfohlen, anstelle von LVM (Logical Volume Manager, logische Volumeverwaltung) – bei vielen Installationen oftmals voreingestellt – die Standardpartitionen zu verwenden. Durch die Verwendung von Partitionen wird vermieden, dass ein LVM-Namenskonflikt mit geklonten VMs auftritt, insbesondere dann, wenn ein Betriebssystemdatenträger zu Fehlerbehebungszwecken mit einer anderen VM verbunden wird. LVM oder RAID können ebenfalls auf Datenträgern verwendet werden.
- Konfigurieren Sie keine Auslagerungspartition auf dem Betriebssystemdatenträger. Der Azure-Linux-Agent kann konfiguriert werden, eine Auslagerungsdatei auf dem temporären Ressourcendatenträger zu erstellen. Weitere Informationen erhalten Sie in den folgenden Schritten.
- Alle VHDs in Azure müssen eine virtuelle Größe aufweisen, die an 1 MB ausgerichtet ist. Stellen Sie beim Konvertieren von einem RAW-Datenträger in VHD sicher, dass die Größe des RAW-Datenträgers vor der Konvertierung ein Vielfaches von 1 MB beträgt. Weitere Informationen finden Sie in den Linux-Installationshinweisen.
Important
Hinweise zur Swapkonfiguration, die den temporären Ressourcendatenträger verwenden, gelten nur für VM-Größen, die lokalen temporären Speicher umfassen. Der Typ des Remotedatenträgercontrollers, SCSI oder NVMe, bestimmt nicht, ob ein Ressourcendatenträger verfügbar ist.
Vorbereiten eines Debian-Images für Azure
Sie können das Azure Debian-Basis-Cloud-Image mit dem FAI-Cloud-Image-Builder (Fully Automatic Installation, vollautomatische Installation) erstellen. Um ein Image ohne FAI vorzubereiten, lesen Sie den Artikel mit den allgemeinen Schritten.
Die folgenden git clone- und apt-Installationsbefehle wurden aus dem Debian-Cloudimagerepository gepullt. Klonen Sie zunächst das Repository, und installieren Sie Abhängigkeiten:
$ 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
Optional: Passen Sie den Build an, indem Sie Skripte (z. B. Shell-Skripte) zu ./config_space/scripts/AZURE hinzufügen.
Skriptbeispiel zum Anpassen des Images
$ 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
Stellen Sie allen Befehlen, die Sie zur Anpassung des Images verwenden möchten, $ROOTCMD voran. Als Alias wird chroot $target verwendet.
Überprüfen der Debian-Datenträgerkonfiguration
Fügen Sie für SCSI- und NVMe-Images ein FAI-Anpassungsskript hinzu, das nichtpersistent Datenträgernamen überprüft /etc/fstab und ablehnt:
$ 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
Vorbereiten des Debian-Images für remote NVMe
Schließen Sie diesen Abschnitt nur ab, wenn Sie ein Image für einen REMOTE-NVMe-Datenträgercontroller erstellen. Fahren Sie andernfalls mit dem Build des Azure Debian-Images fort, ohne dieses Skript hinzuzufügen.
Fügen Sie ein weiteres FAI-Anpassungsskript hinzu, bevor Sie das NVMe-Image erstellen. Das Skript stellt die NVMe-Treiber während des frühen Starts zur Verfügung und legt das Azure NVMe-E/A-Timeout fest.
$ 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
Überprüfen Sie die generierte GRUB-Befehlszeile und /etc/initramfs-tools/modules auf doppelte Einträge, wenn ihre FAI-Konfiguration diese Werte bereits festlegt. Sowohl nvme als auch nvme_core müssen im generierten Initramfs vorhanden sein.
Erstellen des Azure Debian-Images
$ make image_[release]_azure_amd64
Mit diesem Befehl werden einige Dateien im aktuellen Verzeichnis ausgegeben, insbesondere die Imagedatei image_[release]_azure_amd64.raw.
Konvertieren Sie das unformatierte Image für Azure in das VHD-Format:
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"
Bei diesem Vorgang wird die VHD image_[release]_azure_amd64.vhd mit einer gerundeten Größe erstellt, sodass sie erfolgreich auf einen Azure-Datenträger kopiert werden kann.
Hinweis
Anstatt das Salsa-Repository zu klonen und Images lokal zu erstellen, können aktuelle stabile Images auf FAI erstellt und heruntergeladen werden.
Überprüfen Sie nach dem Erstellen eines stabilen Debian-VHD-Images und vor dem Hochladen, ob die folgenden Pakete installiert sind:
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
Führen Sie dann ein vollständiges Upgrade durch:
sudo apt full-upgrade
Jetzt müssen die Azure-Ressourcen für dieses Image erstellt werden. In diesem Beispiel wird die Variable $rounded_size_adjusted verwendet, daher sollte sie aus demselben Shellprozess aus dem vorherigen Schritt stammen.
Legen Sie die Hyper-V Generation fest, bevor Sie den verwalteten Datenträger erstellen. Im Beispiel wird für ein Standard-SCSI-Image standardmäßig V1 verwendet. Ändern Sie dies nur zu V2, wenn Sie den Abschnitt zur Remote-NVMe-Vorbereitung abschließen oder anderweitig ein Image der Generation 2 vorbereiten.
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)
Wenn die Bandbreite von Ihrem lokalen Computer zum Azure-Datenträger zu einer langwierigen Verarbeitung des Uploads mit azcopy führt, können Sie eine Azure-VM-Jumpbox verwenden, um den Prozess zu beschleunigen. Hier wird gezeigt, wie es geht:
- Erstellen Sie einen Tarball der VHD auf Ihrem lokalen Computer:
tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd. - Erstellen Sie eine Azure Linux-VM (Distribution Ihrer Wahl). Stellen Sie sicher, dass Sie es mit einem Datenträger erstellen, der groß genug ist, um die extrahierte VHD aufzunehmen.
- Laden Sie das Hilfsprogramm
azcopyauf die Azure Linux-VM herunter. Sie können es unter Erste Schritte mit AzCopy abrufen. - Kopieren Sie den Tarball auf die VM:
scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~. - Extrahieren Sie auf der VM die VHD:
tar -xf ./image_buster_azure_amd64.vhd.tar.gz. Dieser Schritt dauert je nach Größe der Datei eine Weile. - Zum Schluss kopieren Sie die VHD auf der VM mit
azcopy(oben stehender Befehl) auf den Azure-Datenträger.
Zugehöriger Inhalt
Sie können jetzt Ihre Debian Linux-VHD verwenden, um neue VMs in Azure zu erstellen. Wenn Sie die .vhd-Datei zum ersten Mal in Azure hochladen, siehe Erstellen einer Linux-VM aus einem benutzerdefinierten Datenträger.
Für eine vorhandene Azure-VM, die Sie von SCSI zu NVMe migrieren müssen, verwenden Sie Linux- und Windows-VMs von SCSI zu NVMe konvertieren. Informationen zu Architektur und Support finden Sie in der NVMe-Übersicht.