Linux voorbereiden op imaging in Azure

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

De Azure sla (Platform Service Level Agreement) is alleen van toepassing op virtuele machines (VM's) waarop het Linux-besturingssysteem wordt uitgevoerd wanneer u een van de goedgekeurde distributies gebruikt. Voor goedgekeurde distributies biedt Azure Marketplace vooraf geconfigureerde Linux-installatiekopieën. Voor meer informatie, zie:

Alle andere distributies die worden uitgevoerd op Azure, waaronder door de community ondersteunde en niet-goedgekeurde distributies, hebben enkele vereisten.

Dit artikel is gericht op algemene richtlijnen voor het uitvoeren van uw Linux-distributie op Azure. Dit artikel kan niet uitgebreid zijn, omdat elke distributie anders is. Zelfs als u voldoet aan alle criteria die in dit artikel worden beschreven, moet u mogelijk uw Linux-systeem aanzienlijk aanpassen om het goed uit te voeren.

Algemene opmerkingen bij de installatie van Linux

Important

De externe NVMe-voorbereidingsstappen in dit artikel zijn optioneel. Vul deze alleen in als u een image maakt dat u wilt uitrollen met een externe NVMe-schijfcontroller. Als de doel-VM gebruikmaakt van SCSI, slaat u elke stap over die is gelabeld voor externe NVMe en behoudt u de standaardinstellingen. Voor externe NVMe is een Gen2-image en een ondersteunde besturingssysteemversie vereist. Controleer de mogelijkheden van de exacte doel-VM-grootte DiskControllerTypes en raadpleeg ondersteunde besturingssysteeminstallatiekopieën voor externe NVMe. Leid het controllertype niet alleen af van de generatie van de VM-serie.

  • Azure biedt geen ondersteuning voor de indeling Hyper-V virtuele harde schijf (VHDX). Azure ondersteunt alleen vaste VHD. U kunt de schijf converteren naar VHD-indeling met behulp van Hyper-V Manager of de cmdlet Convert-VHD . Als u VirtualBox gebruikt, selecteert u Vaste grootte in plaats van de standaardgrootte (dynamisch toegewezen) wanneer u de schijf maakt.

  • Azure ondersteunt virtuele machines van Gen1 (BIOS boot) en Gen2 (UEFI boot).

  • De VFAT-kernelmodule (Virtual File Allocation Table) moet zijn ingeschakeld in de kernel.

  • De maximale grootte die is toegestaan voor de VHD is 1023 GB.

  • Wanneer u het Linux-systeem installeert, wordt u aangeraden standaardpartities te gebruiken in plaats van LVM (Logical Volume Manager). LVM is de standaardinstelling voor veel installaties.

    Door standaardpartities te gebruiken, voorkomt u LVM-naamconflicten bij gekloonde VM's, vooral als een OS-schijf ooit aan een andere identieke VM wordt gekoppeld om problemen op te lossen. U kunt LVM of RAID gebruiken op gegevensschijven.

  • Kernelondersteuning voor het aankoppelen van UDF-bestandssystemen is noodzakelijk. Bij de eerste opstartbewerking op Azure wordt de inrichtingsconfiguratie doorgegeven aan de Virtuele Linux-machine via UDF-geformatteerde media die zijn gekoppeld aan de gast. De Azure Linux-agent moet het UDF-bestandssysteem koppelen om de configuratie ervan te lezen en de VM in te richten.

  • Linux-kernelversies ouder dan 2.6.37 bieden geen ondersteuning voor Numa (Non-Uniform Memory Access) op Hyper-V met grotere VM-grootten. Dit probleem is voornamelijk van invloed op oudere distributies die gebruikmaken van de upstream Red Hat 2.6.32-kernel. Het is opgelost in Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504).

    Systemen met aangepaste kernels die ouder zijn dan 2.6.37 of RHEL-kernels ouder dan 2.6.32-504, moeten de opstartparameter numa=off instellen op de kernel-opdrachtregel in grub.conf. Zie Red Hat KB 436883 voor meer informatie.

  • Configureer geen wisselpartitie op de besturingssysteemschijf. U kunt de Linux-agent configureren voor het maken van een wisselbestand op de tijdelijke resourceschijf, zoals verderop in dit artikel wordt beschreven.

  • Alle VHD's op Azure moeten een virtuele grootte hebben die is afgestemd op 1 MB (1024 x 1024 bytes). 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, zoals verderop in dit artikel wordt beschreven.

  • Gebruik de meest recente versie van de distributie, de pakketten en de software.

  • Verwijder gebruikers en systeemaccounts, openbare sleutels, gevoelige gegevens, onnodige software en toepassingen.

Opmerking

Cloud-init versie 21.2 of hoger verwijdert de UDF-vereiste. Maar zonder dat de udf module is ingeschakeld, koppelt de CD-ROM niet tijdens het inrichten, waardoor de aangepaste gegevens niet kunnen worden toegepast. Een tijdelijke oplossing is het toepassen van gebruikersgegevens. In tegenstelling tot aangepaste gegevens worden gebruikersgegevens echter niet versleuteld. Zie de indelingen van gebruikersgegevens in de cloud-init-documentatie voor meer informatie.

Kernelmodules installeren zonder Hyper-V

Azure wordt uitgevoerd op de Hyper-V hypervisor, zodat voor Linux bepaalde kernelmodules moeten worden uitgevoerd in Azure. Als u een VIRTUELE machine hebt die buiten Hyper-V is gemaakt, bevatten de Linux-installatieprogramma's mogelijk niet de stuurprogramma's voor Hyper-V op de eerste RAM-schijf (initrd of initramfs), tenzij de VIRTUELE machine detecteert dat deze wordt uitgevoerd in een Hyper-V-omgeving.

Wanneer u een ander virtualisatiesysteem (zoals VirtualBox of KVM) gebruikt om uw Linux-installatiekopieën voor te bereiden, moet u mogelijk initrd opnieuw bouwen, zodat ten minste de hv_vmbus modules en hv_storvsc kernelmodules beschikbaar zijn op de eerste RAM-schijf. Dit bekende probleem is bedoeld voor systemen op basis van de upstream Red Hat-distributie en mogelijk andere.

Het mechanisme voor het opnieuw opbouwen van de initrd- of initramfs-image kan variëren, afhankelijk van de distributie. Raadpleeg de documentatie of ondersteuning van uw distributie voor de juiste procedure. Hier volgt een voorbeeld voor het herbouwen van initrd met behulp van het mkinitrd hulpprogramma:

  1. Maak een back-up van de bestaande initrd-image:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Bouw initrd opnieuw met behulp van de hv_vmbus modules en hv_storvsc kernelmodules:

    sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
    

Formaat van VHD’s wijzigen

VHD-images in Azure moeten een virtuele grootte hebben die is uitgelijnd op 1 MB. Normaal gesproken worden VHD's die zijn gemaakt via Hyper-V correct uitgelijnd. Als de VHD niet juist is uitgelijnd, krijgt u mogelijk een foutbericht te zien zoals in het volgende voorbeeld wanneer u probeert een image te maken van uw VHD:

The VHD http://<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).

In dit geval wijzigt u de grootte van de VIRTUELE machine met behulp van de Hyper-V Manager-console of de PowerShell-cmdlet Resize-VHD . Als u niet in een Windows-omgeving werkt, raden we u aan om qemu-img te gebruiken om de VHD (indien nodig) te converteren en de grootte ervan aan te passen.

Opmerking

Er is een bekende fout in qemu-img voor QEMU versie 2.2.1 en een aantal latere versies die resulteert in een onjuist opgemaakte VHD. Het probleem is opgelost in QEMU 2.6. U wordt aangeraden versie 2.2.0 of lager te gebruiken of versie 2.6 of hoger te gebruiken.

  1. Het formaat van de VHD rechtstreeks wijzigen met behulp van hulpprogramma's zoals qemu-img of vbox-manage kan leiden tot een niet-opstartbare VHD. We raden aan eerst de VHD om te zetten naar een raw-schijfimage met behulp van de volgende code.

    Als de VM-image is gemaakt als een raw-schijfimage, kunt u deze stap overslaan. Het aanmaken van de VM-image als raw-schijfimage is standaard in sommige hypervisors, zoals KVM.

    sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Bereken de benodigde grootte van de schijfimage zodat de virtuele grootte is uitgelijnd op een veelvoud van 1 MB. Het volgende Bash-shellscript gebruikt qemu-img info om de virtuele grootte van de schijfkopie te bepalen en berekent vervolgens de grootte afgerond op de eerstvolgende 1 MB:

    rawdisk="MyLinuxVM.raw"
    vhddisk="MyLinuxVM.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))
    
    echo "Rounded Size = $rounded_size"
    
  3. Wijzig het formaat van de onbewerkte schijf met behulp van $rounded_size:

    sudo qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Converteer de onbewerkte schijf terug naar een VHD met een vaste grootte:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

    Of verwijder bij QEMU-versies van vóór 2.6 de optie force_size:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

Vereisten voor Linux-kernel

De stuurprogramma's voor Linux Integration Services (LIS) voor Hyper-V en Azure worden rechtstreeks bijgedragen aan de upstream Linux-kernel. Veel distributies met een recente Linux-kernelversie (zoals 3.x) hebben deze stuurprogramma's al beschikbaar of bieden op een andere manier backported versies van deze stuurprogramma's met hun kernels.

LIS-stuurprogramma's worden voortdurend bijgewerkt in de upstream kernel met nieuwe fixes en functies. Indien mogelijk raden we u aan een goedgekeurde distributie uit te voeren die deze fixes en updates bevat.

Als u een variant van RHEL-versies 6.0 tot en met 6.3 gebruikt, moet u de nieuwste LIS-stuurprogramma's voor Hyper-V installeren. Vanaf RHEL 6.4+ (en derivaten) zijn de LIS-stuurprogramma's al opgenomen in de kernel, dus u hebt geen extra installatiepakketten nodig.

Als een aangepaste kernel vereist is, raden we een recente kernelversie aan (zoals 3.8+). Voor distributies of leveranciers die hun eigen kernel onderhouden, moet u de LIS-stuurprogramma's regelmatig van de upstreamkernel naar uw aangepaste kernel backporten.

Zelfs als u al een relatief recente kernelversie uitvoert, raden we u ten zeerste aan om eventuele upstream-oplossingen in de LIS-stuurprogramma's bij te houden en deze indien nodig te backporteren. De locaties van de LIS-stuurprogrammabronbestanden worden opgegeven in het ONDERHOUDERS-bestand in de Linux-kernelbronstructuur:

    F:    arch/x86/include/asm/mshyperv.h
    F:    arch/x86/include/uapi/asm/hyperv.h
    F:    arch/x86/kernel/cpu/mshyperv.c
    F:    drivers/hid/hid-hyperv.c
    F:    drivers/hv/
    F:    drivers/input/serio/hyperv-keyboard.c
    F:    drivers/net/hyperv/
    F:    drivers/scsi/storvsc_drv.c
    F:    drivers/video/fbdev/hyperv_fb.c
    F:    include/linux/hyperv.h
    F:    tools/hv/

De actieve kernel van de virtuele machine moet de volgende patches bevatten. Deze lijst kan niet worden voltooid voor alle distributies.

Azure Linux-agent

De Azure Linux-agent (waagent) richt een virtuele Linux-machine in Azure. U kunt de nieuwste versie ophalen, problemen melden of pull-aanvragen indienen bij de Linux-agent GitHub opslagplaats.

Hier volgen enkele overwegingen voor het gebruik van de Azure Linux-agent:

  • De Linux-agent wordt uitgebracht onder de Apache 2.0-licentie. Veel distributies bieden al .rpm- of .deb-pakketten voor de agent. U kunt deze pakketten eenvoudig installeren en bijwerken.
  • Voor de Azure Linux-agent is Python v2.6+ vereist.
  • De agent vereist ook de python-pyasn1 module. De meeste distributies bieden deze module als een afzonderlijk pakket dat moet worden geïnstalleerd.
  • In sommige gevallen is de Azure Linux-agent mogelijk niet compatibel met NetworkManager. Veel van de pakketten (.rpm of .deb) die door distributies worden geleverd, configureren NetworkManager als een conflict met het waagent pakket. In deze gevallen wordt NetworkManager door de agent verwijderd wanneer u het Linux-agentpakket installeert.
  • De Azure Linux-agent moet versie minimaal ondersteunde versie of hoger zijn.

Opmerking

Zorg ervoor dat de modules udf en vfat zijn ingeschakeld. Het uitschakelen van de module udf veroorzaakt een fout bij het inrichten. Als u de vfat module uitschakelt, worden zowel inrichtings- als opstartfouten veroorzaakt. Cloud-init versie 21.2 of hoger kan VM's inrichten zonder UDF als beide voorwaarden bestaan:

  • U hebt de virtuele machine gemaakt met behulp van openbare SSH-sleutels en geen wachtwoorden.
  • U hebt geen aangepaste gegevens opgegeven.

Algemene Systeemvereisten voor Linux

  1. Wijzig de kernel-opstartlijn in GRUB of GRUB2 om de volgende parameters op te nemen, zodat alle consoleberichten naar de eerste seriële poort worden verzonden. Deze berichten kunnen Azure-ondersteuning helpen bij het opsporen van eventuele problemen.

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    U wordt ook aangeraden de volgende parameters te verwijderen als deze bestaan:

    rhgb quiet crashkernel=auto
    

    Grafisch en stil opstarten is niet handig in een cloudomgeving, waarbij u alle logboeken naar de seriële poort wilt verzenden. U kunt de crashkernel geconfigureerde optie indien nodig laten, maar met deze parameter wordt de hoeveelheid beschikbaar geheugen in de VIRTUELE machine met ten minste 128 MB verminderd. Het verminderen van het beschikbare geheugen kan problematisch zijn voor kleinere VM-grootten.

  2. Nadat u klaar bent met bewerken /etc/default/grub, bouwt u de GRUB-configuratie opnieuw. Voer alleen de opdracht uit die geschikt is voor uw distributie.

    Voor distributies op basis van Debian of Ubuntu voert u het volgende uit:

    sudo update-grub
    

    Voor distributies die, zoals RHEL, Oracle Linux en SUSE, bieden grub2-mkconfig, voert u het volgende uit:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Voer op distributies die in plaats daarvan grub-mkconfig aanbieden het volgende uit:

    sudo grub-mkconfig -o /boot/grub/grub.cfg
    

    Het GRUB-configuratiepad kan verschillen voor UEFI-installaties. Als uw distributie een ander pad gebruikt, gebruikt u het pad dat voor die distributie wordt beschreven.

  3. Voeg de Hyper-V modules toe aan de eerste RAM-schijf. Voer alleen de procedure uit die overeenkomt met de hulpprogramma's die door uw distributie worden gebruikt.

    1. Voer voor een distributie op basis van dracut het volgende uit:
    cd /boot
    sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak
    sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc"
    
    1. Voor een distributie die gebruikmaakt mkinitramfs, voert u deze procedure uit in plaats van de dracut-procedure:
    cd /boot
    sudo cp initrd.img-<kernel-version> initrd.img-<kernel-version>.bak
    sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version> --with=hv_vmbus,hv_netvsc,hv_storvsc
    
  4. Alleen als u een installatiekopie maakt voor een externe NVMe-schijfcontroller, configureert en verifieert u de ondersteuning voor NVMe-opstartbewerkingen. Sla anders deze stap over. De exacte opdrachten kunnen per distributie variëren.

    1. Bouw initramfs opnieuw met de NVMe-stuurprogramma's met behulp van de methode voor uw distributie.

      Voor een distributie op basis van dracut maakt u de NVMe-stuurprogramma's persistent in toekomstige initramfs-installatiekopieën en bouwt u de huidige initramfs opnieuw op:

      sudo mkdir -p /etc/dracut.conf.d
      printf '%s\n' 'add_drivers+=" nvme nvme_core "' | sudo tee /etc/dracut.conf.d/azure-nvme.conf
      sudo dracut --force
      

      Voor een distributie op basis van initramfs maakt u de NVMe-stuurprogramma's persistent en herbouwt u initramfs:

      printf '%s\n' nvme nvme_core | sudo tee -a /etc/initramfs-tools/modules
      sudo update-initramfs -u -k all
      
    2. Voeg toe nvme_core.io_timeout=240 aan de bestaande kernelopdrachtregel in /etc/default/gruben bouw vervolgens de GRUB-configuratie opnieuw met behulp van de opdracht die geschikt is voor uw distributie.

    3. Controleer of beide NVMe-stuurprogrammamodules beschikbaar zijn op het systeem. Voer beide opdrachten uit:

      modinfo nvme
      modinfo nvme_core
      

      Elke opdracht moet informatie over de module retourneren. Als een van beide modules niet wordt gevonden, installeert of inschakelt u deze door de documentatie van uw distributie te volgen voordat u doorgaat.

    4. Controleer of beide NVMe-stuurprogramma's zijn opgenomen in initramfs. Voer alleen de opdracht voor uw distributie uit.

      Voer voor een distributie op basis van dracut het volgende uit:

      sudo lsinitrd /boot/initramfs-$(uname -r).img | grep -E 'nvme(_core)?\.ko'
      

      Voer voor een distributie op basis van initramfs-tools het volgende uit:

      sudo lsinitramfs /boot/initrd.img-$(uname -r) | grep -E 'nvme(_core)?\.ko'
      

      De uitvoer moet zowel de nvme- als de nvme_core-stuurprogramma's weergeven. Als dit niet het probleem is, raadpleegt u de documentatie van uw distributie en bouwt u de eerste RAM-schijf opnieuw op voordat u doorgaat.

  5. Zorg ervoor dat de SSH-server is geïnstalleerd en geconfigureerd om te starten tijdens het opstarten. Deze configuratie is meestal de standaardinstelling.

  6. Installeer de Azure Linux-agent.

    De Azure Linux Agent is vereist om een Linux-image in te richten op Azure. Veel distributies bieden de agent als een .rpm- of .deb-pakket. Het pakket wordt meestal genoemd WALinuxAgent of walinuxagent. U kunt de agent ook handmatig installeren door de stappen in de handleiding Azure Linux-agent te volgen.

    Opmerking

    Zorg ervoor dat de modules udf en vfat zijn ingeschakeld. Als u ze verwijdert of uitschakelt, treedt er een inrichtings- of opstartfout op. Cloud-init versie 21.2 of hoger verwijdert de UDF-vereiste.

    Installeer de Azure Linux-agent, cloud-init en andere benodigde hulpprogramma's. Voer alleen de opdracht uit voor pakketbeheer die beschikbaar is op uw systeem.

    Voer voor dnf het volgende uit:

     sudo dnf install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Als uw systeem yum geeft in plaats van dnf, vervang dan dnf door yum in de voorgaande opdracht.

    Voer voor apt het volgende uit:

    sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Voer voor zypper het volgende uit:

    sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Schakel vervolgens de agent en cloud-init in voor alle distributies:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. Maak geen wisselruimte op de besturingssysteemschijf.

    U kunt de Azure Linux-agent of cloud-init gebruiken om wisselruimte te configureren via de lokale resourceschijf. Azure koppelt deze resourceschijf aan de VIRTUELE machine na het inrichten. De lokale bronschijf is tijdelijk en wordt mogelijk leeggemaakt wanneer de VM buiten gebruik wordt gesteld.

    Important

    Deze instructies zijn van toepassing of de externe schijfcontroller SCSI of NVMe is. Ze hebben een VM-grootte nodig die een lokale tijdelijke resourceschijf bevat. Het type externe schijfcontroller bepaalt niet of er een resourceschijf beschikbaar is.

    1. Kies en configureer één methode voor het beheren van wisselruimte.

      Als u de Azure Linux-agent wilt gebruiken, wijzigt u de volgende parameters in /etc/waagent.conf:

      ResourceDisk.Format=y
      ResourceDisk.Filesystem=ext4
      ResourceDisk.MountPoint=/mnt/resource
      ResourceDisk.EnableSwap=y
      ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
      

      Als u in plaats daarvan cloud-init wilt gebruiken, configureert u cloud-init voor het afhandelen van inrichting en voorkomt u dat de Azure Linux-agent de resourceschijf opmaakt of wisselruimte maakt:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      
    2. Als u cloud-init kiest, kiest u hoe u de wisselconfiguratie moet opgeven.

      U kunt telkens wanneer u een VM maakt via customdata een cloud-init-configuratie doorgeven. Gebruik deze methode.

      U kunt ook een cloud-init-instructie toevoegen aan de installatiekopieën, zodat wisselruimte wordt geconfigureerd telkens wanneer een virtuele machine wordt gemaakt. Als u deze methode wilt gebruiken, maakt u een CFG-bestand:

      echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf
      cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  8. Configureer cloud-init om de provisioning af te handelen:

    1. Configureer waagent voor cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      

      Als u een specifieke virtuele machine migreert en geen gegeneraliseerde image wilt maken, stelt u Provisioning.Agent=disabled in de configuratie van /etc/waagent.conf in.

    2. Koppels configureren:

      echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
      
    3. Configureer de Azure-gegevensbron:

      echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
      datasource_list: [ Azure ]
      datasource:
         Azure:
           apply_network_config: False
      EOF
      
    4. Verwijder het bestaande wisselbestand als u er een hebt geconfigureerd:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swap file by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. Cloud-init-logboekregistratie configureren:

      echo "Add console log file"
      cat << EOF | sudo tee -a /etc/cloud/cloud.cfg.d/05_logging.cfg
      
      # This tells cloud-init to redirect its stdout and stderr to
      # 'tee -a /var/log/cloud-init-output.log' so the user can see output
      # there without needing to look on the console.
      output: {all: '| tee -a /var/log/cloud-init-output.log'}
      EOF
      
  9. Controleer de configuratie voor het koppelen van de schijf voordat u de virtuele machine buiten gebruik stelt. Deze validatie is van toepassing op zowel SCSI- als externe NVMe-installatiekopieën.

    1. Controleer /etc/fstab. Gebruik geen apparaatnamen zoals /dev/sd* of /dev/nvme*, omdat apparaatnamen kunnen worden gewijzigd tijdens het opnieuw opstarten of wanneer de schijfcontroller wordt gewijzigd. Gebruik in plaats daarvan UUID's van het bestandssysteem of andere permanente id's.

      Vermeld de blokapparaten en de bijbehorende permanente id's, zodat u ze kunt vergelijken met de vermeldingen in /etc/fstab:

      sudo blkid
      
    2. Controleer /etc/fstab op syntaxisfouten, ongeldige mountopties en verwijzingen die niet kunnen worden opgelost:

      sudo findmnt --verify --verbose
      
    3. Alleen als u een systeemimage voor een externe NVMe-schijfcontroller maakt, controleer dan de geconfigureerde I/O-time-out. Als de bron-VM momenteel NVMe gebruikt, voert u het volgende uit:

      cat /sys/module/nvme_core/parameters/io_timeout
      

      De waarde moet zijn 240. Deze runtimeparameter wordt mogelijk niet beschikbaar gemaakt door een SCSI-bron-VM; Controleer in dat geval of nvme_core.io_timeout=240 deze aanwezig is in de GRUB-configuratie en of de herbouwde configuratie deze bevat.

  10. Voer de volgende opdrachten uit om de inrichting van de virtuele machine ongedaan te maken.

    Caution

    Als u een specifieke virtuele machine migreert en geen gegeneraliseerde image wilt maken, slaat u de deprovisioneringsstap over. Als u de opdracht waagent -force -deprovision+user uitvoert, wordt de bronmachine onbruikbaar. Deze stap is alleen bedoeld om een gegeneraliseerde image te creëren.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    

    In VirtualBox ziet u mogelijk een foutmelding nadat u waagent -force -deprovision hebt uitgevoerd, met de melding [Errno 5] Input/output error. Dit foutbericht is niet kritiek en u kunt dit negeren.

  11. Sluit de virtuele machine af en upload de VHD naar Azure.

Volgende stappen 

Een Virtuele Linux-machine maken op basis van een aangepaste schijf met behulp van de Azure CLI

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.