Växlingsfilen återskapas inte när en virtuell Linux-dator startas om

Den här artikeln innehåller en lösning på ett problem där växlingsfilen inte kan återskapas efter en omstart av en virtuell Linux-dator.

Ursprunglig produktversion: Azure, virtuell dator som kör Linux
Ursprungligt KB-nummer: 4577868

Symptom

På virtuella Linux-datorer (VM) som etableras av cloud-init och som har Microsoft Azure Linux Agent (waagent) installerat kan du upptäcka att växlingsfilen inte återskapas efter en omstart.

Orsak

Det här problemet uppstår på grund av en felaktig konfiguration som gör att både Azure Linux-agenten och cloud-init försöker konfigurera växlingsfilen. När cloud-init ansvarar för etableringen måste växlingsfilen konfigureras av cloud-init för att endast aktivera en agent (antingen cloud-init eller waagent) för etablering. Det här problemet kan vara tillfälligt på grund av tidpunkten för när waagent-daemonerna startar.

Lösning

Följ de här stegen för att lösa problemet:

  1. Inaktivera resursdiskformatering och växlingskonfiguration i waagent-konfigurationen eftersom den här uppgiften nu hanteras av Cloud-Init. Ange parametrarna enligt följande:

    # Format if unformatted. If 'n', resource disk will not be mounted.
    ResourceDisk.Format=n
    
    # Create and use swapfile on resource disk.
    ResourceDisk.EnableSwap=n
    
    #Mount point for the resource disk
    ResourceDisk.MountPoint=/mnt
    
    #Size of the swapfile.
    ResourceDisk.SwapSizeMB=0
    
  2. Starta om Azure Linux-agenten. Se Så här uppdaterar du Azure Linux-agenten på en virtuell dator för information om omstartskommandona för olika Linux-distributioner.

  3. Kontrollera att den virtuella datorn är konfigurerad för att skapa en växlingsfil med hjälp av cloud-init:

    1. Lägg till följande skript i /var/lib/cloud/scripts/per-boot.

      #!/bin/sh
      if [ ! -f '/mnt/swapfile' ]; then
      fallocate --length 2GiB /mnt/swapfile
      chmod 600 /mnt/swapfile
      mkswap /mnt/swapfile
      swapon /mnt/swapfile
      swapon -a 
      else
      swapon /mnt/swapfile; fi
      

      I vissa fall fallocate skapar kommandot inte en växlingsfil korrekt. Om en växlingsfil inte har skapats korrekt kan du använda det alternativa skriptet nedan:

      dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048
      
    2. Gör filen körbar med hjälp # chmod +x create_swapfile.sh av kommandot .

    3. Stoppa och starta den virtuella datorn eller distribuera om den från portalen och sök efter växlingsaktivering. Här är ett exempel på hur du aktiverar växlingsfunktionen:

      root@ub1804-ephemeral:/var/lib/cloud/scripts/per-boot# free -m 
      total used free shared buff/cache available 
      Mem: 7953 296 7384 0 272 7412 
      Swap: 2047 0 2047
      

Om du vill isolera problemet jämför du loggarna från /var/log/waagent.log och /var/log/cloud-init.log för tidsramen för omstart.

För att undvika den här situationen helt distribuerar du den virtuella datorn med hjälp av anpassade växlingskonfigurationsdata under etableringen.

Använd cloud-init för att konfigurera en växlingspartition på en virtuell Linux-dator

Den här artikeln visar hur du använder cloud-init för att konfigurera växlingspartitionen på olika Linux-distributioner. Växlingspartitionen konfigurerades traditionellt av Linux-agenten (WALA) baserat på vilka distributioner som krävde en. Det här dokumentet beskriver processen för att skapa växlingspartitionen på begäran under etableringstiden med hjälp av cloud-init. Mer information om hur cloud-init fungerar internt i Azure och de Linux-distributioner som stöds finns i översikten över cloud-init

Skapa växlingspartition för Ubuntu-baserade avbildningar

Som standard i Azure skapar inte Ubuntu-galleribilder växlingspartitioner. Om du vill aktivera konfiguration av växlingspartitioner under etableringstiden för virtuella datorer med cloud-init kan du läsa dokumentet AzureSwapPartitions på Ubuntu-wikin.

Skapa växlingspartition för Red Hat- och CentOS-baserade avbildningar

Skapa en fil i det aktuella gränssnittet med namnetcloud_init_swappart.txt och klistra in följande konfiguration. I det här exemplet skapar du filen i Cloud Shell inte på den lokala datorn. Du kan använda valfri redigerare. Ange sensible-editor cloud_init_swappart.txt för att skapa filen och se en lista över tillgängliga redigerare. Välj #1 för att använda nanoredigeraren. Kontrollera att hela cloud-init-filen kopieras korrekt, särskilt den första raden.

#cloud-config
disk_setup:
  ephemeral0:
    table_type: gpt
    layout: [66, [33,82]]
    overwrite: true
fs_setup:
  - device: ephemeral0.1
    filesystem: ext4
  - device: ephemeral0.2
    filesystem: swap
mounts:
  - ["ephemeral0.1", "/mnt"]
  - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]

Monteringen nofail skapas med alternativet för att säkerställa att starten fortsätter även om monteringen inte har slutförts.

Innan du distribuerar den här avbildningen måste du skapa en resursgrupp med kommandot az group create . En Azure-resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. I följande exempel skapas en resursgrupp med namnet myResourceGroup på platsen eastus .

az group create --name myResourceGroup --location eastus

Skapa nu en virtuell dator med az vm create och ange cloud-init-filen med --custom-data cloud_init_swappart.txt följande:

az vm create \
  --resource-group myResourceGroup \
  --name centos74 \
  --image OpenLogic:CentOS:7-CI:latest \
  --custom-data cloud_init_swappart.txt \
  --generate-ssh-keys 

Kontrollera att växlingspartitionen har skapats

SSH till den offentliga IP-adressen för den virtuella datorn som visas i utdata från föregående kommando. Ange din egen publicIpAddress på följande sätt:

ssh <publicIpAddress>

När du har SSH'ed i den virtuella datorn kontrollerar du om växlingspartitionen har skapats

swapon -s

Utdata från det här kommandot bör se ut så här:

Filename                Type        Size    Used    Priority
/dev/sdb2  partition   2494440 0   -1

Obs!

Om du har en befintlig Azure-avbildning som har en växlingspartition konfigurerad och du vill ändra växlingspartitionskonfigurationen för nya avbildningar bör du ta bort den befintliga växlingspartitionen. Mer information finns i dokumentet Anpassa avbildningar för att etablera efter cloud-init.

Nästa steg

Fler exempel på konfigurationsändringar i cloud-init finns i följande:

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Support för Azure-communityn.