Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
Pré-requisitos
Esta secção assume que já instalou um sistema operativo Debian Linux a partir de um ficheiro .iso descarregado do site Debian para um disco rígido virtual (VHD). Existem várias ferramentas para criar ficheiros .vhd. Hyper-V é apenas um exemplo. Para instruções sobre como usar Hyper-V, consulte Instalar o papel Hyper-V e configurar uma máquina virtual (VM).
Notas de instalação
Importante
A preparação remota do NVMe neste artigo é opcional. Complete-o apenas se estiver a criar uma imagem que pretende implementar com um controlador remoto de disco NVMe. Se a VM de destino usar SCSI, evite a secção remota NVMe e mantenha as definições padrão. O NVMe remoto requer uma imagem Gen2. Antes de criar uma imagem NVMe, verifique se a versão do Debian está listada em Imagens de sistema operativo suportadas para NVMe remoto e se o tamanho exato da VM de destino indica NVMe na respetiva capacidade DiskControllerTypes.
- Para obter mais dicas sobre como preparar o Linux para o Azure, consulte Notas gerais de instalação do Linux.
- O formato VHDX mais recente não é suportado no Azure. Você pode converter o disco para o formato VHD usando o Gerenciador do Hyper-V ou o
convert-vhdcmdlet. - Quando você instala o sistema Linux, recomendamos que você use partições padrão em vez de Logical Volume Manager (LVM), que geralmente é o padrão para muitas instalações. Usar partições evita conflitos de nomes LVM com VMs clonadas, especialmente se um disco do sistema operativo precisar de ser ligado a outra VM para resolução de problemas. LVM ou RAID também podem ser usados em discos de dados.
- Não configures uma partição swap no disco do sistema operativo. O agente Azure Linux pode ser configurado para criar um ficheiro de swap no disco de recurso temporário. Mais informações estão disponíveis nos passos seguintes.
- Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco bruto para VHD, você deve garantir que o tamanho do disco bruto seja um múltiplo de 1 MB antes da conversão. Para obter mais informações, consulte Notas de instalação do Linux.
Importante
A orientação de swap que utiliza o disco de recurso temporário aplica-se apenas a tamanhos de VM que incluam armazenamento temporário local. O tipo de controlador de disco remoto, SCSI ou NVMe, não determina se um disco de recurso está disponível.
Prepare uma imagem Debian para Azure
Pode criar a imagem cloud base do Azure Debian com o construtor de imagens na nuvem de instalação totalmente automática (FAI). Para preparar uma imagem sem FAI, consulte o artigo de passos genéricos.
Os seguintes comandos git clone e de instalação com apt foram obtidos do repositório de imagens cloud do Debian. Comece por clonar o repositório e instalar dependências:
$ 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: Personaliza a build adicionando scripts (por exemplo, scripts de shell) a ./config_space/scripts/AZURE.
Exemplo de script para personalizar a imagem
$ 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
Prefixe quaisquer comandos que queira ter para personalizar a imagem com $ROOTCMD. É aliasado como chroot $target.
Validar a configuração do disco Debian
Para imagens SCSI e NVMe, adicione um script de personalização FAI que valide /etc/fstab e rejeite nomes de disco não persistentes:
$ 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
Preparar a imagem do Debian para NVMe remoto
Preencha esta secção apenas se estiver a criar uma imagem para um controlador remoto de disco NVMe. Caso contrário, continue a construir a imagem Debian do Azure sem adicionar este script.
Adiciona outro script de personalização FAI antes de criares a imagem NVMe. O script torna os controladores NVMe disponíveis durante o arranque inicial e define o tempo limite de E/S do 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
Importante
Verifique a linha de comandos do GRUB gerada e /etc/initramfs-tools/modules quanto à existência de entradas duplicadas, caso a sua configuração FAI já defina esses valores. Tanto nvme como nvme_core devem estar presentes nos initramfs gerados.
Construir a imagem do Azure Debian
$ make image_[release]_azure_amd64
Este comando produz alguns ficheiros no diretório atual, mais especificamente o ficheiro de imagem image_[release]_azure_amd64.raw.
Converter a imagem raw para 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 processo cria um VHD image_[release]_azure_amd64.vhd com tamanho arredondado para que possa ser copiado com sucesso para um disco Azure.
Observação
Em vez de clonar o repositório salsa e de compilar imagens localmente, as atuais imagens estáveis podem ser compiladas e transferidas da FAI.
Depois de criar uma imagem VHD Debian estável e antes de carregar, verifique se os seguintes pacotes estão instalados:
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
Depois realiza uma atualização completa:
sudo apt full-upgrade
Agora, os recursos do Azure têm de ser criados para esta imagem. Este exemplo usa a $rounded_size_adjusted variável, por isso deve vir do mesmo processo shell do passo anterior.
Define a geração Hyper-V antes de criares o disco gerido. O exemplo utiliza V1 por predefinição para uma imagem SCSI padrão. Altere para V2 apenas se concluíres a secção de preparação remota de NVMe ou, em alternativa, preparares uma imagem de Geração 2.
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)
Se a largura de banda da sua máquina local para o disco do Azure estiver a fazer com que o carregamento com azcopy demore muito tempo, pode usar uma VM jumpbox do Azure para acelerar o processo. Veja como este processo pode ser realizado:
- Crie um arquivo tar com o VHD na sua máquina local:
tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd. - Crie uma VM Azure Linux (distribuição à sua escolha). Certifica-te de que o crias com um disco suficientemente grande para guardar o VHD extraído.
- Descarregue o utilitário
azcopypara a VM do Azure Linux. Podes recuperá-lo em Get Started with AzCopy. - Copie o arquivo tar para a MV:
scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~. - Na máquina virtual, extraia o ficheiro VHD:
tar -xf ./image_buster_azure_amd64.vhd.tar.gz. Este passo demora algum tempo, dependendo do tamanho do ficheiro. - Finalmente, na VM, copie o VHD para o disco Azure com
azcopy(o comando anterior).
Conteúdo relacionado
Agora está pronto para usar o seu VHD Debian Linux para criar novas VMs no Azure. Se esta for a primeira vez que você carrega o arquivo .vhd no Azure, consulte Criar uma VM Linux a partir de um disco personalizado.
Para uma VM Azure existente que precisa de passar de SCSI para NVMe, use Convert VMs Linux e Windows de SCSI para NVMe. Para informações sobre arquitetura e suporte, consulte a visão geral do NVMe.