Criar uma partição SWAP para uma VM linux do Azure

Para criar uma partição SWAP em VMs linux do Azure, você precisa configurar o cloud-init para criá-lo automaticamente no disco efêmero (recurso) da VM. O disco de recurso é montado em por /mnt padrão. Ele está localizado no servidor físico onde a VM linux está hospedada e tem latência menor. Não é recomendável criar partições SWAP em discos de sistema operacional ou discos de dados que possam afetar o desempenho do sistema operacional e dos aplicativos. É importante lembrar que o disco de recurso nunca deve ser usado para armazenar dados regulares, pois é apenas armazenamento temporário. Quando uma VM é movida para outro host ou parada/desalocada, todos os dados gravados neste disco serão apagados. É recomendável usar o disco de recurso apenas para dados que podem ser removidos, como arquivos SWAP e cache. Para obter mais informações, confira Disco temporário.

Desabilitar a criação do SWAP na configuração de waagent

Se a criação SWAP estiver configurada em /etc/waagent.conf, você deverá desabilitar.

  1. Desabilite a formatação de disco de recurso e a configuração SWAP dentro de /etc/waagent.conf, pois essa tarefa agora é tratada pelo Cloud-Init. Defina os parâmetros da seguinte maneira:

    # 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. Reinicie o Agente linux do Azure. Consulte Como atualizar o Agente linux do Azure em uma VM para obter informações sobre os comandos de reinicialização para diferentes distribuições do Linux.

Criar uma partição SWAP

Você pode criar uma partição SWAP usando uma das seguintes opções.

Observação

Quando uma partição SWAP é criada, um arquivo de troca também é criado nele.

Opção 1: criar uma partição SWAP no caminho do recurso ou do disco personalizado usando scripts
  1. Crie um script de criação SWAP chamado swap.sh em /var/lib/cloud/scripts/per-boot com o seguinte script:

    #!/bin/sh
    
    # Percent of space on the ephemeral disk to dedicate to swap. Here 30% is being used. Modify as appropriate.
    PCT=0.3
    
    # Location of the swap file. Modify as appropriate based on the location of the ephemeral disk.
    LOCATION=/mnt
    
    if [ ! -f ${LOCATION}/swapfile ]
    then
    
        # Get size of the ephemeral disk and multiply it by the percent of space to allocate
        size=$(/bin/df -m --output=target,avail | /usr/bin/awk -v percent="$PCT" -v pattern=${LOCATION} '$0 ~ pattern {SIZE=int($2*percent);print SIZE}')
        echo "$size MB of space allocated to swap file"
    
         # Create an empty file first and set correct permissions
        /bin/dd if=/dev/zero of=${LOCATION}/swapfile bs=1M count=$size
        /bin/chmod 0600 ${LOCATION}/swapfile
    
        # Make the file available to use as swap
        /sbin/mkswap ${LOCATION}/swapfile
    fi
    
    # Enable swap
    /sbin/swapon ${LOCATION}/swapfile
    /sbin/swapon -a
    
    # Display current swap status
    /sbin/swapon -s
    

    O script será executado em cada inicialização e aloca 30% do espaço disponível no disco de recursos. Você pode personalizar os valores com base em sua situação.

  2. Tornar o script executável:

    chmod +x /var/lib/cloud/scripts/per-boot/swap.sh
    
  3. Pare e inicie a VM. Parar e iniciar a VM só é necessário na primeira vez depois de criar o arquivo SWAP.

Opção 2: criar uma partição SWAP no caminho do disco de recurso usando o cloud-init
  1. Crie a CLOUD_CFG variável em /systemd/system.conf para definir swap e o disco de recurso:

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    
  2. Crie um arquivo YAML que define pontos swap, criação de disco de recurso e montagem:

    sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    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"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  3. Pare e inicie a VM ou reimplante-a para criar a partição SWAP no disco de recurso.

Opção 3: criar uma partição SWAP no caminho do disco de recurso personalizado usando o cloud-init
  1. Crie a CLOUD_CFG variável em /systemd/system.conf para definir swap e o disco de recurso:

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    
  2. Crie um arquivo YAML que define PONTOS de montagem swap, criação de disco de recurso e personalizados ("azure" é um exemplo):

    sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    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", "/azure"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    

    Observação

    Verifique se o ponto de montagem personalizado existe no local especificado no arquivo YAML.

  3. Pare e inicie a VM ou reimplante-a para criar a partição SWAP no disco de recurso.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.