El archivo de intercambio no se vuelve a crear una vez que se reinicia una VM de Linux

En este artículo se proporciona una solución a un problema en el que el archivo de intercambio no se puede volver a crear después de reiniciar una máquina virtual de Linux.

Versión del producto original:   Azure, máquina virtual que ejecuta Linux
Número de KB original:   4577868

Síntomas

En las máquinas virtuales (VM) Linux que aprovisiona la inicialización en la nube y que tienen instalado el agente Microsoft Azure Linux (waagent) , puede que el archivo de intercambio no se vuelva a crear después de un reinicio.

Causa

Este problema se produce debido a un error de configuración que provoca que el agente de Azure Linux y la inicialización de la nube intenten configurar el archivo de intercambio. Cuando la inicialización de nube es responsable del aprovisionamiento, el archivo de intercambio debe configurarse mediante la inicialización de nube para habilitar solo un agente (ya sea la inicialización de nube o la waagent) para el aprovisionamiento. Este problema puede ser intermitente debido al momento en que se inician los daemons de waagent.

Solución

Para resolver este problema, siga estos pasos:

  1. Deshabilite el formato de disco de recursos y, a continuación, intercambie la configuración en el archivo de configuración de waagent: /etc/waagent.conf . Para ello, siga el método de inicialización de la nube:

    # Format if unformatted. If 'n', resource disk will not be mounted. ResourceDisk.Format=n 
    # Create and use swapfile on resource disk. ResourceDisk.EnableSwap=n** 
    
  2. Asegúrese de que el agente Linux de Azure no intente montar el disco efímero. Esto se debe a que la tarea suele controlarse mediante la inicialización de nube. Establezca los parámetros de la siguiente manera:

    # vi /etc/waagent.conf 
    #Mount point for the resource disk 
    ResourceDisk.MountPoint=/mnt 
    
    #Create and use swapfile on resource disk. 
    ResourceDisk.EnableSwap=n 
    
    # Create and use swapfile on resource disk. 
    ResourceDisk.EnableSwap=n 
    
    #Size of the swapfile. 
    ResourceDisk.SwapSizeMB=0
    
  3. Reinicie el agente de Azure Linux. Consulte How to update The Azure Linux Agent on a VM para obtener información acerca de los comandos de reinicio para distintas distribuciones de Linux.

  4. Asegúrese de que la máquina virtual esté configurada para crear un archivo de intercambio mediante la inicialización de la nube:

    1. Agregue el siguiente script a /var/lib/cloud/scripts/per-boot .

      root@ub1804-ephemeral:/var/lib/cloud/scripts/per-boot# cat create_swapfile.sh
      #!/bin/sh
      if [ ! -f '/mnt/swapfile' ]; then
      fallocate --length 2GiB /mnt/swapfile    --> Here, set the swapsize as necessary.
      chmod 600 /mnt/swapfile
      mkswap /mnt/swapfile
      swapon /mnt/swapfile
      swapon -a ; fi
      
    2. Haga el archivo ejecutable mediante el # chmod +x create_swapfile.sh comando.

    3. Reinicie el servidor y compruebe si se ha habilitado el intercambio. A continuación, se muestra un ejemplo de cómo habilitar la función de intercambio:

      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
      

Para aislar el problema, compare los registros con /var/log/waagent.log y /var/log/cloud-init.log para el período de reinicio.

Para evitar esta situación completamente, implemente la máquina virtual con los datos personalizados de la configuración de intercambio durante el aprovisionamiento. Para obtener más información, vea use Cloud-init para configurar una partición de intercambio en una máquina virtual de Linux.