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:
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
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.
Kontrollera att den virtuella datorn är konfigurerad för att skapa en växlingsfil med hjälp av cloud-init:
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
Gör filen körbar med hjälp
# chmod +x create_swapfile.sh
av kommandot .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.
Rekommenderad korrigering
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:
- Lägga till ytterligare en Linux-användare till en virtuell dator
- Kör en pakethanterare för att uppdatera befintliga paket vid första starten
- Ändra den virtuella datorns lokala värdnamn
- Installera ett programpaket, uppdatera konfigurationsfiler och mata in nycklar
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.