Freigeben über


Swap file isn't re-created after a Linux VM restarts

Gilt für: ✔️ Linux-VMs

Ursprüngliche KB-Nummer: 4577868

Notiz

CentOS, auf das in diesem Artikel verwiesen wird, ist eine Linux-Verteilung und wird End Of Life (EOL) erreichen. Sie sollten sich Ihre Nutzung dieser Distribution ansehen und entsprechend planen. Weitere Informationen finden Sie unter CentOS End Of Life Guidance.

Dieser Artikel enthält eine Lösung für ein Problem, bei dem die Auslagerungsdatei nach einem Neustart eines virtuellen Linux-Computers nicht erneut erstellt werden kann.

Symptome

Auf virtuellen Linux-Computern (VMs), die von cloudinit bereitgestellt werden und deren Microsoft Azure Linux Agent (waagent) installiert ist, stellen Sie möglicherweise fest, dass die Swapdatei nach einem Neustart nicht neu erstellt wird.

Ursache

Dieses Problem tritt aufgrund einer Fehlkonfiguration auf, die dazu führt, dass sowohl der Azure Linux-Agent als auch der Cloud-Init versuchen, die Swapdatei zu konfigurieren. Wenn cloud-init für die Bereitstellung verantwortlich ist, muss die Swapdatei von cloud-init konfiguriert werden, um nur einen Agent (cloud-init oder waagent) für die Bereitstellung zu aktivieren. Dieses Problem kann aufgrund des Zeitpunkts des Starts der Waagent-Daemons zeitweise auftreten.

Lösung

Gehen Sie folgendermaßen vor, um dieses Problem zu beheben:

  1. Deaktivieren Sie die Ressourcendatenträgerformatierung und die Swapkonfiguration innerhalb der Waagent-Konfiguration /etc/waagent.conf , da diese Aufgabe jetzt von Cloud-Init behandelt wird. Legen Sie die Parameter wie folgt fest:

    # 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. Starten Sie den Azure Linux-Agent neu. Informationen zu den Neustartbefehlen für verschiedene Linux-Verteilungen finden Sie unter "Aktualisieren des Azure Linux-Agents auf einem virtuellen Computer".

  3. Stellen Sie sicher, dass der virtuelle Computer so konfiguriert ist, dass eine Swapdatei mithilfe von cloud-init erstellt wird:

    1. Erstellen Sie ein Skript /var/lib/cloud/scripts/per-boot/create_swapfile.sh mit den folgenden Befehlen:

      #!/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
      

      In einigen Fällen erstellt der fallocate Befehl keine Auslagerungsdatei ordnungsgemäß. Wenn eine Auslagerungsdatei nicht ordnungsgemäß erstellt wird, können Sie das folgende alternative Skript verwenden:

      dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048
      
    2. Erstellen Sie die ausführbare Datei mithilfe des # chmod +x create_swapfile.sh Befehls.

    3. Beenden Und starten Sie den virtuellen Computer, oder stellen Sie ihn über das Portal erneut zur Bereitstellung her, und überprüfen Sie die Tauschaktivierung. Hier ist ein Beispiel für das Aktivieren der Swap-Funktion:

      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
      

Um das Problem zu isolieren, vergleichen Sie die Protokolle von /var/log/waagent.log und /var/log/cloud-init.log für den Neustartzeitrahmen.

Um diese Situation vollständig zu vermeiden, stellen Sie den virtuellen Computer mithilfe der benutzerdefinierten Swapkonfigurationsdaten während der Bereitstellung bereit.

Verwenden von „cloud-init“ zum Konfigurieren einer Swap-Partition auf einer Linux-VM

In diesem Artikel wird veranschaulicht, wie Sie cloud-init zum Konfigurieren der Swap-Partition auf verschiedenen Linux-Distributionen verwenden. Die Swap-Partition wurde traditionell vom Linux-Agent (WALA) konfiguriert – abhängig davon, für welche Distributionen eine Auslagerungsdatei benötigt wurde. In diesem Dokument wird das Vorgehen für die bedarfsgesteuerte Erstellung der Swap-Partition zur Bereitstellungszeit unter Verwendung von „cloud-init“ beschrieben. Weitere Informationen zur nativen Funktionsweise von „cloud-init“ in Azure und zu den unterstützten Linux-Distributionen finden Sie in der Übersicht zu „cloud-init“.

Erstellen einer Swap-Partition für Ubuntu-basierte Images

In Azure werden für Ubuntu-Katalogimages standardmäßig keine Swap-Partitionen erstellt. Informationen zum Aktivieren der Konfiguration einer Swap-Partition während der VM-Bereitstellung mit „cloud-init“ finden Sie im Ubuntu-Wiki im AzureSwapPartitions-Dokument.

Erstellen einer Swap-Partition für Red Hat- und CentOS-basierte Images

Erstellen Sie in der aktuellen Shell eine Datei mit dem Namen cloud_init_swappart.txt, und fügen Sie die folgende Konfiguration ein. Erstellen Sie für dieses Beispiel die Datei in der Cloud Shell, nicht auf dem lokalen Computer. Dazu können Sie einen beliebigen Editor verwenden. Geben Sie sensible-editor cloud_init_swappart.txt ein, um die Datei zu erstellen und eine Liste der verfügbaren Editoren anzuzeigen. Wählen Sie #1 aus, um den Editor nano zu verwenden. Stellen Sie sicher, dass die gesamte cloud-init-Datei ordnungsgemäß kopiert wird, insbesondere die erste Zeile.

#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"]

Die Bereitstellung wird mit der nofail Option erstellt, um sicherzustellen, dass der Start fortgesetzt wird, auch wenn die Bereitstellung nicht erfolgreich abgeschlossen wurde.

Vor der Bereitstellung dieses Images müssen Sie mit dem Befehl az group create eine Ressourcengruppe erstellen. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus.

az group create --name myResourceGroup --location eastus

Erstellen Sie nun mit dem Befehl az vm create eine VM, und geben Sie mit --custom-data cloud_init_swappart.txt die cloud-init-Datei an, wie im Folgenden gezeigt wird:

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

Überprüfen der Erstellung einer Swap-Partition

Stellen Sie eine SSH-Verbindung mit der öffentlichen IP-Adresse Ihrer VM her, die in der Ausgabe über den vorherigen Befehl gezeigt wird. Geben Sie Ihre eigene publicIpAddress wie folgt ein:

ssh <publicIpAddress>

Nachdem Sie eine SSH-Verbindung mit der VM hergestellt haben, können Sie überprüfen, ob die Swap-Partition erstellt wurde.

swapon -s

Die Ausgabe dieses Befehls sollte wie folgt aussehen:

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

Hinweis

Wenn für Ihr vorhandenes Azure-Image eine Swap-Partition konfiguriert wurde und Sie die Konfiguration der Swap-Partition für neue Images ändern möchten, müssen Sie die vorhandene Swap-Partition entfernen. Weitere Informationen finden Sie unter Anpassen von Bildern, die von cloudinit bereitgestellt werden.

Nächste Schritte

Weitere cloud-init-Beispiele für Änderungen an der Konfiguration finden Sie in den folgenden Themen:

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.