Przygotowywanie wirtualnego dysku twardego Debiana do Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

Wymagania wstępne

W tej sekcji przyjęto założenie, że system operacyjny Debian Linux został już zainstalowany z pliku .iso pobranego z witryny internetowej Debiana do wirtualnego dysku twardego (VHD). Istnieje wiele narzędzi do tworzenia plików vhd. Hyper-V jest tylko jednym przykładem. Aby uzyskać instrukcje dotyczące używania Hyper-V, zobacz Instalowanie roli Hyper-V i konfigurowanie maszyny wirtualnej.

Uwagi dotyczące instalacji

Ważna

Opisane w tym artykule zdalne przygotowanie NVMe jest opcjonalne. Ukończ go tylko wtedy, gdy tworzysz obraz, który zamierzasz wdrożyć za pomocą zdalnego kontrolera dysków NVMe. Jeśli docelowa maszyna wirtualna używa interfejsu SCSI, pomiń sekcję zdalnego urządzenia NVMe i zachowaj ustawienia standardowe. Zdalny NVMe wymaga obrazu Gen2. Przed utworzeniem obrazu NVMe sprawdź, czy wydanie Debiana znajduje się na liście Obsługiwane obrazy systemów operacyjnych dla zdalnego NVMe oraz czy konkretny docelowy rozmiar maszyny wirtualnej ma obsługę NVMe w swoich DiskControllerTypes możliwościach.

  • Aby uzyskać więcej wskazówek dotyczących przygotowywania systemu Linux na platformę Azure, zobacz Ogólne informacje o instalacji systemu Linux.
  • Nowszy format VHDX nie jest obsługiwany w Azure. Dysk można przekonwertować do formatu VHD za pomocą Menedżera funkcji Hyper-V lub polecenia cmdlet convert-vhd.
  • Podczas instalowania systemu Linux zaleca się używanie partycji standardowych, a nie menedżera woluminów logicznych (LVM), który jest często domyślny dla wielu instalacji. Użycie partycji pozwala uniknąć konfliktów nazw LVM z sklonowanymi maszynami wirtualnymi, szczególnie jeśli do rozwiązywania problemów należy dołączyć dysk systemu operacyjnego do innej maszyny wirtualnej. LVM lub RAID można również używać na dyskach danych.
  • Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Agenta Azure Linux można skonfigurować do utworzenia pliku wymiany na dysku zasobów tymczasowych. Więcej informacji można znaleźć w poniższych krokach.
  • Wszystkie VHD na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Podczas konwertowania z dysku nieprzetworzonego na dysk VHD należy upewnić się, że rozmiar nieprzetworzonego dysku to wielokrotność 1 MB przed konwersją. Aby uzyskać więcej informacji, zobacz Informacje o instalacji systemu Linux.

Ważna

Wskazówki dotyczące zamiany, w których jest używany tymczasowy dysk zasobów, mają zastosowanie tylko do rozmiarów maszyn wirtualnych, które obejmują lokalną pamięć tymczasową. Typ kontrolera dysku zdalnego, SCSI lub NVMe, nie określa, czy dysk zasobu jest dostępny.

Przygotowywanie obrazu Debiana do Azure

Możesz utworzyć podstawowy obraz Debian dla chmury Azure za pomocą narzędzia do tworzenia obrazów chmury FAI (Fully Automatic Installation). Aby przygotować obraz bez FAI, zapoznaj się z artykułem z ogólnymi instrukcjami.

Następujące polecenia `git clone` i instalacji za pomocą `apt` pochodzą z repozytorium obrazów chmurowych Debiana. Zacznij od sklonowania repozytorium i zainstalowania zależności:

$ 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

Opcjonalnie: dostosuj proces kompilacji, dodając skrypty (na przykład skrypty powłoki) do ./config_space/scripts/AZURE.

Przykładowy skrypt umożliwiający dostosowanie obrazu

$ 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

Poprzedź poleceniem $ROOTCMD wszystkie polecenia, których chcesz użyć do dostosowania obrazu. Jest aliasowany jako chroot $target.

Weryfikowanie konfiguracji dysku Debian

W przypadku obrazów SCSI i NVMe dodaj skrypt dostosowywania FAI, który weryfikuje /etc/fstab i odrzuca nazwy dysków niepersistentnych:

$ 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

Przygotowywanie obrazu Debiana do zdalnego wirtualnego dysku NVMe

Uzupełnij tę sekcję tylko wtedy, gdy tworzysz obraz dla zdalnego kontrolera dysków NVMe. W przeciwnym razie przejdź do sekcji Kompilowanie obrazu Azure Debian bez dodawania tego skryptu.

Dodaj kolejny skrypt dostosowywania FAI przed skompilowanie obrazu NVMe. Skrypt zapewnia dostępność sterowników NVMe na wczesnym etapie rozruchu i ustawia limit czasu operacji we/wy Azure NVMe.

$ 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

Ważna

Przejrzyj wygenerowany wiersz poleceń GRUB i /etc/initramfs-tools/modules pod kątem duplikujących się wpisów, jeśli konfiguracja FAI już ustawia te wartości. Zarówno nvme , jak i nvme_core musi być obecny w wygenerowanych initramfs.

Kompilowanie obrazu Azure Debian

$ make image_[release]_azure_amd64

To polecenie tworzy w bieżącym katalogu kilka plików, a przede wszystkim plik obrazu image_[release]_azure_amd64.raw.

Przekonwertuj nieprzetworzony obraz na dysk VHD na platformę 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"

Ten proces tworzy dysk VHD image_[release]_azure_amd64.vhd o zaokrąglonym rozmiarze, aby można go było pomyślnie skopiować na dysk Azure.

Uwaga / Notatka

Zamiast klonować repozytorium salsa i budować obrazy lokalnie, aktualne stabilne obrazy można zbudować i pobrać z FAI.

Po utworzeniu stabilnego obrazu VHD systemu Debian i przed przesłaniem sprawdź, czy zainstalowano następujące pakiety:

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

Następnie wykonaj pełne uaktualnienie:

sudo apt full-upgrade

Teraz należy utworzyć zasoby Azure dla tego obrazu. W tym przykładzie użyto zmiennej $rounded_size_adjusted, więc powinna ona pochodzić z tego samego procesu powłoki co w poprzednim kroku.

Ustaw generowanie Hyper-V przed utworzeniem dysku zarządzanego. W przykładzie dla standardowego obrazu SCSI domyślnie ustawiono wartość V1. Zmień to na V2 tylko wtedy, gdy ukończysz sekcję dotyczącą zdalnego przygotowania NVMe lub w przeciwnym razie przygotujesz obraz 2. generacji.

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)

Jeśli przepustowość między komputerem lokalnym a dyskiem platformy Azure sprawia, że przekazywanie trwa długo za pomocą azcopy, możesz użyć maszyny wirtualnej Azure pełniącej rolę jumpboxa, aby przyspieszyć ten proces. Oto jak można wykonać ten proces:

  1. Utwórz tarball dysku VHD na komputerze lokalnym: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd.
  2. Utwórz Azure maszynę wirtualną z systemem Linux (wybraną dystrybucję). Upewnij się, że utworzysz go z dyskiem o wystarczającej pojemności, aby pomieścić wyodrębniony dysk VHD.
  3. azcopy Pobierz narzędzie do maszyny wirtualnej z systemem Azure Linux. Możesz pobrać go z witryny Wprowadzenie do AzCopy.
  4. Skopiuj archiwum tar do maszyny wirtualnej: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. Na maszynie wirtualnej wyodrębnij plik VHD: tar -xf ./image_buster_azure_amd64.vhd.tar.gz. Ten krok zajmuje trochę czasu na podstawie rozmiaru pliku.
  6. Na koniec na maszynie wirtualnej skopiuj dysk VHD na dysk platformy Azure za pomocą azcopy (poprzedniego polecenia).

Teraz możesz użyć wirtualnego dysku twardego systemu Debian Linux w celu utworzenia nowych maszyn wirtualnych w Azure. Jeśli po raz pierwszy przekazujesz plik vhd na platformę Azure, zobacz Tworzenie maszyny wirtualnej z systemem Linux na podstawie dysku niestandardowego.

W przypadku istniejącej maszyny wirtualnej Azure, którą należy przenieść z SCSI do NVMe, użyj polecenia Convert Linux and Windows VMs from SCSI to NVMe (Konwertowanie maszyn wirtualnych z systemu Linux i Windows z SCSI na NVMe). Aby uzyskać informacje o architekturze i obsłudze technicznej, zobacz Omówienie nvme.